# dev-gi0/gerenciador-de-clinica-medica architecture

> Architecture diagram of the GitHub repository dev-gi0/gerenciador-de-clinica-medica, 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/dev-gi0/gerenciador-de-clinica-medica
- Repository: https://github.com/dev-gi0/gerenciador-de-clinica-medica

## Overview

A .NET REST backend for clinic operations: authenticated users manage doctors, patients, appointments and services; users can also log in and recover passwords by email code. The main request flow is API controller → MediatR command/query handler → repository abstraction → EF-backed persistence, with results returned as view models. The tree and README establish additional CRUD and recovery capabilities, but sampled source only confirms selected controller dispatch, one query handler, and token generation; uncertain handler-to-integration wiring is omitted.

Main entry points: [`GerenciadorDeClinica.Core/Repositories`](https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Core/Repositories) (Repository contracts), [`GerenciadorDeClinica.API/Controllers`](https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.API/Controllers) (REST controllers), [`GerenciadorDeClinica.Application/Commands`](https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Application/Commands) (Clinic handlers), [`GerenciadorDeClinica.Application/Queries`](https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Application/Queries) (Clinic queries)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API"]
  node_controllers["REST controllers<br/>[Controllers]"]
end

subgraph group_app["Application"]
  node_clinic_handlers["Clinic handlers<br/>[Commands]"]
  node_clinic_queries["Clinic queries<br/>[Queries]"]
  node_login_handlers["Login handlers<br/>[LoginCommands]"]
  node_recovery_handlers["Recovery handlers"]
  node_validation["Command validation<br/>[Commands]"]
  node_viewmodels["Result models<br/>[ViewModels]"]
end

subgraph group_domain["Domain"]
  node_entities["Clinic entities<br/>[Entities]"]
  node_repo_contracts["Repository contracts<br/>[Repositories]"]
end

subgraph group_infra["Infrastructure"]
  node_repositories["EF repositories<br/>[Repositories]"]
  node_dbcontext[("EF context")]
  node_auth_service["JWT auth service<br/>[AuthService.cs]"]
  node_email_service["Email service<br/>[EmailService.cs]"]
end

node_user(("Clinic user"))
node_mediator["MediatR"]
node_sql[("SQL Server")]
node_sendgrid["SendGrid"]
node_response["HTTP response"]

node_user -->|"sends request"| node_controllers
node_controllers -->|"sends command/query"| node_mediator
node_mediator -->|"dispatches commands"| node_clinic_handlers
node_mediator -->|"dispatches queries"| node_clinic_queries
node_mediator -->|"dispatches login"| node_login_handlers
node_mediator -->|"dispatches recovery"| node_recovery_handlers
node_clinic_handlers -->|"validates inputs"| node_validation
node_clinic_handlers -->|"uses repositories"| node_repo_contracts
node_clinic_queries -->|"queries repositories"| node_repo_contracts
node_clinic_queries -->|"maps results"| node_viewmodels
node_repo_contracts -->|"implemented by"| node_repositories
node_repositories -->|"uses context"| node_dbcontext
node_dbcontext -->|"reads/writes"| node_sql
node_login_handlers -->|"uses user repository"| node_repo_contracts
node_login_handlers -->|"generates token"| node_auth_service
node_recovery_handlers -->|"uses user repository"| node_repo_contracts
node_recovery_handlers -.->|"sends recovery email"| node_email_service
node_email_service -.->|"delivers email"| node_sendgrid
node_controllers -->|"returns HTTP result"| node_response
node_entities -->|"defines repository data"| node_repo_contracts

