# mady20/learning-spring architecture

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

- Interactive diagram: https://gitdiagram.com/mady20/learning-spring
- Repository: https://github.com/mady20/learning-spring

## Overview

This repository is a set of independent Spring learning experiments, not one application. Its examples cover dependency injection and bean configuration, HTTP request-data handling, JWT authentication, Gemini API integration, and WebSocket chat. The principal user-facing flows are the echo endpoints and the authentication endpoints; the authentication service coordinates user lookup, password checks, token creation, and logout blacklisting. The map includes documented modules whose source was not sampled, but omits uncertain internal wiring for them.

Main entry points: [`auth-service/src/main/java/com/mady/auth_service/service/AuthService.java`](https://github.com/mady20/learning-spring/blob/main/auth-service/src/main/java/com/mady/auth_service/service/AuthService.java) (Auth Workflow), [`auth-service/src/main/java/com/mady/auth_service/controller/AuthController.java`](https://github.com/mady20/learning-spring/blob/main/auth-service/src/main/java/com/mady/auth_service/controller/AuthController.java) (Auth Endpoints), [`auth-service/src/main/java/com/mady/auth_service/service/JwtTokenProvider.java`](https://github.com/mady20/learning-spring/blob/main/auth-service/src/main/java/com/mady/auth_service/service/JwtTokenProvider.java) (JWT Provider), [`api-basics/src/main/java/com/mady/echo/EchoController.java`](https://github.com/mady20/learning-spring/blob/main/api-basics/src/main/java/com/mady/echo/EchoController.java) (Echo Endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_di["Dependency Injection"]
  node_prerequisites["Coupling Examples"]
  node_component_scan["Component Scanning"]
  node_xml_config["XML Bean Config"]
  node_annotation_config["Java Bean Config"]
end

subgraph group_http["HTTP APIs"]
  node_api_controller["Echo Endpoints"]
  node_api_message["Message DTO<br/>[Message.java]"]
end

subgraph group_security["Authentication"]
  node_auth_controller["Auth Endpoints"]
  node_auth_service["Auth Workflow<br/>[AuthService.java]"]
  node_jwt_provider["JWT Provider"]
  node_jwt_filter["JWT Filter"]
  node_security_config["Security Config"]
  node_user_repository["User Repository"]
  node_user_store[("User Database")]
  node_redis_store[("Redis Blacklist")]
end

subgraph group_integrations["External Integrations"]
  node_gemini_controller["Gemini Endpoints"]
  node_gemini_service["Gemini Service<br/>[GeminiService.java]"]
  node_gemini_api["Gemini API"]
end

subgraph group_realtime["Realtime Chat"]
  node_websocket_client["Chat Client<br/>[index.html]"]
  node_websocket_config["WebSocket Config"]
  node_chat_handler["Chat Handler<br/>[ChatHandler.java]"]
end

node_developer(("API User"))

node_developer -->|"sends requests"| node_api_controller
node_api_controller -->|"reads body"| node_api_message
node_developer -->|"sends requests"| node_auth_controller
node_auth_controller -->|"calls"| node_auth_service
node_auth_controller -->|"validates refresh"| node_jwt_provider
node_auth_service -->|"reads and saves"| node_user_repository
node_auth_service -->|"creates tokens"| node_jwt_provider
node_jwt_filter -->|"validates tokens"| node_jwt_provider
node_auth_service -->|"blacklists token"| node_redis_store
node_user_repository -->|"persists users"| node_user_store
node_gemini_controller -->|"delegates"| node_gemini_service
node_gemini_service -.->|"calls"| node_gemini_api
node_websocket_client -->|"opens connection"| node_websocket_config
node_websocket_config -->|"registers handler"| node_chat_handler

click node_prerequisites "https://github.com/mady20/learning-spring/tree/main/prerequisites"
click node_component_scan "https://github.com/mady20/learning-spring/tree/main/component-scanning-way/src/main/java/com/example/demo"
click node_xml_config "https://github.com/mady20/learning-spring/tree/main/xml-config-way/src/main"
click node_annotation_config "https://github.com/mady20/learning-spring/tree/main/annotation-config-way/src/main/java/com/example/manual"
click node_api_controller "https://github.com/mady20/learning-spring/blob/main/api-basics/src/main/java/com/mady/echo/EchoController.java"
click node_api_message "https://github.com/mady20/learning-spring/blob/main/api-basics/src/main/java/com/mady/echo/Message.java"
click node_auth_controller "https://github.com/mady20/learning-spring/blob/main/auth-service/src/main/java/com/mady/auth_service/controller/AuthController.java"
click node_auth_service "https://github.com/mady20/learning-spring/blob/main/auth-service/src/main/java/com/mady/auth_service/service/AuthService.java"
click node_jwt_provider "https://github.com/mady20/learning-spring/blob/main/auth-service/src/main/java/com/mady/auth_service/service/JwtTokenProvider.java"
click node_jwt_filter "https://github.com/mady20/learning-spring/blob/main/auth-service/src/main/java/com/mady/auth_service/security/JwtAuthenticationFilter.java"
click node_security_config "https://github.com/mady20/learning-spring/blob/main/auth-service/src/main/java/com/mady/auth_service/config/SecurityConfig.java"
click node_user_repository "https://github.com/mady20/learning-spring/blob/main/auth-service/src/main/java/com/mady/auth_service/repository/UserRepository.java"
click node_gemini_controller "https://github.com/mady20/learning-spring/blob/main/gemini-integration/src/main/java/com/example/gemini_integration/controller/GeminiController.java"
click node_gemini_service "https://github.com/mady20/learning-spring/blob/main/gemini-integration/src/main/java/com/example/gemini_integration/service/GeminiService.java"
click node_websocket_client "https://github.com/mady20/learning-spring/blob/main/websocket/client/index.html"
click node_websocket_config "https://github.com/mady20/learning-spring/blob/main/websocket/src/main/java/com/example/websocket/WebSocketConfig.java"
click node_chat_handler "https://github.com/mady20/learning-spring/blob/main/websocket/src/main/java/com/example/websocket/ChatHandler.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_prerequisites,node_component_scan,node_xml_config,node_annotation_config,node_developer toneBlue
class node_api_controller,node_api_message toneAmber
class node_auth_controller,node_auth_service,node_jwt_provider,node_jwt_filter,node_security_config,node_user_repository,node_user_store,node_redis_store toneMint
class node_gemini_controller,node_gemini_service,node_gemini_api toneRose
class node_websocket_client,node_websocket_config,node_chat_handler toneIndigo
```

## Components

### Dependency Injection

- [Coupling Examples](https://github.com/mady20/learning-spring/tree/main/prerequisites): `prerequisites`
- [Component Scanning](https://github.com/mady20/learning-spring/tree/main/component-scanning-way/src/main/java/com/example/demo): `component-scanning-way/src/main/java/com/example/demo`
- [XML Bean Config](https://github.com/mady20/learning-spring/tree/main/xml-config-way/src/main): `xml-config-way/src/main`
- [Java Bean Config](https://github.com/mady20/learning-spring/tree/main/annotation-config-way/src/main/java/com/example/manual): `annotation-config-way/src/main/java/com/example/manual`

### HTTP APIs

- [Echo Endpoints](https://github.com/mady20/learning-spring/blob/main/api-basics/src/main/java/com/mady/echo/EchoController.java): `api-basics/src/main/java/com/mady/echo/EchoController.java`
- [Message DTO](https://github.com/mady20/learning-spring/blob/main/api-basics/src/main/java/com/mady/echo/Message.java): `api-basics/src/main/java/com/mady/echo/Message.java`

### Authentication

- [Auth Endpoints](https://github.com/mady20/learning-spring/blob/main/auth-service/src/main/java/com/mady/auth_service/controller/AuthController.java): `auth-service/src/main/java/com/mady/auth_service/controller/AuthController.java`
- [Auth Workflow](https://github.com/mady20/learning-spring/blob/main/auth-service/src/main/java/com/mady/auth_service/service/AuthService.java): `auth-service/src/main/java/com/mady/auth_service/service/AuthService.java`
- [JWT Provider](https://github.com/mady20/learning-spring/blob/main/auth-service/src/main/java/com/mady/auth_service/service/JwtTokenProvider.java): `auth-service/src/main/java/com/mady/auth_service/service/JwtTokenProvider.java`
- [JWT Filter](https://github.com/mady20/learning-spring/blob/main/auth-service/src/main/java/com/mady/auth_service/security/JwtAuthenticationFilter.java): `auth-service/src/main/java/com/mady/auth_service/security/JwtAuthenticationFilter.java`
- [Security Config](https://github.com/mady20/learning-spring/blob/main/auth-service/src/main/java/com/mady/auth_service/config/SecurityConfig.java): `auth-service/src/main/java/com/mady/auth_service/config/SecurityConfig.java`
- [User Repository](https://github.com/mady20/learning-spring/blob/main/auth-service/src/main/java/com/mady/auth_service/repository/UserRepository.java): `auth-service/src/main/java/com/mady/auth_service/repository/UserRepository.java`
- **User Database**
- **Redis Blacklist**

### External Integrations

- [Gemini Endpoints](https://github.com/mady20/learning-spring/blob/main/gemini-integration/src/main/java/com/example/gemini_integration/controller/GeminiController.java): `gemini-integration/src/main/java/com/example/gemini_integration/controller/GeminiController.java`
- [Gemini Service](https://github.com/mady20/learning-spring/blob/main/gemini-integration/src/main/java/com/example/gemini_integration/service/GeminiService.java): `gemini-integration/src/main/java/com/example/gemini_integration/service/GeminiService.java`
- **Gemini API**

### Realtime Chat

- [Chat Client](https://github.com/mady20/learning-spring/blob/main/websocket/client/index.html): `websocket/client/index.html`
- [WebSocket Config](https://github.com/mady20/learning-spring/blob/main/websocket/src/main/java/com/example/websocket/WebSocketConfig.java): `websocket/src/main/java/com/example/websocket/WebSocketConfig.java`
- [Chat Handler](https://github.com/mady20/learning-spring/blob/main/websocket/src/main/java/com/example/websocket/ChatHandler.java): `websocket/src/main/java/com/example/websocket/ChatHandler.java`

### Other components

- **API User**

## Connections

- API User → Echo Endpoints: sends requests
- Echo Endpoints → Message DTO: reads body
- API User → Auth Endpoints: sends requests
- Auth Endpoints → Auth Workflow: calls
- Auth Endpoints → JWT Provider: validates refresh
- Auth Workflow → User Repository: reads and saves
- Auth Workflow → JWT Provider: creates tokens
- JWT Filter → JWT Provider: validates tokens
- Auth Workflow → Redis Blacklist: blacklists token
- User Repository → User Database: persists users
- Gemini Endpoints → Gemini Service: delegates
- Gemini Service → Gemini API: calls
- Chat Client → WebSocket Config: opens connection
- WebSocket Config → Chat Handler: registers handler
