# kvk0396/appointment-management-system architecture

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

- Interactive diagram: https://gitdiagram.com/kvk0396/appointment-management-system
- Repository: https://github.com/kvk0396/appointment-management-system

## Overview

This repository implements a healthcare appointment-management backend as Spring microservices. The documented user journey is registration/login for a JWT, followed by gateway-routed requests: patients manage appointments and consultation history, while doctors manage availability and consultations; key actions can trigger email notifications. Appointment, availability, and consultation are distinct domain services, alongside patient/doctor operations and platform services for routing, discovery, and configuration. Sampled controller and service excerpts show several internal calls; broader service wiring and some cross-service links are documented only at a high level in the README.

Main entry points: [`ApiGateway/src/main/java/com/cognizant/security/AuthenticationFilter.java`](https://github.com/kvk0396/appointment-management-system/blob/main/ApiGateway/src/main/java/com/cognizant/security/AuthenticationFilter.java) (API gateway), [`DoctorService/src/main/java/com/cognizant/controller/DoctorController.java`](https://github.com/kvk0396/appointment-management-system/blob/main/DoctorService/src/main/java/com/cognizant/controller/DoctorController.java) (Doctor API), [`AppointmentScheduling/src/main/java/com/cognizant/controller/AppointmentController.java`](https://github.com/kvk0396/appointment-management-system/blob/main/AppointmentScheduling/src/main/java/com/cognizant/controller/AppointmentController.java) (Appointment API), [`NOTIFICATION-SERVICE/src/main/java/com/cognizant/service/NotificationServiceImpl.java`](https://github.com/kvk0396/appointment-management-system/blob/main/NOTIFICATION-SERVICE/src/main/java/com/cognizant/service/NotificationServiceImpl.java) (Email notifications)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_platform["Platform and security"]
  node_gateway["API gateway"]
  node_jwt["JWT service<br/>[JwtService.java]"]
  node_auth["Service auth<br/>[AuthService.java]"]
  node_config_server["Config server"]
  node_discovery["Service discovery"]
end

subgraph group_users["Patient and doctor"]
  node_patient["Patient API"]
  node_patient_logic["Patient operations"]
  node_doctor["Doctor API"]
  node_doctor_logic["Doctor operations"]
  node_availability_client["Availability client"]
  node_consultation_client_doctor["Consultation client"]
end

subgraph group_scheduling["Appointment scheduling"]
  node_appointment_api["Appointment API"]
  node_appointment_logic["Appointment operations"]
  node_appointment_store[("Appointment data")]
end

subgraph group_clinical["Availability and consultation"]
  node_availability_api["Availability API"]
  node_availability_logic["Availability operations"]
  node_consultation_api["Consultation API"]
  node_consultation_logic["Consultation operations"]
  node_consultation_contract["Consultation contract"]
  node_appointment_client["Appointment client"]
end

subgraph group_notifications["Notifications"]
  node_notification_logic["Email notifications"]
  node_notification_api["Notification API"]
  node_email_sender{{"Mail transport"}}
end

node_patient_actor(("Patient"))
node_doctor_actor(("Doctor"))

node_patient_actor -->|"sends requests"| node_gateway
node_doctor_actor -->|"sends requests"| node_gateway
node_gateway -->|"routes requests"| node_patient
node_gateway -->|"routes requests"| node_doctor
node_gateway -->|"routes requests"| node_appointment_api
node_patient -->|"delegates to"| node_patient_logic
node_doctor -->|"delegates to"| node_doctor_logic
node_appointment_api -->|"delegates to"| node_appointment_logic
node_appointment_logic -.->|"uses data"| node_appointment_store
node_availability_api -->|"delegates to"| node_availability_logic
node_consultation_api -->|"calls contract"| node_consultation_contract
node_consultation_contract -.->|"implemented by"| node_consultation_logic
node_consultation_logic -->|"updates appointment"| node_appointment_client
node_appointment_client -.->|"calls remotely"| node_appointment_api
node_doctor -.->|"uses client"| node_availability_client
node_doctor -.->|"uses client"| node_consultation_client_doctor
node_notification_api -.->|"delegates to"| node_notification_logic
node_notification_logic -->|"sends email"| node_email_sender
node_appointment_logic -.->|"may notify"| node_notification_logic
node_patient_logic -.->|"may notify"| node_notification_logic
node_jwt -.->|"issues tokens"| node_gateway
node_gateway -.->|"forwards identity"| node_auth
node_config_server -.->|"configures"| node_gateway
node_config_server -.->|"configures"| node_appointment_api
node_discovery -.->|"supports discovery"| node_gateway

click node_patient "https://github.com/kvk0396/appointment-management-system/blob/main/PatientService/src/main/java/com/cognizant/controller/PatientController.java"
click node_patient_logic "https://github.com/kvk0396/appointment-management-system/blob/main/PatientService/src/main/java/com/cognizant/service/PatientServiceImpl.java"
click node_doctor "https://github.com/kvk0396/appointment-management-system/blob/main/DoctorService/src/main/java/com/cognizant/controller/DoctorController.java"
click node_doctor_logic "https://github.com/kvk0396/appointment-management-system/blob/main/DoctorService/src/main/java/com/cognizant/service/DoctorServiceImpl.java"
click node_appointment_api "https://github.com/kvk0396/appointment-management-system/blob/main/AppointmentScheduling/src/main/java/com/cognizant/controller/AppointmentController.java"
click node_appointment_logic "https://github.com/kvk0396/appointment-management-system/blob/main/AppointmentScheduling/src/main/java/com/cognizant/services/AppointmentService.java"
click node_appointment_store "https://github.com/kvk0396/appointment-management-system/blob/main/AppointmentScheduling/src/main/java/com/cognizant/repository/AppointmentRepository.java"
click node_availability_api "https://github.com/kvk0396/appointment-management-system/blob/main/AvailabilityService/src/main/java/com/cognizant/controller/AvailabilityController.java"
click node_availability_logic "https://github.com/kvk0396/appointment-management-system/blob/main/AvailabilityService/src/main/java/com/cognizant/service/AvailabilityServiceImpl.java"
click node_consultation_api "https://github.com/kvk0396/appointment-management-system/blob/main/ConsultationWithMockito/src/main/java/com/cognizant/controller/ConsultationController.java"
click node_consultation_logic "https://github.com/kvk0396/appointment-management-system/blob/main/ConsultationWithMockito/src/main/java/com/cognizant/service/ConsultationServiceImpl.java"
click node_consultation_contract "https://github.com/kvk0396/appointment-management-system/blob/main/ConsultationWithMockito/src/main/java/com/cognizant/service/IConsultationService.java"
click node_appointment_client "https://github.com/kvk0396/appointment-management-system/blob/main/ConsultationWithMockito/src/main/java/com/cognizant/config/AppointmentClient.java"
click node_notification_logic "https://github.com/kvk0396/appointment-management-system/blob/main/NOTIFICATION-SERVICE/src/main/java/com/cognizant/service/NotificationServiceImpl.java"
click node_notification_api "https://github.com/kvk0396/appointment-management-system/blob/main/NOTIFICATION-SERVICE/src/main/java/com/cognizant/controller/NotificationController.java"
click node_gateway "https://github.com/kvk0396/appointment-management-system/blob/main/ApiGateway/src/main/java/com/cognizant/security/AuthenticationFilter.java"
click node_jwt "https://github.com/kvk0396/appointment-management-system/blob/main/DoctorService/src/main/java/com/cognizant/service/JwtService.java"
click node_auth "https://github.com/kvk0396/appointment-management-system/blob/main/PatientService/src/main/java/com/cognizant/service/AuthService.java"
click node_availability_client "https://github.com/kvk0396/appointment-management-system/blob/main/DoctorService/src/main/java/com/cognizant/config/AvailabilityClient.java"
click node_consultation_client_doctor "https://github.com/kvk0396/appointment-management-system/blob/main/DoctorService/src/main/java/com/cognizant/config/ConsultationClient.java"
click node_config_server "https://github.com/kvk0396/appointment-management-system/blob/main/ConfigServer/src/main/java/com/cognizant/ConfigServerApplication.java"
click node_discovery "https://github.com/kvk0396/appointment-management-system/blob/main/EurekaServer/src/main/java/com/cognizant/EurekaServerApplication.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_jwt,node_auth,node_config_server,node_discovery toneBlue
class node_patient,node_patient_logic,node_doctor,node_doctor_logic,node_availability_client,node_consultation_client_doctor toneAmber
class node_appointment_api,node_appointment_logic,node_appointment_store toneMint
class node_availability_api,node_availability_logic,node_consultation_api,node_consultation_logic,node_consultation_contract,node_appointment_client toneRose
class node_notification_logic,node_notification_api,node_email_sender,node_patient_actor,node_doctor_actor toneIndigo
```

## Components

### Platform and security

- [API gateway](https://github.com/kvk0396/appointment-management-system/blob/main/ApiGateway/src/main/java/com/cognizant/security/AuthenticationFilter.java): `ApiGateway/src/main/java/com/cognizant/security/AuthenticationFilter.java`
- [JWT service](https://github.com/kvk0396/appointment-management-system/blob/main/DoctorService/src/main/java/com/cognizant/service/JwtService.java): `DoctorService/src/main/java/com/cognizant/service/JwtService.java`
- [Service auth](https://github.com/kvk0396/appointment-management-system/blob/main/PatientService/src/main/java/com/cognizant/service/AuthService.java): `PatientService/src/main/java/com/cognizant/service/AuthService.java`
- [Config server](https://github.com/kvk0396/appointment-management-system/blob/main/ConfigServer/src/main/java/com/cognizant/ConfigServerApplication.java): `ConfigServer/src/main/java/com/cognizant/ConfigServerApplication.java`
- [Service discovery](https://github.com/kvk0396/appointment-management-system/blob/main/EurekaServer/src/main/java/com/cognizant/EurekaServerApplication.java): `EurekaServer/src/main/java/com/cognizant/EurekaServerApplication.java`

### Patient and doctor

- [Patient API](https://github.com/kvk0396/appointment-management-system/blob/main/PatientService/src/main/java/com/cognizant/controller/PatientController.java): `PatientService/src/main/java/com/cognizant/controller/PatientController.java`
- [Patient operations](https://github.com/kvk0396/appointment-management-system/blob/main/PatientService/src/main/java/com/cognizant/service/PatientServiceImpl.java): `PatientService/src/main/java/com/cognizant/service/PatientServiceImpl.java`
- [Doctor API](https://github.com/kvk0396/appointment-management-system/blob/main/DoctorService/src/main/java/com/cognizant/controller/DoctorController.java): `DoctorService/src/main/java/com/cognizant/controller/DoctorController.java`
- [Doctor operations](https://github.com/kvk0396/appointment-management-system/blob/main/DoctorService/src/main/java/com/cognizant/service/DoctorServiceImpl.java): `DoctorService/src/main/java/com/cognizant/service/DoctorServiceImpl.java`
- [Availability client](https://github.com/kvk0396/appointment-management-system/blob/main/DoctorService/src/main/java/com/cognizant/config/AvailabilityClient.java): `DoctorService/src/main/java/com/cognizant/config/AvailabilityClient.java`
- [Consultation client](https://github.com/kvk0396/appointment-management-system/blob/main/DoctorService/src/main/java/com/cognizant/config/ConsultationClient.java): `DoctorService/src/main/java/com/cognizant/config/ConsultationClient.java`

### Appointment scheduling

- [Appointment API](https://github.com/kvk0396/appointment-management-system/blob/main/AppointmentScheduling/src/main/java/com/cognizant/controller/AppointmentController.java): `AppointmentScheduling/src/main/java/com/cognizant/controller/AppointmentController.java`
- [Appointment operations](https://github.com/kvk0396/appointment-management-system/blob/main/AppointmentScheduling/src/main/java/com/cognizant/services/AppointmentService.java): `AppointmentScheduling/src/main/java/com/cognizant/services/AppointmentService.java`
- [Appointment data](https://github.com/kvk0396/appointment-management-system/blob/main/AppointmentScheduling/src/main/java/com/cognizant/repository/AppointmentRepository.java): `AppointmentScheduling/src/main/java/com/cognizant/repository/AppointmentRepository.java`

### Availability and consultation

- [Availability API](https://github.com/kvk0396/appointment-management-system/blob/main/AvailabilityService/src/main/java/com/cognizant/controller/AvailabilityController.java): `AvailabilityService/src/main/java/com/cognizant/controller/AvailabilityController.java`
- [Availability operations](https://github.com/kvk0396/appointment-management-system/blob/main/AvailabilityService/src/main/java/com/cognizant/service/AvailabilityServiceImpl.java): `AvailabilityService/src/main/java/com/cognizant/service/AvailabilityServiceImpl.java`
- [Consultation API](https://github.com/kvk0396/appointment-management-system/blob/main/ConsultationWithMockito/src/main/java/com/cognizant/controller/ConsultationController.java): `ConsultationWithMockito/src/main/java/com/cognizant/controller/ConsultationController.java`
- [Consultation operations](https://github.com/kvk0396/appointment-management-system/blob/main/ConsultationWithMockito/src/main/java/com/cognizant/service/ConsultationServiceImpl.java): `ConsultationWithMockito/src/main/java/com/cognizant/service/ConsultationServiceImpl.java`
- [Consultation contract](https://github.com/kvk0396/appointment-management-system/blob/main/ConsultationWithMockito/src/main/java/com/cognizant/service/IConsultationService.java): `ConsultationWithMockito/src/main/java/com/cognizant/service/IConsultationService.java`
- [Appointment client](https://github.com/kvk0396/appointment-management-system/blob/main/ConsultationWithMockito/src/main/java/com/cognizant/config/AppointmentClient.java): `ConsultationWithMockito/src/main/java/com/cognizant/config/AppointmentClient.java`

### Notifications

- [Email notifications](https://github.com/kvk0396/appointment-management-system/blob/main/NOTIFICATION-SERVICE/src/main/java/com/cognizant/service/NotificationServiceImpl.java): `NOTIFICATION-SERVICE/src/main/java/com/cognizant/service/NotificationServiceImpl.java`
- [Notification API](https://github.com/kvk0396/appointment-management-system/blob/main/NOTIFICATION-SERVICE/src/main/java/com/cognizant/controller/NotificationController.java): `NOTIFICATION-SERVICE/src/main/java/com/cognizant/controller/NotificationController.java`
- **Mail transport**

### Other components

- **Patient**
- **Doctor**

## Connections

- Patient → API gateway: sends requests
- Doctor → API gateway: sends requests
- API gateway → Patient API: routes requests
- API gateway → Doctor API: routes requests
- API gateway → Appointment API: routes requests
- Patient API → Patient operations: delegates to (evidence: `PatientService/src/main/java/com/cognizant/controller/PatientController.java`)
- Doctor API → Doctor operations: delegates to (evidence: `DoctorService/src/main/java/com/cognizant/controller/DoctorController.java`)
- Appointment API → Appointment operations: delegates to (evidence: `AppointmentScheduling/src/main/java/com/cognizant/controller/AppointmentController.java`)
- Appointment operations → Appointment data: uses data
- Availability API → Availability operations: delegates to (evidence: `AvailabilityService/src/main/java/com/cognizant/controller/AvailabilityController.java`)
- Consultation API → Consultation contract: calls contract (evidence: `ConsultationWithMockito/src/main/java/com/cognizant/controller/ConsultationController.java`)
- Consultation contract → Consultation operations: implemented by (evidence: `ConsultationWithMockito/src/main/java/com/cognizant/service/ConsultationServiceImpl.java`)
- Consultation operations → Appointment client: updates appointment (evidence: `ConsultationWithMockito/src/main/java/com/cognizant/service/ConsultationServiceImpl.java`)
- Appointment client → Appointment API: calls remotely
- Doctor API → Availability client: uses client (evidence: `DoctorService/src/main/java/com/cognizant/controller/DoctorController.java`)
- Doctor API → Consultation client: uses client (evidence: `DoctorService/src/main/java/com/cognizant/controller/DoctorController.java`)
- Notification API → Email notifications: delegates to
- Email notifications → Mail transport: sends email (evidence: `NOTIFICATION-SERVICE/src/main/java/com/cognizant/service/NotificationServiceImpl.java`)
- Appointment operations → Email notifications: may notify
- Patient operations → Email notifications: may notify
- JWT service → API gateway: issues tokens
- API gateway → Service auth: forwards identity
- Config server → API gateway: configures
- Config server → Appointment API: configures
- Service discovery → API gateway: supports discovery
