# tarunpurohit11/distributed-chat-application architecture

> Architecture diagram of the GitHub repository tarunpurohit11/distributed-chat-application, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/tarunpurohit11/distributed-chat-application
- Repository: https://github.com/tarunpurohit11/distributed-chat-application

## Overview

This repository implements a chat-branded web application whose sampled runtime is focused on account authentication, not message exchange. The principal flow is a user submitting login or registration details in the frontend, the backend issuing access and refresh tokens, and the frontend restoring or ending a session through cookie-backed requests. Backend layers cover HTTP endpoints, authentication and token services, and persistence; frontend layers cover forms, shared auth state, and routing. The graph follows shown calls and documented imports; unsampled route and security wiring is not asserted.

Main entry points: [`backend/src/main/java/com/app/chat/services/AuthService.java`](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/services/AuthService.java) (Auth orchestration), [`backend/src/main/java/com/app/chat/controllers/AuthController.java`](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/controllers/AuthController.java) (Auth endpoints), [`frontend/src/pages/Login.jsx`](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/pages/Login.jsx) (Login page), [`backend/src/main/java/com/app/chat/services/MyUserDetailService.java`](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/services/MyUserDetailService.java) (User lookup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend_ui["Frontend experience"]
  node_auth_form["Auth form<br/>[AuthForm.jsx]"]
  node_input["Input control<br/>[Input.jsx]"]
  node_button["Button control<br/>[Button.jsx]"]
  node_login["Login page<br/>[Login.jsx]"]
  node_register["Registration page<br/>[Register.jsx]"]
  node_navbar["Navigation bar<br/>[Navbar.jsx]"]
  node_routes["Route selection<br/>[AppRoutes.jsx]"]
  node_auth_guards["Route guards"]
end

subgraph group_frontend_auth["Frontend session"]
  node_auth_context["Auth state<br/>[AuthContext.jsx]"]
end

subgraph group_backend_api["Backend API"]
  node_auth_controller["Auth endpoints"]
end

subgraph group_backend_auth["Backend authentication"]
  node_auth_service["Auth orchestration<br/>[AuthService.java]"]
  node_cookie_service["Cookie handling<br/>[CookieService.java]"]
  node_jwt_service["Access token service<br/>[JwtService.java]"]
  node_refresh_service["Refresh token service"]
  node_jwt_filter["JWT request filter<br/>[JwtFilter.java]"]
  node_security_config["Security configuration"]
  node_user_detail_service["User lookup"]
  node_user_details["User principal<br/>[MyUserDetails.java]"]
end

subgraph group_backend_data["Backend persistence"]
  node_user_repository["User repository"]
  node_refresh_repository["Refresh repository"]
  node_user_entity["User entity<br/>[Users.java]"]
  node_refresh_entity["Refresh token entity<br/>[RefreshToken.java]"]
end

node_user(("User"))
node_frontend["Web app"]

node_user -->|"uses"| node_frontend
node_frontend -->|"renders"| node_routes
node_login -->|"renders"| node_auth_form
node_auth_form -->|"uses"| node_input
node_auth_form -->|"uses"| node_button
node_login -->|"updates session"| node_auth_context
node_navbar -->|"reads session"| node_auth_context
node_routes -.->|"routes through"| node_auth_guards
node_auth_context -->|"requests session"| node_auth_controller
node_login -->|"submits credentials"| node_auth_controller
node_auth_controller -->|"delegates auth"| node_auth_service
node_auth_controller -->|"sets cookies"| node_cookie_service
node_auth_service -->|"creates access token"| node_jwt_service
node_auth_service -->|"creates refresh token"| node_refresh_service
node_auth_service -->|"reads refresh cookie"| node_cookie_service
node_auth_service -->|"looks up and saves users"| node_user_repository
node_auth_service -->|"revokes refresh token"| node_refresh_repository
node_auth_service -->|"uses principal"| node_user_details
node_refresh_service -->|"stores tokens"| node_refresh_repository
node_refresh_service -->|"creates entity"| node_refresh_entity
node_user_detail_service -->|"loads user"| node_user_repository
node_user_detail_service -->|"maps user"| node_user_entity
node_user_detail_service -->|"creates principal"| node_user_details
node_jwt_service -->|"validates principal"| node_user_details
node_security_config -.->|"registers filter"| node_jwt_filter

click node_auth_form "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/components/auth/AuthForm.jsx"
click node_input "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/components/common/Input.jsx"
click node_button "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/components/common/Button.jsx"
click node_login "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/pages/Login.jsx"
click node_register "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/pages/Register.jsx"
click node_navbar "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/components/common/Navbar.jsx"
click node_routes "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/routes/AppRoutes.jsx"
click node_auth_guards "https://github.com/tarunpurohit11/distributed-chat-application/tree/main/frontend/src/routes"
click node_auth_context "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/context/AuthContext.jsx"
click node_auth_controller "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/controllers/AuthController.java"
click node_auth_service "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/services/AuthService.java"
click node_cookie_service "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/services/CookieService.java"
click node_jwt_service "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/jwtAuth/JwtService.java"
click node_refresh_service "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/jwtAuth/RefreshTokenService.java"
click node_jwt_filter "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/jwtAuth/JwtFilter.java"
click node_security_config "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/config/SecurityConfig.java"
click node_user_detail_service "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/services/MyUserDetailService.java"
click node_user_details "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/modals/MyUserDetails.java"
click node_user_repository "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/repository/UserRepository.java"
click node_refresh_repository "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/repository/RefreshTokenRepository.java"
click node_user_entity "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/entities/Users.java"
click node_refresh_entity "https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/entities/RefreshToken.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_auth_form,node_input,node_button,node_login,node_register,node_navbar,node_routes,node_auth_guards,node_user toneBlue
class node_auth_context toneAmber
class node_auth_controller toneMint
class node_auth_service,node_cookie_service,node_jwt_service,node_refresh_service,node_jwt_filter,node_security_config,node_user_detail_service,node_user_details toneRose
class node_user_repository,node_refresh_repository,node_user_entity,node_refresh_entity,node_frontend toneIndigo
```

## Components

### Frontend experience

- [Auth form](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/components/auth/AuthForm.jsx): `frontend/src/components/auth/AuthForm.jsx`
- [Input control](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/components/common/Input.jsx): `frontend/src/components/common/Input.jsx`
- [Button control](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/components/common/Button.jsx): `frontend/src/components/common/Button.jsx`
- [Login page](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/pages/Login.jsx): `frontend/src/pages/Login.jsx`
- [Registration page](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/pages/Register.jsx): `frontend/src/pages/Register.jsx`
- [Navigation bar](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/components/common/Navbar.jsx): `frontend/src/components/common/Navbar.jsx`
- [Route selection](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/routes/AppRoutes.jsx): `frontend/src/routes/AppRoutes.jsx`
- [Route guards](https://github.com/tarunpurohit11/distributed-chat-application/tree/main/frontend/src/routes): `frontend/src/routes`

### Frontend session

- [Auth state](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/frontend/src/context/AuthContext.jsx): `frontend/src/context/AuthContext.jsx`

### Backend API

- [Auth endpoints](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/controllers/AuthController.java): `backend/src/main/java/com/app/chat/controllers/AuthController.java`

### Backend authentication

- [Auth orchestration](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/services/AuthService.java): `backend/src/main/java/com/app/chat/services/AuthService.java`
- [Cookie handling](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/services/CookieService.java): `backend/src/main/java/com/app/chat/services/CookieService.java`
- [Access token service](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/jwtAuth/JwtService.java): `backend/src/main/java/com/app/chat/jwtAuth/JwtService.java`
- [Refresh token service](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/jwtAuth/RefreshTokenService.java): `backend/src/main/java/com/app/chat/jwtAuth/RefreshTokenService.java`
- [JWT request filter](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/jwtAuth/JwtFilter.java): `backend/src/main/java/com/app/chat/jwtAuth/JwtFilter.java`
- [Security configuration](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/config/SecurityConfig.java): `backend/src/main/java/com/app/chat/config/SecurityConfig.java`
- [User lookup](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/services/MyUserDetailService.java): `backend/src/main/java/com/app/chat/services/MyUserDetailService.java`
- [User principal](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/modals/MyUserDetails.java): `backend/src/main/java/com/app/chat/modals/MyUserDetails.java`

### Backend persistence

- [User repository](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/repository/UserRepository.java): `backend/src/main/java/com/app/chat/repository/UserRepository.java`
- [Refresh repository](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/repository/RefreshTokenRepository.java): `backend/src/main/java/com/app/chat/repository/RefreshTokenRepository.java`
- [User entity](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/entities/Users.java): `backend/src/main/java/com/app/chat/entities/Users.java`
- [Refresh token entity](https://github.com/tarunpurohit11/distributed-chat-application/blob/main/backend/src/main/java/com/app/chat/entities/RefreshToken.java): `backend/src/main/java/com/app/chat/entities/RefreshToken.java`

### Other components

- **User**
- **Web app**

## Connections

- User → Web app: uses
- Web app → Route selection: renders
- Login page → Auth form: renders (evidence: `frontend/src/pages/Login.jsx`)
- Auth form → Input control: uses (evidence: `frontend/src/components/auth/AuthForm.jsx`)
- Auth form → Button control: uses (evidence: `frontend/src/components/auth/AuthForm.jsx`)
- Login page → Auth state: updates session (evidence: `frontend/src/pages/Login.jsx`)
- Navigation bar → Auth state: reads session (evidence: `frontend/src/components/common/Navbar.jsx`)
- Route selection → Route guards: routes through
- Auth state → Auth endpoints: requests session (evidence: `frontend/src/context/AuthContext.jsx`)
- Login page → Auth endpoints: submits credentials (evidence: `frontend/src/pages/Login.jsx`)
- Auth endpoints → Auth orchestration: delegates auth (evidence: `backend/src/main/java/com/app/chat/controllers/AuthController.java`)
- Auth endpoints → Cookie handling: sets cookies (evidence: `backend/src/main/java/com/app/chat/controllers/AuthController.java`)
- Auth orchestration → Access token service: creates access token (evidence: `backend/src/main/java/com/app/chat/services/AuthService.java`)
- Auth orchestration → Refresh token service: creates refresh token (evidence: `backend/src/main/java/com/app/chat/services/AuthService.java`)
- Auth orchestration → Cookie handling: reads refresh cookie (evidence: `backend/src/main/java/com/app/chat/services/AuthService.java`)
- Auth orchestration → User repository: looks up and saves users (evidence: `backend/src/main/java/com/app/chat/services/AuthService.java`)
- Auth orchestration → Refresh repository: revokes refresh token (evidence: `backend/src/main/java/com/app/chat/services/AuthService.java`)
- Auth orchestration → User principal: uses principal (evidence: `backend/src/main/java/com/app/chat/services/AuthService.java`)
- Refresh token service → Refresh repository: stores tokens (evidence: `backend/src/main/java/com/app/chat/jwtAuth/RefreshTokenService.java`)
- Refresh token service → Refresh token entity: creates entity (evidence: `backend/src/main/java/com/app/chat/jwtAuth/RefreshTokenService.java`)
- User lookup → User repository: loads user (evidence: `backend/src/main/java/com/app/chat/services/MyUserDetailService.java`)
- User lookup → User entity: maps user (evidence: `backend/src/main/java/com/app/chat/services/MyUserDetailService.java`)
- User lookup → User principal: creates principal (evidence: `backend/src/main/java/com/app/chat/services/MyUserDetailService.java`)
- Access token service → User principal: validates principal (evidence: `backend/src/main/java/com/app/chat/jwtAuth/JwtService.java`)
- Security configuration → JWT request filter: registers filter
