# rishavsinha21/journalapp architecture

> Architecture diagram of the GitHub repository rishavsinha21/journalapp, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/rishavsinha21/journalapp
- Repository: https://github.com/rishavsinha21/journalapp

## Overview

This is a Spring-based personal journaling API: users sign up or log in, receive JWT authentication, then create, view, update, and delete their own entries. Separate user and admin endpoints support account management and administration; the user greeting also retrieves weather. The sampled services show journal ownership maintained through user records and weather cached in Redis. JWT protection is documented by the README, but the security configuration and token utility were not sampled, so their detailed wiring is not expanded here.

Main entry points: [`src/main/java/com/bloc/JournalApp/Service/UserService.java`](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Service/UserService.java) (User service), [`src/main/java/com/bloc/JournalApp/Controller/PublicController.java`](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Controller/PublicController.java) (Public API), [`src/main/java/com/bloc/JournalApp/Controller/JournalEntryControllerV2.java`](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Controller/JournalEntryControllerV2.java) (Journal API), [`src/main/java/com/bloc/JournalApp/Service/JournalEntryService.java`](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Service/JournalEntryService.java) (Journal service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_public_api["Public API"]
  node_journal_api["Journal API"]
  node_user_api["User API"]
  node_admin_api["Admin API"]
end

subgraph group_identity["Identity &amp; Access"]
  node_security["Spring Security"]
  node_user_details["User details"]
  node_user_service["User service<br/>[UserService.java]"]
  node_user_repo["User repository"]
  node_user_entity["User record<br/>[User.java]"]
end

subgraph group_journals["Journal Domain"]
  node_journal_service["Journal service"]
  node_journal_repo["Journal repository"]
  node_journal_entity["Journal entry<br/>[JournalEntry.java]"]
end

subgraph group_integrations["External Services"]
  node_mongo[("MongoDB")]
  node_weather_service["Weather service"]
  node_redis_service["Redis service<br/>[RedisService.java]"]
  node_redis[("Redis")]
  node_weather_provider["Weather API"]
end

node_client(("API client"))

node_client -->|"signs up / logs in"| node_public_api
node_public_api -->|"creates user"| node_user_service
node_public_api -->|"loads account"| node_user_details
node_public_api -->|"authenticates"| node_security
node_client -->|"requests entries"| node_journal_api
node_security -.->|"protects"| node_journal_api
node_journal_api -->|"loads owner"| node_user_service
node_journal_api -->|"manages entry"| node_journal_service
node_journal_service -->|"updates ownership"| node_user_service
node_journal_service -->|"saves / finds / deletes"| node_journal_repo
node_user_api -->|"manages account"| node_user_service
node_user_api -->|"gets weather"| node_weather_service
node_admin_api -->|"manages users"| node_user_service
node_user_service -->|"reads / writes"| node_user_repo
node_user_repo -->|"persists users"| node_mongo
node_journal_repo -->|"persists entries"| node_mongo
node_weather_service -->|"checks / caches"| node_redis_service
node_redis_service -->|"reads / writes"| node_redis
node_weather_service -->|"requests forecast"| node_weather_provider

click node_public_api "https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Controller/PublicController.java"
click node_journal_api "https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Controller/JournalEntryControllerV2.java"
click node_user_api "https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Controller/UserController.java"
click node_admin_api "https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Controller/AdminController.java"
click node_security "https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Configurations/SpringSecurity.java"
click node_user_details "https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Service/UserDetailsServiceImpl.java"
click node_user_service "https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Service/UserService.java"
click node_user_repo "https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Repository/UserRepository.java"
click node_user_entity "https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/entity/User.java"
click node_journal_service "https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Service/JournalEntryService.java"
click node_journal_repo "https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Repository/JournalEntryRepository.java"
click node_journal_entity "https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/entity/JournalEntry.java"
click node_weather_service "https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Service/WeatherService.java"
click node_redis_service "https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Service/RedisService.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_public_api,node_journal_api,node_user_api,node_admin_api,node_client toneBlue
class node_security,node_user_details,node_user_service,node_user_repo,node_user_entity toneAmber
class node_journal_service,node_journal_repo,node_journal_entity toneMint
class node_mongo,node_weather_service,node_redis_service,node_redis,node_weather_provider toneRose
```

## Components

### HTTP API

- [Public API](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Controller/PublicController.java): `src/main/java/com/bloc/JournalApp/Controller/PublicController.java`
- [Journal API](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Controller/JournalEntryControllerV2.java): `src/main/java/com/bloc/JournalApp/Controller/JournalEntryControllerV2.java`
- [User API](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Controller/UserController.java): `src/main/java/com/bloc/JournalApp/Controller/UserController.java`
- [Admin API](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Controller/AdminController.java): `src/main/java/com/bloc/JournalApp/Controller/AdminController.java`

### Identity & Access

- [Spring Security](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Configurations/SpringSecurity.java): `src/main/java/com/bloc/JournalApp/Configurations/SpringSecurity.java`
- [User details](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Service/UserDetailsServiceImpl.java): `src/main/java/com/bloc/JournalApp/Service/UserDetailsServiceImpl.java`
- [User service](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Service/UserService.java): `src/main/java/com/bloc/JournalApp/Service/UserService.java`
- [User repository](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Repository/UserRepository.java): `src/main/java/com/bloc/JournalApp/Repository/UserRepository.java`
- [User record](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/entity/User.java): `src/main/java/com/bloc/JournalApp/entity/User.java`

### Journal Domain

- [Journal service](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Service/JournalEntryService.java): `src/main/java/com/bloc/JournalApp/Service/JournalEntryService.java`
- [Journal repository](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Repository/JournalEntryRepository.java): `src/main/java/com/bloc/JournalApp/Repository/JournalEntryRepository.java`
- [Journal entry](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/entity/JournalEntry.java): `src/main/java/com/bloc/JournalApp/entity/JournalEntry.java`

### External Services

- **MongoDB**
- [Weather service](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Service/WeatherService.java): `src/main/java/com/bloc/JournalApp/Service/WeatherService.java`
- [Redis service](https://github.com/rishavsinha21/journalapp/blob/master/src/main/java/com/bloc/JournalApp/Service/RedisService.java): `src/main/java/com/bloc/JournalApp/Service/RedisService.java`
- **Redis**
- **Weather API**

### Other components

- **API client**

## Connections

- API client → Public API: signs up / logs in
- Public API → User service: creates user
- Public API → User details: loads account
- Public API → Spring Security: authenticates
- API client → Journal API: requests entries
- Spring Security → Journal API: protects
- Journal API → User service: loads owner
- Journal API → Journal service: manages entry
- Journal service → User service: updates ownership
- Journal service → Journal repository: saves / finds / deletes
- User API → User service: manages account
- User API → Weather service: gets weather
- Admin API → User service: manages users
- User service → User repository: reads / writes
- User repository → MongoDB: persists users
- Journal repository → MongoDB: persists entries
- Weather service → Redis service: checks / caches
- Redis service → Redis: reads / writes
- Weather service → Weather API: requests forecast
