# borismirsky/medical-booking architecture

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

- Interactive diagram: https://gitdiagram.com/borismirsky/medical-booking
- Repository: https://github.com/borismirsky/medical-booking

## Overview

#### Purpose and Runtime
Medical-Booking is a role-based doctor discovery, scheduling, booking, and clinical-record system. It runs as a .NET Web API backend with a Next.js/React/TypeScript frontend. Roles are admin, doctor, and patient. Primary entry points are `backend/MedicalBookingProject/src/MedicalBookingProject.Web/Program.cs` and `frontend/medical-booking/app/page.tsx`.

#### Backend Layering
The backend follows a Clean Architecture-style split:
- Domain owns entities, DTOs, and service/repository interfaces: `backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Models`, `backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Abstractions`.
- Application implements use-case services: `backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/BookingService.cs`, `backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/AppointmentService.cs`, `backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/TimeslotService.cs`.
- Data access implements persistence and JWT infrastructure: `backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/MedicalBookingDbContext.cs`, `backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/Repo`, `backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/Scripts/JwtGenerator.cs`.
- Web exposes HTTP contracts and controllers: `backend/MedicalBookingProject/src/MedicalBookingProject.Web/Controllers`, `backend/MedicalBookingProject/src/MedicalBookingProject.Web/Contracts`.

#### Identity and Authorization Boundary
Admin, doctor, and patient are distinct domain user models, with roles represented in the domain. Authentication issues JWTs; the browser stores tokens in localStorage. This is the critical trust boundary between frontend requests and protected backend workflows. Relevant paths: `backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Models/Users`, `backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/Scripts/JwtGenerator.cs`, `frontend/medical-booking/app/Services/service.tsx`.

#### Scheduling and Booking Flow
Admins create doctors and schedules/timeslots. Patients inspect available doctor slots, create or cancel bookings, and see their booking history. Doctors view their schedules; booked slots lead to appointment creation. Core models and services are `backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Models/Shedules/Timeslot.cs`, `backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/TimeslotService.cs`, and `backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/BookingService.cs`.

#### Appointment and Medical Record Flow
A doctor turns a booked consultation into an appointment and records clinical information. Appointment and medical-record services mediate this transition before repository persistence. API boundaries are represented by request/response contracts and dedicated controllers: `backend/MedicalBookingProject/src/MedicalBookingProject.Web/Controllers/AppointmentsController.cs`, `backend/MedicalBookingProject/src/MedicalBookingProject.Web/Controllers/MedicalrecordsController.cs`, `backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/MedicalrecordService.cs`.

#### Persistence and Infrastructure
Entity Framework configurations map domain entities through the DbContext and repository implementations. The deployed/local persistence dependency is a checked-in SQLite database rather than an external managed service: `backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/Database/medical_booking_db.db`, `backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/Configuration`, `backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/Repo`.

#### Frontend Role Workspaces
Next.js App Router pages route users into separate role-oriented entry and profile pages. Components encode the primary user workflows: admin manages doctors/schedules, patient registers and books, and doctor manages appointments and records. Paths: `frontend/medical-booking/app/profileadmin/page.tsx`, `frontend/medical-booking/app/profilepatient/page.tsx`, `frontend/medical-booking/app/profiledoctor/page.tsx`.

