# datlichkhambenh/dat-lich-kham-benh architecture

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

- Interactive diagram: https://gitdiagram.com/datlichkhambenh/dat-lich-kham-benh
- Repository: https://github.com/datlichkhambenh/dat-lich-kham-benh

## Overview

This is a Spring Boot clinic-booking application with a browser frontend served by the backend. Patients find doctors and available slots, book appointments, and receive asynchronous email confirmation; doctors manage schedules and visit records, while administrators manage accounts, specialties, services, and analytics. The graph combines sampled controller/service code with documented product capabilities. Some subsystem wiring is based on the README because its implementation was not sampled.

Main entry points: [`frontend/js/api.js`](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/frontend/js/api.js) (Browser UI), [`backend/src/main/java/com/datlichkhambenh/backend/repository/AppointmentRepository.java`](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/repository/AppointmentRepository.java) (JPA repositories), [`backend/src/main/java/com/datlichkhambenh/backend/controller/DoctorController.java`](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/controller/DoctorController.java) (Doctor API), [`backend/src/main/java/com/datlichkhambenh/backend/service/impl/BookingServiceImpl.java`](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/service/impl/BookingServiceImpl.java) (Appointments)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_web["Browser UI<br/>[api.js]"]
end

subgraph group_access["Identity and access"]
  node_auth_controller["Auth API"]
  node_security["JWT security"]
  node_auth_service["Authentication"]
  node_user_details["User lookup"]
end

subgraph group_care["Patient and clinical care"]
  node_booking_api["Booking API"]
  node_doctor_api["Doctor API"]
  node_patient_api["Patient API"]
  node_doctor_service["Doctor search"]
  node_schedule_service["Doctor schedules"]
  node_booking_service["Appointments"]
  node_patient_service["Patient profiles"]
  node_records["Medical records"]
end

subgraph group_admin["Clinic administration"]
  node_admin_api["Admin API"]
  node_admin_service["Admin management"]
  node_service_api["Medical services"]
  node_medical_service["Service catalog"]
end

subgraph group_platform["Persistence and integrations"]
  node_repositories["JPA repositories"]
  node_mysql[("Clinic database")]
  node_cache["Redis cache"]
  node_rabbit["RabbitMQ"]
  node_email_consumer["Email consumer"]
  node_email_publisher["Email publisher"]
end

node_patient(("Patient"))
node_doctor(("Doctor"))
node_administrator(("Administrator"))
node_smtp["SMTP server"]

node_patient -->|"uses"| node_web
node_doctor -->|"uses"| node_web
node_administrator -->|"uses"| node_web
node_web -->|"calls"| node_auth_controller
node_web -->|"calls"| node_booking_api
node_web -->|"calls"| node_doctor_api
node_web -->|"calls"| node_patient_api
node_web -->|"calls"| node_admin_api
node_web -->|"calls"| node_service_api
node_auth_controller -->|"delegates"| node_auth_service
node_security -->|"loads users"| node_user_details
node_auth_service -->|"reads/writes users"| node_repositories
node_doctor_api -->|"delegates"| node_doctor_service
node_doctor_api -->|"delegates"| node_schedule_service
node_doctor_api -->|"delegates"| node_booking_service
node_doctor_api -->|"delegates"| node_records
node_booking_api -->|"delegates"| node_booking_service
node_booking_service -->|"reads/writes bookings"| node_repositories
node_patient_api -->|"delegates"| node_patient_service
node_patient_api -->|"delegates"| node_records
node_schedule_service -->|"reads/writes slots"| node_repositories
node_doctor_service -->|"reads doctors"| node_repositories
node_admin_api -->|"delegates"| node_admin_service
node_admin_service -->|"manages clinic data"| node_repositories
node_service_api -->|"delegates"| node_medical_service
node_medical_service -->|"reads/writes services"| node_repositories
node_repositories -->|"reads/writes"| node_mysql
node_doctor_service -.->|"uses cache"| node_cache
node_schedule_service -.->|"uses cache"| node_cache
node_booking_service -->|"publishes after commit"| node_email_publisher
node_email_publisher -->|"publishes message"| node_rabbit
node_rabbit -->|"dispatches message"| node_email_consumer
node_email_consumer -->|"sends email"| node_smtp

