# trinhcong1120/khaosat_springboot architecture

> Architecture diagram of the GitHub repository trinhcong1120/khaosat_springboot, 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/trinhcong1120/khaosat_springboot
- Repository: https://github.com/trinhcong1120/khaosat_springboot

## Overview

BE_KhaoSat is a Spring-based microservices backend for authentication, access management, and survey creation and analysis. The main user workflow enters through the gateway, authenticates through auth-service, then uses core-service and survey-service APIs; survey respondents can submit answers through public survey endpoints, while staff can view dashboards and export reports. Core-service also emits user notification events for Kafka delivery and email handling. README documents gateway routes and shared infrastructure; several internal service links are omitted because their wiring was not sampled.

Main entry points: [`gateway-service/src/main/java/com/trinhcong1120/gateway_service/GatewayServiceApplication.java`](https://github.com/trinhcong1120/khaosat_springboot/blob/main/gateway-service/src/main/java/com/trinhcong1120/gateway_service/GatewayServiceApplication.java) (API Gateway), [`auth-service/src/main/java/com/trinhcong1120/auth_service/service/AuthService.java`](https://github.com/trinhcong1120/khaosat_springboot/blob/main/auth-service/src/main/java/com/trinhcong1120/auth_service/service/AuthService.java) (Auth Service), [`survey-service/src/main/java/com/trinhcong1120/survey_service/controller/ReportController.java`](https://github.com/trinhcong1120/khaosat_springboot/blob/main/survey-service/src/main/java/com/trinhcong1120/survey_service/controller/ReportController.java) (Reports API), [`core-service/src/main/java/com/trinhcong1120/core_service/service/UserService.java`](https://github.com/trinhcong1120/khaosat_springboot/blob/main/core-service/src/main/java/com/trinhcong1120/core_service/service/UserService.java) (User Service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_edge["API Edge"]
  node_gateway["API Gateway"]
end

subgraph group_identity["Identity And Access"]
  node_auth_api["Auth API"]
  node_auth_logic["Auth Service<br/>[AuthService.java]"]
  node_auth_users[("Auth User Store")]
  node_auth_jwt["JWT Issuer<br/>[JwtService.java]"]
  node_core_api["Core APIs"]
  node_menu_api["Menu API"]
  node_menu_logic["Menu Service<br/>[MenuService.java]"]
  node_core_user_logic["User Service<br/>[UserService.java]"]
end

subgraph group_survey["Survey Lifecycle"]
  node_survey_api["Survey APIs"]
  node_public_api["Public Survey API"]
  node_public_logic["Public Survey Service"]
  node_survey_reports["Reports API"]
  node_statistics["Statistics Service"]
  node_report_logic["Report Service<br/>[ReportService.java]"]
end

subgraph group_notify["Notifications"]
  node_core_notify["Notification Producer"]
  node_kafka["Kafka Broker"]
  node_notification_consumer["Notification Consumer"]
  node_email["Email Service<br/>[EmailService.java]"]
end

subgraph group_platform["Shared Platform"]
  node_postgres[("PostgreSQL")]
  node_config["Config Server"]
  node_discovery["Eureka Discovery"]
end

node_client(("Client / Frontend"))

node_client -->|"sends API requests"| node_gateway
node_gateway -->|"routes auth"| node_auth_api
node_gateway -->|"routes core APIs"| node_core_api
node_gateway -->|"routes surveys"| node_survey_api
node_gateway -->|"routes public surveys"| node_public_api
node_gateway -->|"routes reports"| node_survey_reports
node_auth_api -->|"invokes"| node_auth_logic
node_auth_logic -->|"looks up user"| node_auth_users
node_auth_logic -->|"generates token"| node_auth_jwt
node_menu_api -->|"invokes"| node_menu_logic
node_core_user_logic -->|"publishes event"| node_core_notify
node_core_notify -->|"sends event"| node_kafka
node_kafka -->|"delivers event"| node_notification_consumer
node_notification_consumer -.->|"handles email"| node_email
node_public_api -->|"invokes"| node_public_logic
node_survey_reports -->|"requests statistics"| node_statistics
node_survey_reports -->|"requests exports"| node_report_logic
node_auth_logic -->|"persists user data"| node_postgres
node_menu_logic -->|"reads/writes menus"| node_postgres
node_core_user_logic -->|"reads/writes users"| node_postgres
node_public_logic -->|"reads/writes survey data"| node_postgres
node_statistics -->|"reads responses"| node_postgres
node_report_logic -->|"reads survey data"| node_postgres

click node_gateway "https://github.com/trinhcong1120/khaosat_springboot/blob/main/gateway-service/src/main/java/com/trinhcong1120/gateway_service/GatewayServiceApplication.java"
click node_auth_api "https://github.com/trinhcong1120/khaosat_springboot/blob/main/auth-service/src/main/java/com/trinhcong1120/auth_service/controller/AuthController.java"
click node_auth_logic "https://github.com/trinhcong1120/khaosat_springboot/blob/main/auth-service/src/main/java/com/trinhcong1120/auth_service/service/AuthService.java"
click node_auth_users "https://github.com/trinhcong1120/khaosat_springboot/blob/main/auth-service/src/main/java/com/trinhcong1120/auth_service/repository/UserRepository.java"
click node_auth_jwt "https://github.com/trinhcong1120/khaosat_springboot/blob/main/auth-service/src/main/java/com/trinhcong1120/auth_service/security/JwtService.java"
click node_core_api "https://github.com/trinhcong1120/khaosat_springboot/blob/main/core-service/src/main/java/com/trinhcong1120/core_service/controller/UserController.java"
click node_menu_api "https://github.com/trinhcong1120/khaosat_springboot/blob/main/core-service/src/main/java/com/trinhcong1120/core_service/controller/MenuController.java"
click node_menu_logic "https://github.com/trinhcong1120/khaosat_springboot/blob/main/core-service/src/main/java/com/trinhcong1120/core_service/service/MenuService.java"
click node_core_user_logic "https://github.com/trinhcong1120/khaosat_springboot/blob/main/core-service/src/main/java/com/trinhcong1120/core_service/service/UserService.java"
click node_core_notify "https://github.com/trinhcong1120/khaosat_springboot/blob/main/core-service/src/main/java/com/trinhcong1120/core_service/producer/NotificationProducer.java"
click node_survey_api "https://github.com/trinhcong1120/khaosat_springboot/blob/main/survey-service/src/main/java/com/trinhcong1120/survey_service/controller/SurveyController.java"
click node_public_api "https://github.com/trinhcong1120/khaosat_springboot/blob/main/survey-service/src/main/java/com/trinhcong1120/survey_service/controller/PublicSurveyController.java"
click node_public_logic "https://github.com/trinhcong1120/khaosat_springboot/blob/main/survey-service/src/main/java/com/trinhcong1120/survey_service/service/PublicSurveyService.java"
click node_survey_reports "https://github.com/trinhcong1120/khaosat_springboot/blob/main/survey-service/src/main/java/com/trinhcong1120/survey_service/controller/ReportController.java"
click node_statistics "https://github.com/trinhcong1120/khaosat_springboot/blob/main/survey-service/src/main/java/com/trinhcong1120/survey_service/service/StatisticsService.java"
click node_report_logic "https://github.com/trinhcong1120/khaosat_springboot/blob/main/survey-service/src/main/java/com/trinhcong1120/survey_service/service/ReportService.java"
click node_notification_consumer "https://github.com/trinhcong1120/khaosat_springboot/blob/main/notification-service/src/main/java/com/trinhcong1120/notification_service/consumer/NotificationConsumer.java"
click node_email "https://github.com/trinhcong1120/khaosat_springboot/blob/main/notification-service/src/main/java/com/trinhcong1120/notification_service/service/EmailService.java"
click node_config "https://github.com/trinhcong1120/khaosat_springboot/blob/main/config-service/src/main/java/com/trinhcong1120/config_service/ConfigServiceApplication.java"
click node_discovery "https://github.com/trinhcong1120/khaosat_springboot/blob/main/discovery-service/src/main/java/com/trinhcong1120/discovery_service/DiscoveryServiceApplication.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_gateway,node_client toneBlue
class node_auth_api,node_auth_logic,node_auth_users,node_auth_jwt,node_core_api,node_menu_api,node_menu_logic,node_core_user_logic toneAmber
class node_survey_api,node_public_api,node_public_logic,node_survey_reports,node_statistics,node_report_logic toneMint
class node_core_notify,node_kafka,node_notification_consumer,node_email toneRose
class node_postgres,node_config,node_discovery toneIndigo
```

## Components

### API Edge

- [API Gateway](https://github.com/trinhcong1120/khaosat_springboot/blob/main/gateway-service/src/main/java/com/trinhcong1120/gateway_service/GatewayServiceApplication.java): `gateway-service/src/main/java/com/trinhcong1120/gateway_service/GatewayServiceApplication.java`

### Identity And Access

- [Auth API](https://github.com/trinhcong1120/khaosat_springboot/blob/main/auth-service/src/main/java/com/trinhcong1120/auth_service/controller/AuthController.java): `auth-service/src/main/java/com/trinhcong1120/auth_service/controller/AuthController.java`
- [Auth Service](https://github.com/trinhcong1120/khaosat_springboot/blob/main/auth-service/src/main/java/com/trinhcong1120/auth_service/service/AuthService.java): `auth-service/src/main/java/com/trinhcong1120/auth_service/service/AuthService.java`
- [Auth User Store](https://github.com/trinhcong1120/khaosat_springboot/blob/main/auth-service/src/main/java/com/trinhcong1120/auth_service/repository/UserRepository.java): `auth-service/src/main/java/com/trinhcong1120/auth_service/repository/UserRepository.java`
- [JWT Issuer](https://github.com/trinhcong1120/khaosat_springboot/blob/main/auth-service/src/main/java/com/trinhcong1120/auth_service/security/JwtService.java): `auth-service/src/main/java/com/trinhcong1120/auth_service/security/JwtService.java`
- [Core APIs](https://github.com/trinhcong1120/khaosat_springboot/blob/main/core-service/src/main/java/com/trinhcong1120/core_service/controller/UserController.java): `core-service/src/main/java/com/trinhcong1120/core_service/controller/UserController.java`
- [Menu API](https://github.com/trinhcong1120/khaosat_springboot/blob/main/core-service/src/main/java/com/trinhcong1120/core_service/controller/MenuController.java): `core-service/src/main/java/com/trinhcong1120/core_service/controller/MenuController.java`
- [Menu Service](https://github.com/trinhcong1120/khaosat_springboot/blob/main/core-service/src/main/java/com/trinhcong1120/core_service/service/MenuService.java): `core-service/src/main/java/com/trinhcong1120/core_service/service/MenuService.java`
- [User Service](https://github.com/trinhcong1120/khaosat_springboot/blob/main/core-service/src/main/java/com/trinhcong1120/core_service/service/UserService.java): `core-service/src/main/java/com/trinhcong1120/core_service/service/UserService.java`

### Survey Lifecycle

- [Survey APIs](https://github.com/trinhcong1120/khaosat_springboot/blob/main/survey-service/src/main/java/com/trinhcong1120/survey_service/controller/SurveyController.java): `survey-service/src/main/java/com/trinhcong1120/survey_service/controller/SurveyController.java`
- [Public Survey API](https://github.com/trinhcong1120/khaosat_springboot/blob/main/survey-service/src/main/java/com/trinhcong1120/survey_service/controller/PublicSurveyController.java): `survey-service/src/main/java/com/trinhcong1120/survey_service/controller/PublicSurveyController.java`
- [Public Survey Service](https://github.com/trinhcong1120/khaosat_springboot/blob/main/survey-service/src/main/java/com/trinhcong1120/survey_service/service/PublicSurveyService.java): `survey-service/src/main/java/com/trinhcong1120/survey_service/service/PublicSurveyService.java`
- [Reports API](https://github.com/trinhcong1120/khaosat_springboot/blob/main/survey-service/src/main/java/com/trinhcong1120/survey_service/controller/ReportController.java): `survey-service/src/main/java/com/trinhcong1120/survey_service/controller/ReportController.java`
- [Statistics Service](https://github.com/trinhcong1120/khaosat_springboot/blob/main/survey-service/src/main/java/com/trinhcong1120/survey_service/service/StatisticsService.java): `survey-service/src/main/java/com/trinhcong1120/survey_service/service/StatisticsService.java`
- [Report Service](https://github.com/trinhcong1120/khaosat_springboot/blob/main/survey-service/src/main/java/com/trinhcong1120/survey_service/service/ReportService.java): `survey-service/src/main/java/com/trinhcong1120/survey_service/service/ReportService.java`

### Notifications

- [Notification Producer](https://github.com/trinhcong1120/khaosat_springboot/blob/main/core-service/src/main/java/com/trinhcong1120/core_service/producer/NotificationProducer.java): `core-service/src/main/java/com/trinhcong1120/core_service/producer/NotificationProducer.java`
- **Kafka Broker**
- [Notification Consumer](https://github.com/trinhcong1120/khaosat_springboot/blob/main/notification-service/src/main/java/com/trinhcong1120/notification_service/consumer/NotificationConsumer.java): `notification-service/src/main/java/com/trinhcong1120/notification_service/consumer/NotificationConsumer.java`
- [Email Service](https://github.com/trinhcong1120/khaosat_springboot/blob/main/notification-service/src/main/java/com/trinhcong1120/notification_service/service/EmailService.java): `notification-service/src/main/java/com/trinhcong1120/notification_service/service/EmailService.java`

### Shared Platform

- **PostgreSQL**
- [Config Server](https://github.com/trinhcong1120/khaosat_springboot/blob/main/config-service/src/main/java/com/trinhcong1120/config_service/ConfigServiceApplication.java): `config-service/src/main/java/com/trinhcong1120/config_service/ConfigServiceApplication.java`
- [Eureka Discovery](https://github.com/trinhcong1120/khaosat_springboot/blob/main/discovery-service/src/main/java/com/trinhcong1120/discovery_service/DiscoveryServiceApplication.java): `discovery-service/src/main/java/com/trinhcong1120/discovery_service/DiscoveryServiceApplication.java`

### Other components

- **Client / Frontend**

## Connections

- Client / Frontend → API Gateway: sends API requests
- API Gateway → Auth API: routes auth
- API Gateway → Core APIs: routes core APIs
- API Gateway → Survey APIs: routes surveys
- API Gateway → Public Survey API: routes public surveys
- API Gateway → Reports API: routes reports
- Auth API → Auth Service: invokes
- Auth Service → Auth User Store: looks up user
- Auth Service → JWT Issuer: generates token
- Menu API → Menu Service: invokes
- User Service → Notification Producer: publishes event
- Notification Producer → Kafka Broker: sends event
- Kafka Broker → Notification Consumer: delivers event
- Notification Consumer → Email Service: handles email
- Public Survey API → Public Survey Service: invokes
- Reports API → Statistics Service: requests statistics
- Reports API → Report Service: requests exports
- Auth Service → PostgreSQL: persists user data
- Menu Service → PostgreSQL: reads/writes menus
- User Service → PostgreSQL: reads/writes users
- Public Survey Service → PostgreSQL: reads/writes survey data
- Statistics Service → PostgreSQL: reads responses
- Report Service → PostgreSQL: reads survey data
