# eegoiaa/innoclinic architecture

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

- Interactive diagram: https://gitdiagram.com/eegoiaa/innoclinic
- Repository: https://github.com/eegoiaa/innoclinic

## Overview

InnoClinic is a clinic discovery and appointment-booking product with account registration and sign-in. The user-facing flow is a web client for browsing doctors and services, opening an appointment form, and managing authentication; backend APIs expose appointment creation, profiles, services, and auth operations. The sampled controllers show dispatch through Wolverine message buses. Persistence contexts and other capabilities are represented where supported by the tree, but their runtime wiring—and client API call paths—was not sampled.

Main entry points: [`Client/src/App.tsx`](https://github.com/eegoiaa/innoclinic/blob/main/Client/src/App.tsx) (Client app), [`Microservices/Appointments/InnoClinic.Appointments.API/Controllers/AppointmentsController.cs`](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Appointments/InnoClinic.Appointments.API/Controllers/AppointmentsController.cs) (Appointment API), [`Microservices/Profiles/InnoClinic.Profiles.API/Controllers/DoctorsController.cs`](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Profiles/InnoClinic.Profiles.API/Controllers/DoctorsController.cs) (Profiles API), [`Microservices/Services/InnoClinic.Services.API/Controllers/ServicesController.cs`](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Services/InnoClinic.Services.API/Controllers/ServicesController.cs) (Services API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["Client app<br/>[App.tsx]"]
  node_doctors["Doctor browsing<br/>[DoctorsPage.tsx]"]
  node_services["Service browsing<br/>[ServicesPage.tsx]"]
  node_booking["Appointment dialog"]
  node_authui["Auth dialog<br/>[AuthModal.tsx]"]
end

subgraph group_api["Service APIs"]
  node_appointmentapi["Appointment API"]
  node_createappointment["Create appointment"]
  node_profilesapi["Profiles API"]
  node_doctorquery["Doctor listing"]
  node_servicesapi["Services API"]
  node_servicequery["Service listing"]
end

subgraph group_domain["Clinic data"]
  node_profiledata[("Profile records")]
  node_servicedata[("Service records")]
  node_appointmentdata[("Appointment records")]
end

subgraph group_identity["Identity"]
  node_authapi["Auth API<br/>[AuthController.cs]"]
  node_authcommands["Auth operations<br/>[SignUpHandler.cs]"]
  node_authdata[("Account records<br/>[AuthDbContext.cs]")]
  node_emailservice["Email service<br/>[EmailService.cs]"]
end

node_visitor(("Clinic visitor"))

node_visitor -->|"uses"| node_app
node_app -->|"renders"| node_doctors
node_app -->|"renders"| node_services
node_app -->|"opens"| node_booking
node_app -->|"opens"| node_authui
node_appointmentapi -->|"dispatches"| node_createappointment
node_profilesapi -->|"dispatches"| node_doctorquery
node_servicesapi -->|"dispatches"| node_servicequery
node_authapi -->|"dispatches"| node_authcommands

click node_app "https://github.com/eegoiaa/innoclinic/blob/main/Client/src/App.tsx"
click node_doctors "https://github.com/eegoiaa/innoclinic/blob/main/Client/src/pages/DoctorsPage.tsx"
click node_services "https://github.com/eegoiaa/innoclinic/blob/main/Client/src/pages/ServicesPage.tsx"
click node_booking "https://github.com/eegoiaa/innoclinic/blob/main/Client/src/components/AppointmentModal.tsx"
click node_authui "https://github.com/eegoiaa/innoclinic/blob/main/Client/src/components/auth/AuthModal.tsx"
click node_appointmentapi "https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Appointments/InnoClinic.Appointments.API/Controllers/AppointmentsController.cs"
click node_createappointment "https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Appointments/InnoClinic.Appointments.Application/Appointments/Commands/CreateAppointmentCommand/CreateAppointmentHandler.cs"
click node_profilesapi "https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Profiles/InnoClinic.Profiles.API/Controllers/DoctorsController.cs"
click node_doctorquery "https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Profiles/InnoClinic.Profiles.Application/Doctors/Queries/GetDoctorsList/GetDoctorsListHandler.cs"
click node_servicesapi "https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Services/InnoClinic.Services.API/Controllers/ServicesController.cs"
click node_servicequery "https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Services/InnoClinic.Services.Application/Services/Queries/GetServices/GetServicesHandler.cs"
click node_profiledata "https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Profiles/InnoClinic.Profiles.Infrastructure/Persistence/ProfileDbContext.cs"
click node_servicedata "https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Services/InnoClinic.Services.Infrastructure/Persistence/ServicesDbContext.cs"
click node_appointmentdata "https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Appointments/InnoClinic.Appointments.Infrastructure/Persistence/AppointmentDbContext.cs"
click node_authapi "https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Auth/InnoClinic.Auth.API/Controllers/AuthController.cs"
click node_authcommands "https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Auth/InnoClinic.Auth.Application/Commands/SignUp/SignUpHandler.cs"
click node_authdata "https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Auth/InnoClinic.Auth.Infrastructure/Persistence/AuthDbContext.cs"
click node_emailservice "https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Auth/InnoClinic.Auth.Infrastructure/Services/EmailService.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_app,node_doctors,node_services,node_booking,node_authui toneBlue
class node_appointmentapi,node_createappointment,node_profilesapi,node_doctorquery,node_servicesapi,node_servicequery toneAmber
class node_profiledata,node_servicedata,node_appointmentdata toneMint
class node_authapi,node_authcommands,node_authdata,node_emailservice toneRose
class node_visitor toneIndigo
```

## Components

### Web client

- [Client app](https://github.com/eegoiaa/innoclinic/blob/main/Client/src/App.tsx): `Client/src/App.tsx`
- [Doctor browsing](https://github.com/eegoiaa/innoclinic/blob/main/Client/src/pages/DoctorsPage.tsx): `Client/src/pages/DoctorsPage.tsx`
- [Service browsing](https://github.com/eegoiaa/innoclinic/blob/main/Client/src/pages/ServicesPage.tsx): `Client/src/pages/ServicesPage.tsx`
- [Appointment dialog](https://github.com/eegoiaa/innoclinic/blob/main/Client/src/components/AppointmentModal.tsx): `Client/src/components/AppointmentModal.tsx`
- [Auth dialog](https://github.com/eegoiaa/innoclinic/blob/main/Client/src/components/auth/AuthModal.tsx): `Client/src/components/auth/AuthModal.tsx`

### Service APIs

- [Appointment API](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Appointments/InnoClinic.Appointments.API/Controllers/AppointmentsController.cs): `Microservices/Appointments/InnoClinic.Appointments.API/Controllers/AppointmentsController.cs`
- [Create appointment](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Appointments/InnoClinic.Appointments.Application/Appointments/Commands/CreateAppointmentCommand/CreateAppointmentHandler.cs): `Microservices/Appointments/InnoClinic.Appointments.Application/Appointments/Commands/CreateAppointmentCommand/CreateAppointmentHandler.cs`
- [Profiles API](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Profiles/InnoClinic.Profiles.API/Controllers/DoctorsController.cs): `Microservices/Profiles/InnoClinic.Profiles.API/Controllers/DoctorsController.cs`
- [Doctor listing](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Profiles/InnoClinic.Profiles.Application/Doctors/Queries/GetDoctorsList/GetDoctorsListHandler.cs): `Microservices/Profiles/InnoClinic.Profiles.Application/Doctors/Queries/GetDoctorsList/GetDoctorsListHandler.cs`
- [Services API](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Services/InnoClinic.Services.API/Controllers/ServicesController.cs): `Microservices/Services/InnoClinic.Services.API/Controllers/ServicesController.cs`
- [Service listing](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Services/InnoClinic.Services.Application/Services/Queries/GetServices/GetServicesHandler.cs): `Microservices/Services/InnoClinic.Services.Application/Services/Queries/GetServices/GetServicesHandler.cs`

### Clinic data

- [Profile records](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Profiles/InnoClinic.Profiles.Infrastructure/Persistence/ProfileDbContext.cs): `Microservices/Profiles/InnoClinic.Profiles.Infrastructure/Persistence/ProfileDbContext.cs`
- [Service records](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Services/InnoClinic.Services.Infrastructure/Persistence/ServicesDbContext.cs): `Microservices/Services/InnoClinic.Services.Infrastructure/Persistence/ServicesDbContext.cs`
- [Appointment records](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Appointments/InnoClinic.Appointments.Infrastructure/Persistence/AppointmentDbContext.cs): `Microservices/Appointments/InnoClinic.Appointments.Infrastructure/Persistence/AppointmentDbContext.cs`

### Identity

- [Auth API](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Auth/InnoClinic.Auth.API/Controllers/AuthController.cs): `Microservices/Auth/InnoClinic.Auth.API/Controllers/AuthController.cs`
- [Auth operations](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Auth/InnoClinic.Auth.Application/Commands/SignUp/SignUpHandler.cs): `Microservices/Auth/InnoClinic.Auth.Application/Commands/SignUp/SignUpHandler.cs`
- [Account records](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Auth/InnoClinic.Auth.Infrastructure/Persistence/AuthDbContext.cs): `Microservices/Auth/InnoClinic.Auth.Infrastructure/Persistence/AuthDbContext.cs`
- [Email service](https://github.com/eegoiaa/innoclinic/blob/main/Microservices/Auth/InnoClinic.Auth.Infrastructure/Services/EmailService.cs): `Microservices/Auth/InnoClinic.Auth.Infrastructure/Services/EmailService.cs`

### Other components

- **Clinic visitor**

## Connections

- Clinic visitor → Client app: uses
- Client app → Doctor browsing: renders
- Client app → Service browsing: renders
- Client app → Appointment dialog: opens
- Client app → Auth dialog: opens
- Appointment API → Create appointment: dispatches
- Profiles API → Doctor listing: dispatches
- Services API → Service listing: dispatches
- Auth API → Auth operations: dispatches