click node_web "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/frontend/js/api.js"
click node_auth_controller "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/controller/AuthController.java"
click node_security "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/config/SecurityConfig.java"
click node_auth_service "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/service/impl/AuthServiceImpl.java"
click node_user_details "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/security/CustomUserDetailsService.java"
click node_booking_api "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/controller/BookingController.java"
click node_doctor_api "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/controller/DoctorController.java"
click node_patient_api "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/controller/PatientController.java"
click node_doctor_service "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/service/impl/DoctorServiceImpl.java"
click node_schedule_service "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/service/impl/DoctorScheduleServiceImpl.java"
click node_booking_service "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/service/impl/BookingServiceImpl.java"
click node_records "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/service/impl/MedicalRecordServiceImpl.java"
click node_admin_api "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/controller/AdminController.java"
click node_admin_service "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/service/impl/AdminManagementServiceImpl.java"
click node_service_api "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/controller/MedicalServiceController.java"
click node_repositories "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/repository/AppointmentRepository.java"
click node_cache "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/service/impl/RedisCacheServiceImpl.java"
click node_rabbit "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/config/RabbitMqConfig.java"
click node_email_consumer "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/messaging/EmailQueueConsumer.java"
click node_email_publisher "https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/messaging/EmailQueuePublisher.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_web toneBlue
class node_auth_controller,node_security,node_auth_service,node_user_details toneAmber
class node_booking_api,node_doctor_api,node_patient_api,node_doctor_service,node_schedule_service,node_booking_service,node_patient_service,node_records,node_smtp toneMint
class node_admin_api,node_admin_service,node_service_api,node_medical_service toneRose
class node_repositories,node_mysql,node_cache,node_rabbit,node_email_consumer,node_email_publisher,node_patient,node_doctor,node_administrator toneIndigo
```

## Components

### Web client

- [Browser UI](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/frontend/js/api.js): `frontend/js/api.js`

### Identity and access

- [Auth API](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/controller/AuthController.java): `backend/src/main/java/com/datlichkhambenh/backend/controller/AuthController.java`
- [JWT security](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/config/SecurityConfig.java): `backend/src/main/java/com/datlichkhambenh/backend/config/SecurityConfig.java`
- [Authentication](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/service/impl/AuthServiceImpl.java): `backend/src/main/java/com/datlichkhambenh/backend/service/impl/AuthServiceImpl.java`
- [User lookup](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/security/CustomUserDetailsService.java): `backend/src/main/java/com/datlichkhambenh/backend/security/CustomUserDetailsService.java`

### Patient and clinical care

- [Booking API](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/controller/BookingController.java): `backend/src/main/java/com/datlichkhambenh/backend/controller/BookingController.java`
- [Doctor API](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/controller/DoctorController.java): `backend/src/main/java/com/datlichkhambenh/backend/controller/DoctorController.java`
- [Patient API](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/controller/PatientController.java): `backend/src/main/java/com/datlichkhambenh/backend/controller/PatientController.java`
- [Doctor search](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/service/impl/DoctorServiceImpl.java): `backend/src/main/java/com/datlichkhambenh/backend/service/impl/DoctorServiceImpl.java`
- [Doctor schedules](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/service/impl/DoctorScheduleServiceImpl.java): `backend/src/main/java/com/datlichkhambenh/backend/service/impl/DoctorScheduleServiceImpl.java`
- [Appointments](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/service/impl/BookingServiceImpl.java): `backend/src/main/java/com/datlichkhambenh/backend/service/impl/BookingServiceImpl.java`
- **Patient profiles**
- [Medical records](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/service/impl/MedicalRecordServiceImpl.java): `backend/src/main/java/com/datlichkhambenh/backend/service/impl/MedicalRecordServiceImpl.java`

### Clinic administration

- [Admin API](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/controller/AdminController.java): `backend/src/main/java/com/datlichkhambenh/backend/controller/AdminController.java`
- [Admin management](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/service/impl/AdminManagementServiceImpl.java): `backend/src/main/java/com/datlichkhambenh/backend/service/impl/AdminManagementServiceImpl.java`
- [Medical services](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/controller/MedicalServiceController.java): `backend/src/main/java/com/datlichkhambenh/backend/controller/MedicalServiceController.java`
- **Service catalog**

### Persistence and integrations

- [JPA repositories](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/repository/AppointmentRepository.java): `backend/src/main/java/com/datlichkhambenh/backend/repository/AppointmentRepository.java`
- **Clinic database**
- [Redis cache](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/service/impl/RedisCacheServiceImpl.java): `backend/src/main/java/com/datlichkhambenh/backend/service/impl/RedisCacheServiceImpl.java`
- [RabbitMQ](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/config/RabbitMqConfig.java): `backend/src/main/java/com/datlichkhambenh/backend/config/RabbitMqConfig.java`
- [Email consumer](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/messaging/EmailQueueConsumer.java): `backend/src/main/java/com/datlichkhambenh/backend/messaging/EmailQueueConsumer.java`
- [Email publisher](https://github.com/datlichkhambenh/dat-lich-kham-benh/blob/main/backend/src/main/java/com/datlichkhambenh/backend/messaging/EmailQueuePublisher.java): `backend/src/main/java/com/datlichkhambenh/backend/messaging/EmailQueuePublisher.java`

### Other components

- **Patient**
- **Doctor**
- **Administrator**
- **SMTP server**

## Connections

- Patient → Browser UI: uses
- Doctor → Browser UI: uses
- Administrator → Browser UI: uses
- Browser UI → Auth API: calls
- Browser UI → Booking API: calls
- Browser UI → Doctor API: calls
- Browser UI → Patient API: calls
- Browser UI → Admin API: calls
- Browser UI → Medical services: calls
- Auth API → Authentication: delegates
- JWT security → User lookup: loads users
- Authentication → JPA repositories: reads/writes users
- Doctor API → Doctor search: delegates
- Doctor API → Doctor schedules: delegates
- Doctor API → Appointments: delegates
- Doctor API → Medical records: delegates
- Booking API → Appointments: delegates
- Appointments → JPA repositories: reads/writes bookings
- Patient API → Patient profiles: delegates
- Patient API → Medical records: delegates
- Doctor schedules → JPA repositories: reads/writes slots
- Doctor search → JPA repositories: reads doctors
- Admin API → Admin management: delegates
- Admin management → JPA repositories: manages clinic data
- Medical services → Service catalog: delegates
- Service catalog → JPA repositories: reads/writes services
- JPA repositories → Clinic database: reads/writes
- Doctor search → Redis cache: uses cache
- Doctor schedules → Redis cache: uses cache
- Appointments → Email publisher: publishes after commit
- Email publisher → RabbitMQ: publishes message
- RabbitMQ → Email consumer: dispatches message
- Email consumer → SMTP server: sends email