Main entry points: [`backend/MedicalBookingProject/src/MedicalBookingProject.Web/Controllers`](https://github.com/borismirsky/medical-booking/tree/main/backend/MedicalBookingProject/src/MedicalBookingProject.Web/Controllers) (Controllers), [`backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Abstractions`](https://github.com/borismirsky/medical-booking/tree/main/backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Abstractions) (Domain abstractions), [`backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/TimeslotService.cs`](https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/TimeslotService.cs) (Timeslot service), [`backend/MedicalBookingProject/src/MedicalBookingProject.Web/Controllers/AppointmentsController.cs`](https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Web/Controllers/AppointmentsController.cs) (Appointment & records API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Next.js frontend"]
  node_frontend_entry["App entry<br/>Next.js route<br/>[page.tsx]"]
  node_role_workspaces["Role workspaces<br/>Next.js pages<br/>[page.tsx]"]
  node_frontend_api["API client &amp; token store<br/>TypeScript service<br/>[service.tsx]"]
end

subgraph group_web["API boundary"]
  node_api_host{{"Web API host<br/>.NET entry point<br/>[Program.cs]"}}
  node_controllers["Controllers<br/>[Controllers]"]
  node_api_contracts["API contracts<br/>request/response DTOs<br/>[Contracts]"]
  node_appointment_records_api["Appointment &amp; records API<br/>controllers"]
end

subgraph group_application["Application services"]
  node_booking_service["Booking service<br/>use-case service<br/>[BookingService.cs]"]
  node_timeslot_service["Timeslot service<br/>use-case service<br/>[TimeslotService.cs]"]
  node_appointment_service["Appointment service<br/>use-case service"]
  node_medicalrecord_service["Medical record service<br/>use-case service"]
end

subgraph group_domain["Domain"]
  node_domain_models["Domain models<br/>entities and DTOs<br/>[Models]"]
  node_users_roles["Users &amp; roles<br/>identity models<br/>[Users]"]
  node_timeslot_model["Timeslot<br/>schedule entity<br/>[Timeslot.cs]"]
  node_abstractions["Domain abstractions<br/>service/repository interfaces<br/>[Abstractions]"]
end

subgraph group_data["Data access"]
  node_repositories["Repository implementations<br/>persistence adapters<br/>[Repo]"]
  node_db_context[("EF DbContext<br/>Entity Framework context")]
  node_sqlite_database[("SQLite database<br/>checked-in database")]
  node_jwt_generator["JWT generator<br/>authentication infrastructure<br/>[JwtGenerator.cs]"]
end

node_frontend_entry -->|"routes users"| node_role_workspaces
node_role_workspaces -->|"invokes"| node_frontend_api
node_frontend_api -->|"HTTP with JWT"| node_api_host
node_api_host -->|"hosts"| node_controllers
node_controllers -->|"binds"| node_api_contracts
node_controllers -->|"booking requests"| node_booking_service
node_controllers -->|"schedule requests"| node_timeslot_service
node_appointment_records_api -->|"appointment workflow"| node_appointment_service
node_appointment_records_api -->|"record workflow"| node_medicalrecord_service
node_controllers -->|"includes"| node_appointment_records_api
node_booking_service -->|"uses"| node_abstractions
node_timeslot_service -->|"manages"| node_timeslot_model
node_timeslot_service -->|"uses"| node_abstractions
node_appointment_service -->|"uses"| node_abstractions
node_medicalrecord_service -->|"uses"| node_abstractions
node_repositories -.->|"implements"| node_abstractions
node_repositories -->|"persists through"| node_db_context
node_db_context -->|"maps to"| node_sqlite_database
node_controllers -->|"authenticates via"| node_jwt_generator
node_jwt_generator -->|"creates claims for"| node_users_roles
node_domain_models -->|"contains"| node_users_roles
node_domain_models -->|"contains"| node_timeslot_model

click node_frontend_entry "https://github.com/borismirsky/medical-booking/blob/main/frontend/medical-booking/app/page.tsx"
click node_role_workspaces "https://github.com/borismirsky/medical-booking/blob/main/frontend/medical-booking/app/profileadmin/page.tsx"
click node_frontend_api "https://github.com/borismirsky/medical-booking/blob/main/frontend/medical-booking/app/Services/service.tsx"
click node_api_host "https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Web/Program.cs"
click node_controllers "https://github.com/borismirsky/medical-booking/tree/main/backend/MedicalBookingProject/src/MedicalBookingProject.Web/Controllers"
click node_api_contracts "https://github.com/borismirsky/medical-booking/tree/main/backend/MedicalBookingProject/src/MedicalBookingProject.Web/Contracts"
click node_appointment_records_api "https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Web/Controllers/AppointmentsController.cs"
click node_booking_service "https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/BookingService.cs"
click node_timeslot_service "https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/TimeslotService.cs"
click node_appointment_service "https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/AppointmentService.cs"
click node_medicalrecord_service "https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/MedicalrecordService.cs"
click node_domain_models "https://github.com/borismirsky/medical-booking/tree/main/backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Models"
click node_users_roles "https://github.com/borismirsky/medical-booking/tree/main/backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Models/Users"
click node_timeslot_model "https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Models/Shedules/Timeslot.cs"
click node_abstractions "https://github.com/borismirsky/medical-booking/tree/main/backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Abstractions"
click node_repositories "https://github.com/borismirsky/medical-booking/tree/main/backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/Repo"
click node_db_context "https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/MedicalBookingDbContext.cs"
click node_sqlite_database "https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/Database/medical_booking_db.db"
click node_jwt_generator "https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/Scripts/JwtGenerator.cs"

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_frontend_entry,node_role_workspaces,node_frontend_api toneBlue
class node_api_host,node_controllers,node_api_contracts,node_appointment_records_api toneAmber
class node_booking_service,node_timeslot_service,node_appointment_service,node_medicalrecord_service toneMint
class node_domain_models,node_users_roles,node_timeslot_model,node_abstractions toneRose
class node_repositories,node_db_context,node_sqlite_database,node_jwt_generator toneIndigo
```

## Components

### Next.js frontend

- [App entry](https://github.com/borismirsky/medical-booking/blob/main/frontend/medical-booking/app/page.tsx): Next.js route · `frontend/medical-booking/app/page.tsx`
- [Role workspaces](https://github.com/borismirsky/medical-booking/blob/main/frontend/medical-booking/app/profileadmin/page.tsx): Next.js pages · Separate admin, patient, and doctor workflows. · `frontend/medical-booking/app/profileadmin/page.tsx`
- [API client & token store](https://github.com/borismirsky/medical-booking/blob/main/frontend/medical-booking/app/Services/service.tsx): TypeScript service · Stores JWTs in localStorage and sends API requests. · `frontend/medical-booking/app/Services/service.tsx`

### API boundary

- [Web API host](https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Web/Program.cs): .NET entry point · `backend/MedicalBookingProject/src/MedicalBookingProject.Web/Program.cs`
- [Controllers](https://github.com/borismirsky/medical-booking/tree/main/backend/MedicalBookingProject/src/MedicalBookingProject.Web/Controllers): HTTP controllers · `backend/MedicalBookingProject/src/MedicalBookingProject.Web/Controllers`
- [API contracts](https://github.com/borismirsky/medical-booking/tree/main/backend/MedicalBookingProject/src/MedicalBookingProject.Web/Contracts): request/response DTOs · `backend/MedicalBookingProject/src/MedicalBookingProject.Web/Contracts`
- [Appointment & records API](https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Web/Controllers/AppointmentsController.cs): controllers · Exposes appointment and clinical-record endpoints. · `backend/MedicalBookingProject/src/MedicalBookingProject.Web/Controllers/AppointmentsController.cs`

### Application services

- [Booking service](https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/BookingService.cs): use-case service · Creates, cancels, and lists patient bookings. · `backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/BookingService.cs`
- [Timeslot service](https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/TimeslotService.cs): use-case service · Manages doctor schedules and available slots. · `backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/TimeslotService.cs`
- [Appointment service](https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/AppointmentService.cs): use-case service · Turns booked consultations into appointments. · `backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/AppointmentService.cs`
- [Medical record service](https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/MedicalrecordService.cs): use-case service · Persists doctor clinical records. · `backend/MedicalBookingProject/src/MedicalBookingProject.Application/Services/MedicalrecordService.cs`

### Domain

- [Domain models](https://github.com/borismirsky/medical-booking/tree/main/backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Models): entities and DTOs · `backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Models`
- [Users & roles](https://github.com/borismirsky/medical-booking/tree/main/backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Models/Users): identity models · Admin, doctor, and patient identities define role access. · `backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Models/Users`
- [Timeslot](https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Models/Shedules/Timeslot.cs): schedule entity · Represents a doctor consultation slot and booking state. · `backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Models/Shedules/Timeslot.cs`
- [Domain abstractions](https://github.com/borismirsky/medical-booking/tree/main/backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Abstractions): service/repository interfaces · `backend/MedicalBookingProject/src/MedicalBookingProject.Domain/Abstractions`

### Data access

- [Repository implementations](https://github.com/borismirsky/medical-booking/tree/main/backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/Repo): persistence adapters · `backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/Repo`
- [EF DbContext](https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/MedicalBookingDbContext.cs): Entity Framework context · `backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/MedicalBookingDbContext.cs`
- [SQLite database](https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/Database/medical_booking_db.db): checked-in database · `backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/Database/medical_booking_db.db`
- [JWT generator](https://github.com/borismirsky/medical-booking/blob/main/backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/Scripts/JwtGenerator.cs): authentication infrastructure · Issues tokens after authentication. · `backend/MedicalBookingProject/src/MedicalBookingProject.DataAccess/Scripts/JwtGenerator.cs`

## Connections

- App entry → Role workspaces: routes users
- Role workspaces → API client & token store: invokes
- API client & token store → Web API host: HTTP with JWT
- Web API host → Controllers: hosts
- Controllers → API contracts: binds
- Controllers → Booking service: booking requests
- Controllers → Timeslot service: schedule requests
- Appointment & records API → Appointment service: appointment workflow
- Appointment & records API → Medical record service: record workflow
- Controllers → Appointment & records API: includes
- Booking service → Domain abstractions: uses
- Timeslot service → Timeslot: manages
- Timeslot service → Domain abstractions: uses
- Appointment service → Domain abstractions: uses
- Medical record service → Domain abstractions: uses
- Repository implementations → Domain abstractions: implements
- Repository implementations → EF DbContext: persists through
- EF DbContext → SQLite database: maps to
- Controllers → JWT generator: authenticates via
- JWT generator → Users & roles: creates claims for
- Domain models → Users & roles: contains
- Domain models → Timeslot: contains