click node_controllers "https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.API/Controllers"
click node_clinic_handlers "https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Application/Commands"
click node_clinic_queries "https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Application/Queries"
click node_login_handlers "https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Application/Commands/LoginCommands"
click node_recovery_handlers "https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Application/Commands/RecuperarSenhaCommands"
click node_validation "https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Application/Commands"
click node_viewmodels "https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Application/Models/ViewModels"
click node_entities "https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Core/Entities"
click node_repo_contracts "https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Core/Repositories"
click node_repositories "https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Infrastructure/Persistence/Repositories"
click node_dbcontext "https://github.com/dev-gi0/gerenciador-de-clinica-medica/blob/main/GerenciadorDeClinica.Infrastructure/Persistence/GerenciadorDeClinicaDbContext.cs"
click node_auth_service "https://github.com/dev-gi0/gerenciador-de-clinica-medica/blob/main/GerenciadorDeClinica.Infrastructure/Security/AuthService.cs"
click node_email_service "https://github.com/dev-gi0/gerenciador-de-clinica-medica/blob/main/GerenciadorDeClinica.Infrastructure/Notifications/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_controllers,node_user toneBlue
class node_clinic_handlers,node_clinic_queries,node_login_handlers,node_recovery_handlers,node_validation,node_viewmodels,node_sql toneAmber
class node_entities,node_repo_contracts toneMint
class node_repositories,node_dbcontext,node_auth_service,node_email_service toneRose
class node_mediator,node_sendgrid,node_response toneIndigo
```

## Components

### API

- [REST controllers](https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.API/Controllers): `GerenciadorDeClinica.API/Controllers`

### Application

- [Clinic handlers](https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Application/Commands): `GerenciadorDeClinica.Application/Commands`
- [Clinic queries](https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Application/Queries): `GerenciadorDeClinica.Application/Queries`
- [Login handlers](https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Application/Commands/LoginCommands): `GerenciadorDeClinica.Application/Commands/LoginCommands`
- [Recovery handlers](https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Application/Commands/RecuperarSenhaCommands): `GerenciadorDeClinica.Application/Commands/RecuperarSenhaCommands`
- [Command validation](https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Application/Commands): `GerenciadorDeClinica.Application/Commands`
- [Result models](https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Application/Models/ViewModels): `GerenciadorDeClinica.Application/Models/ViewModels`

### Domain

- [Clinic entities](https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Core/Entities): `GerenciadorDeClinica.Core/Entities`
- [Repository contracts](https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Core/Repositories): `GerenciadorDeClinica.Core/Repositories`

### Infrastructure

- [EF repositories](https://github.com/dev-gi0/gerenciador-de-clinica-medica/tree/main/GerenciadorDeClinica.Infrastructure/Persistence/Repositories): `GerenciadorDeClinica.Infrastructure/Persistence/Repositories`
- [EF context](https://github.com/dev-gi0/gerenciador-de-clinica-medica/blob/main/GerenciadorDeClinica.Infrastructure/Persistence/GerenciadorDeClinicaDbContext.cs): `GerenciadorDeClinica.Infrastructure/Persistence/GerenciadorDeClinicaDbContext.cs`
- [JWT auth service](https://github.com/dev-gi0/gerenciador-de-clinica-medica/blob/main/GerenciadorDeClinica.Infrastructure/Security/AuthService.cs): `GerenciadorDeClinica.Infrastructure/Security/AuthService.cs`
- [Email service](https://github.com/dev-gi0/gerenciador-de-clinica-medica/blob/main/GerenciadorDeClinica.Infrastructure/Notifications/EmailService.cs): `GerenciadorDeClinica.Infrastructure/Notifications/EmailService.cs`

### Other components

- **Clinic user**
- **MediatR**
- **SQL Server**
- **SendGrid**
- **HTTP response**

## Connections

- Clinic user → REST controllers: sends request
- REST controllers → MediatR: sends command/query
- MediatR → Clinic handlers: dispatches commands
- MediatR → Clinic queries: dispatches queries
- MediatR → Login handlers: dispatches login
- MediatR → Recovery handlers: dispatches recovery
- Clinic handlers → Command validation: validates inputs
- Clinic handlers → Repository contracts: uses repositories
- Clinic queries → Repository contracts: queries repositories
- Clinic queries → Result models: maps results
- Repository contracts → EF repositories: implemented by
- EF repositories → EF context: uses context
- EF context → SQL Server: reads/writes
- Login handlers → Repository contracts: uses user repository
- Login handlers → JWT auth service: generates token
- Recovery handlers → Repository contracts: uses user repository
- Recovery handlers → Email service: sends recovery email
- Email service → SendGrid: delivers email
- REST controllers → HTTP response: returns HTTP result
- Clinic entities → Repository contracts: defines repository data
