# rafael-mesquita-reinaldo/api-sistema-de-agendamento architecture

> Architecture diagram of the GitHub repository rafael-mesquita-reinaldo/api-sistema-de-agendamento, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento
- Repository: https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento

## Overview

This repository is a Spring-based appointment scheduling API. Users submit appointment and catalog requests through REST controllers; services apply business rules, map domain data, and use repositories for persistence. The clearest documented workflow is appointment creation and management, including client, professional, and service lookup, validation, and status changes. The source index and excerpts support these relationships, but the README is empty and authentication, deployment, and database configuration are not established here.

Main entry points: [`src/main/java/com/rafael/apiagendamento/service/AgendamentoService.java`](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/service/AgendamentoService.java) (Appointment management), [`src/main/java/com/rafael/apiagendamento/repository`](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/tree/main/src/main/java/com/rafael/apiagendamento/repository) (JPA repositories), [`src/main/java/com/rafael/apiagendamento/service/ClientService.java`](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/service/ClientService.java) (Client management), [`src/main/java/com/rafael/apiagendamento/service/ProfissionalService.java`](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/service/ProfissionalService.java) (Professional management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_appointments["Appointment endpoints"]
  node_clients_api["Client endpoints"]
  node_professionals_api["Professional endpoints"]
  node_services_api["Service endpoints"]
  node_users_api["User endpoints"]
end

subgraph group_domain["Scheduling Domain"]
  node_appointment_logic["Appointment management"]
  node_appointment_rules["Schedule validators<br/>[Validador.java]"]
  node_appointment_search["Appointment filters"]
  node_appointment_mapper["Appointment mapping"]
end

subgraph group_catalog["People and Services"]
  node_client_logic["Client management<br/>[ClientService.java]"]
  node_professional_logic["Professional management"]
  node_service_logic["Service management"]
  node_user_logic["User management<br/>[UserService.java]"]
  node_client_mapping["Client mapping<br/>[ClientMapper.java]"]
  node_professional_mapping["Professional mapping"]
  node_service_mapping["Service mapping<br/>[ServicoMapper.java]"]
end

subgraph group_persistence["Persistence and Errors"]
  node_repositories[("JPA repositories")]
  node_domain_models["Domain entities"]
  node_error_handler["API error handling"]
end

node_caller(("API client"))

node_caller -->|"sends requests"| node_appointments
node_caller -->|"sends requests"| node_clients_api
node_caller -->|"sends requests"| node_professionals_api
node_caller -->|"sends requests"| node_services_api
node_caller -.->|"sends requests"| node_users_api
node_appointments -->|"dispatches to"| node_appointment_logic
node_clients_api -->|"dispatches to"| node_client_logic
node_professionals_api -->|"dispatches to"| node_professional_logic
node_services_api -->|"dispatches to"| node_service_logic
node_users_api -.->|"dispatches to"| node_user_logic
node_appointment_logic -->|"reads and saves"| node_repositories
node_appointment_logic -->|"validates"| node_appointment_rules
node_appointment_logic -->|"builds filters"| node_appointment_search
node_appointment_logic -->|"maps data"| node_appointment_mapper
node_appointment_logic -->|"updates status"| node_domain_models
node_client_logic -->|"reads and saves"| node_repositories
node_client_logic -->|"maps data"| node_client_mapping
node_professional_logic -->|"reads and saves"| node_repositories
node_professional_logic -->|"maps data"| node_professional_mapping
node_service_logic -->|"reads and saves"| node_repositories
node_service_logic -->|"maps data"| node_service_mapping
node_user_logic -.->|"persists users"| node_repositories
node_error_handler -.->|"returns error responses"| node_caller

click node_appointments "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/controller/AgendamentoController.java"
click node_clients_api "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/controller/ClientController.java"
click node_professionals_api "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/controller/ProfissionalController.java"
click node_services_api "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/controller/ServicoController.java"
click node_users_api "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/controller/UserController.java"
click node_appointment_logic "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/service/AgendamentoService.java"
click node_appointment_rules "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/validator/Validador.java"
click node_appointment_search "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/specification/AgendamentoSpecification.java"
click node_appointment_mapper "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/mappers/AgendamentoMapper.java"
click node_client_logic "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/service/ClientService.java"
click node_professional_logic "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/service/ProfissionalService.java"
click node_service_logic "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/service/ServicoService.java"
click node_user_logic "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/service/UserService.java"
click node_client_mapping "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/mappers/ClientMapper.java"
click node_professional_mapping "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/mappers/ProfissionalMapper.java"
click node_service_mapping "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/mappers/ServicoMapper.java"
click node_repositories "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/tree/main/src/main/java/com/rafael/apiagendamento/repository"
click node_domain_models "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/tree/main/src/main/java/com/rafael/apiagendamento/model"
click node_error_handler "https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/handler/GlobalExceptionHandler.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_appointments,node_clients_api,node_professionals_api,node_services_api,node_users_api,node_caller toneBlue
class node_appointment_logic,node_appointment_rules,node_appointment_search,node_appointment_mapper toneAmber
class node_client_logic,node_professional_logic,node_service_logic,node_user_logic,node_client_mapping,node_professional_mapping,node_service_mapping toneMint
class node_repositories,node_domain_models,node_error_handler toneRose
```

## Components

### REST API

- [Appointment endpoints](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/controller/AgendamentoController.java): `src/main/java/com/rafael/apiagendamento/controller/AgendamentoController.java`
- [Client endpoints](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/controller/ClientController.java): `src/main/java/com/rafael/apiagendamento/controller/ClientController.java`
- [Professional endpoints](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/controller/ProfissionalController.java): `src/main/java/com/rafael/apiagendamento/controller/ProfissionalController.java`
- [Service endpoints](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/controller/ServicoController.java): `src/main/java/com/rafael/apiagendamento/controller/ServicoController.java`
- [User endpoints](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/controller/UserController.java): `src/main/java/com/rafael/apiagendamento/controller/UserController.java`

### Scheduling Domain

- [Appointment management](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/service/AgendamentoService.java): `src/main/java/com/rafael/apiagendamento/service/AgendamentoService.java`
- [Schedule validators](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/validator/Validador.java): `src/main/java/com/rafael/apiagendamento/validator/Validador.java`
- [Appointment filters](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/specification/AgendamentoSpecification.java): `src/main/java/com/rafael/apiagendamento/specification/AgendamentoSpecification.java`
- [Appointment mapping](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/mappers/AgendamentoMapper.java): `src/main/java/com/rafael/apiagendamento/mappers/AgendamentoMapper.java`

### People and Services

- [Client management](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/service/ClientService.java): `src/main/java/com/rafael/apiagendamento/service/ClientService.java`
- [Professional management](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/service/ProfissionalService.java): `src/main/java/com/rafael/apiagendamento/service/ProfissionalService.java`
- [Service management](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/service/ServicoService.java): `src/main/java/com/rafael/apiagendamento/service/ServicoService.java`
- [User management](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/service/UserService.java): `src/main/java/com/rafael/apiagendamento/service/UserService.java`
- [Client mapping](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/mappers/ClientMapper.java): `src/main/java/com/rafael/apiagendamento/mappers/ClientMapper.java`
- [Professional mapping](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/mappers/ProfissionalMapper.java): `src/main/java/com/rafael/apiagendamento/mappers/ProfissionalMapper.java`
- [Service mapping](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/mappers/ServicoMapper.java): `src/main/java/com/rafael/apiagendamento/mappers/ServicoMapper.java`

### Persistence and Errors

- [JPA repositories](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/tree/main/src/main/java/com/rafael/apiagendamento/repository): `src/main/java/com/rafael/apiagendamento/repository`
- [Domain entities](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/tree/main/src/main/java/com/rafael/apiagendamento/model): `src/main/java/com/rafael/apiagendamento/model`
- [API error handling](https://github.com/rafael-mesquita-reinaldo/api-sistema-de-agendamento/blob/main/src/main/java/com/rafael/apiagendamento/handler/GlobalExceptionHandler.java): `src/main/java/com/rafael/apiagendamento/handler/GlobalExceptionHandler.java`

### Other components

- **API client**

## Connections

- API client → Appointment endpoints: sends requests (evidence: `src/main/java/com/rafael/apiagendamento/controller/AgendamentoController.java`)
- API client → Client endpoints: sends requests (evidence: `src/main/java/com/rafael/apiagendamento/controller/ClientController.java`)
- API client → Professional endpoints: sends requests (evidence: `src/main/java/com/rafael/apiagendamento/controller/ProfissionalController.java`)
- API client → Service endpoints: sends requests (evidence: `src/main/java/com/rafael/apiagendamento/controller/ServicoController.java`)
- API client → User endpoints: sends requests
- Appointment endpoints → Appointment management: dispatches to (evidence: `src/main/java/com/rafael/apiagendamento/controller/AgendamentoController.java`)
- Client endpoints → Client management: dispatches to (evidence: `src/main/java/com/rafael/apiagendamento/controller/ClientController.java`)
- Professional endpoints → Professional management: dispatches to (evidence: `src/main/java/com/rafael/apiagendamento/controller/ProfissionalController.java`)
- Service endpoints → Service management: dispatches to (evidence: `src/main/java/com/rafael/apiagendamento/controller/ServicoController.java`)
- User endpoints → User management: dispatches to (evidence: `src/main/java/com/rafael/apiagendamento/controller/UserController.java`)
- Appointment management → JPA repositories: reads and saves (evidence: `src/main/java/com/rafael/apiagendamento/service/AgendamentoService.java`)
- Appointment management → Schedule validators: validates (evidence: `src/main/java/com/rafael/apiagendamento/service/AgendamentoService.java`)
- Appointment management → Appointment filters: builds filters (evidence: `src/main/java/com/rafael/apiagendamento/service/AgendamentoService.java`)
- Appointment management → Appointment mapping: maps data (evidence: `src/main/java/com/rafael/apiagendamento/service/AgendamentoService.java`)
- Appointment management → Domain entities: updates status (evidence: `src/main/java/com/rafael/apiagendamento/service/AgendamentoService.java`)
- Client management → JPA repositories: reads and saves (evidence: `src/main/java/com/rafael/apiagendamento/service/ClientService.java`)
- Client management → Client mapping: maps data (evidence: `src/main/java/com/rafael/apiagendamento/service/ClientService.java`)
- Professional management → JPA repositories: reads and saves (evidence: `src/main/java/com/rafael/apiagendamento/service/ProfissionalService.java`)
- Professional management → Professional mapping: maps data (evidence: `src/main/java/com/rafael/apiagendamento/service/ProfissionalService.java`)
- Service management → JPA repositories: reads and saves (evidence: `src/main/java/com/rafael/apiagendamento/service/ServicoService.java`)
- Service management → Service mapping: maps data (evidence: `src/main/java/com/rafael/apiagendamento/service/ServicoService.java`)
- User management → JPA repositories: persists users (evidence: `src/main/java/com/rafael/apiagendamento/service/UserService.java`)
- API error handling → API client: returns error responses
