# joaogt01/synchro architecture

> Architecture diagram of the GitHub repository joaogt01/synchro, 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/joaogt01/synchro
- Repository: https://github.com/joaogt01/synchro

## Overview

Agendamento is a clinic appointment-management application with a React frontend and Spring Boot API. The main workflow is an authorized staff member or professional managing patient and professional records, setting recurring availability or blocked slots, then creating and progressing a consultation through validation, status history, and post-commit notification. Authentication and role/ownership checks span the API. The README documents major capabilities; sampled service/controller excerpts support key call edges, while frontend page-to-API wiring and some backend service details were not sampled and are left unspecified.

Main entry points: [`frontend/src/App.tsx`](https://github.com/joaogt01/synchro/blob/main/frontend/src/App.tsx) (Route application), [`src/main/java/com/projetos/agendamento/autenticacao/controller/AuthController.java`](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/autenticacao/controller/AuthController.java) (Authentication endpoints), [`src/main/java/com/projetos/agendamento/consulta/service/ConsultaService.java`](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/consulta/service/ConsultaService.java) (Consultation lifecycle), [`src/main/java/com/projetos/agendamento/profissional/repository/ProfissionalRepository.java`](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/profissional/repository/ProfissionalRepository.java) (People and schedule data)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_webapp["Route application<br/>[App.tsx]"]
  node_authpages["Login and registration<br/>[LoginPage.tsx]"]
  node_consultpages["Consultation screens"]
  node_patientpages["Patient screens"]
  node_professionalpages["Professional screens"]
end

subgraph group_identity["Identity and access"]
  node_authcontroller["Authentication endpoints"]
  node_admincontroller["Admin user endpoint"]
  node_userservice["User registration"]
  node_refreshservice["Refresh sessions"]
  node_jwt["JWT and cookies<br/>[JwtService.java]"]
  node_security["Request security"]
  node_userstore[("User and token store")]
end

subgraph group_records["People and schedules"]
  node_patientcontroller["Patient endpoints"]
  node_patientservice["Patient records"]
  node_professionalcontroller["Professional endpoints"]
  node_professionalservice["Professional records"]
  node_schedulecontrollers["Availability and blocks"]
  node_availabilityservice["Availability management"]
  node_blockservice["Blocked time management"]
  node_recordstore[("People and schedule data")]
end

subgraph group_appointments["Consultation lifecycle"]
  node_consultcontroller["Consultation endpoints"]
  node_consultservice["Consultation lifecycle"]
  node_validation["Booking validation"]
  node_consultstore[("Consultation and history")]
  node_event["Booked consultation event"]
end

subgraph group_notifications["Notifications"]
  node_listener["Notification listener"]
  node_log(("Application log"))
end

node_user(("Clinic user"))

node_user -->|"uses"| node_webapp
node_webapp -->|"routes"| node_authpages
node_webapp -->|"routes"| node_consultpages
node_webapp -->|"routes"| node_patientpages
node_webapp -->|"routes"| node_professionalpages
node_authpages -->|"authenticates"| node_authcontroller
node_authcontroller -->|"registers"| node_userservice
node_authcontroller -->|"manages tokens"| node_refreshservice
node_authcontroller -->|"issues JWT"| node_jwt
node_authcontroller -->|"authenticates"| node_security
node_admincontroller -->|"creates users"| node_userservice
node_userservice -->|"persists users"| node_userstore
node_refreshservice -->|"persists tokens"| node_userstore
node_security -->|"validates JWT"| node_jwt
node_professionalcontroller -->|"manages professionals"| node_professionalservice
node_professionalservice -->|"reads and writes"| node_recordstore
node_patientcontroller -->|"manages patients"| node_patientservice
node_patientservice -->|"reads and writes"| node_recordstore
node_schedulecontrollers -->|"manages availability"| node_availabilityservice
node_schedulecontrollers -->|"manages blocks"| node_blockservice
node_availabilityservice -->|"reads and writes"| node_recordstore
node_blockservice -->|"reads and writes"| node_recordstore
node_consultpages -->|"manages bookings"| node_consultcontroller
node_consultcontroller -->|"dispatches requests"| node_consultservice
node_consultservice -->|"validates booking"| node_validation
node_consultservice -->|"persists and queries"| node_consultstore
node_consultservice -->|"publishes after booking"| node_event
node_listener -->|"handles after commit"| node_event
node_listener -->|"records notification"| node_log

click node_webapp "https://github.com/joaogt01/synchro/blob/main/frontend/src/App.tsx"
click node_authpages "https://github.com/joaogt01/synchro/blob/main/frontend/src/pages/auth/LoginPage.tsx"
click node_consultpages "https://github.com/joaogt01/synchro/blob/main/frontend/src/pages/consultas/ConsultasListPage.tsx"
click node_patientpages "https://github.com/joaogt01/synchro/blob/main/frontend/src/pages/pacientes/PacientesListPage.tsx"
click node_professionalpages "https://github.com/joaogt01/synchro/blob/main/frontend/src/pages/profissionais/ProfissionaisListPage.tsx"
click node_authcontroller "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/autenticacao/controller/AuthController.java"
click node_admincontroller "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/autenticacao/controller/AdminUsuarioController.java"
click node_userservice "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/autenticacao/service/UsuarioService.java"
click node_refreshservice "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/autenticacao/service/RefreshTokenService.java"
click node_jwt "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/autenticacao/security/JwtService.java"
click node_security "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/autenticacao/security/SecurityConfig.java"
click node_userstore "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/autenticacao/repository/UsuarioRepository.java"
click node_patientcontroller "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/paciente/controller/PacienteController.java"
click node_patientservice "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/paciente/service/PacienteService.java"
click node_professionalcontroller "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/profissional/controller/ProfissionalController.java"
click node_professionalservice "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/profissional/service/ProfissionalService.java"
click node_schedulecontrollers "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/profissional/controller/DisponibilidadeController.java"
click node_availabilityservice "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/profissional/service/DisponibilidadeService.java"
click node_blockservice "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/profissional/service/SlotBloqueadoService.java"
click node_recordstore "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/profissional/repository/ProfissionalRepository.java"
click node_consultcontroller "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/consulta/controller/ConsultaController.java"
click node_consultservice "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/consulta/service/ConsultaService.java"
click node_validation "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/consulta/service/OrquestradorValidacaoAgendamento.java"
click node_consultstore "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/consulta/repository/ConsultaRepository.java"
click node_event "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/consulta/evento/ConsultaAgendadaEvento.java"
click node_listener "https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/notificacao/NotificacaoConsultaListener.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_webapp,node_authpages,node_consultpages,node_patientpages,node_professionalpages,node_user toneBlue
class node_authcontroller,node_admincontroller,node_userservice,node_refreshservice,node_jwt,node_security,node_userstore toneAmber
class node_patientcontroller,node_patientservice,node_professionalcontroller,node_professionalservice,node_schedulecontrollers,node_availabilityservice,node_blockservice,node_recordstore toneMint
class node_consultcontroller,node_consultservice,node_validation,node_consultstore,node_event toneRose
class node_listener,node_log toneIndigo
```

## Components

### Web application

- [Route application](https://github.com/joaogt01/synchro/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Login and registration](https://github.com/joaogt01/synchro/blob/main/frontend/src/pages/auth/LoginPage.tsx): `frontend/src/pages/auth/LoginPage.tsx`
- [Consultation screens](https://github.com/joaogt01/synchro/blob/main/frontend/src/pages/consultas/ConsultasListPage.tsx): `frontend/src/pages/consultas/ConsultasListPage.tsx`
- [Patient screens](https://github.com/joaogt01/synchro/blob/main/frontend/src/pages/pacientes/PacientesListPage.tsx): `frontend/src/pages/pacientes/PacientesListPage.tsx`
- [Professional screens](https://github.com/joaogt01/synchro/blob/main/frontend/src/pages/profissionais/ProfissionaisListPage.tsx): `frontend/src/pages/profissionais/ProfissionaisListPage.tsx`

### Identity and access

- [Authentication endpoints](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/autenticacao/controller/AuthController.java): `src/main/java/com/projetos/agendamento/autenticacao/controller/AuthController.java`
- [Admin user endpoint](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/autenticacao/controller/AdminUsuarioController.java): `src/main/java/com/projetos/agendamento/autenticacao/controller/AdminUsuarioController.java`
- [User registration](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/autenticacao/service/UsuarioService.java): `src/main/java/com/projetos/agendamento/autenticacao/service/UsuarioService.java`
- [Refresh sessions](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/autenticacao/service/RefreshTokenService.java): `src/main/java/com/projetos/agendamento/autenticacao/service/RefreshTokenService.java`
- [JWT and cookies](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/autenticacao/security/JwtService.java): `src/main/java/com/projetos/agendamento/autenticacao/security/JwtService.java`
- [Request security](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/autenticacao/security/SecurityConfig.java): `src/main/java/com/projetos/agendamento/autenticacao/security/SecurityConfig.java`
- [User and token store](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/autenticacao/repository/UsuarioRepository.java): `src/main/java/com/projetos/agendamento/autenticacao/repository/UsuarioRepository.java`

### People and schedules

- [Patient endpoints](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/paciente/controller/PacienteController.java): `src/main/java/com/projetos/agendamento/paciente/controller/PacienteController.java`
- [Patient records](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/paciente/service/PacienteService.java): `src/main/java/com/projetos/agendamento/paciente/service/PacienteService.java`
- [Professional endpoints](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/profissional/controller/ProfissionalController.java): `src/main/java/com/projetos/agendamento/profissional/controller/ProfissionalController.java`
- [Professional records](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/profissional/service/ProfissionalService.java): `src/main/java/com/projetos/agendamento/profissional/service/ProfissionalService.java`
- [Availability and blocks](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/profissional/controller/DisponibilidadeController.java): `src/main/java/com/projetos/agendamento/profissional/controller/DisponibilidadeController.java`
- [Availability management](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/profissional/service/DisponibilidadeService.java): `src/main/java/com/projetos/agendamento/profissional/service/DisponibilidadeService.java`
- [Blocked time management](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/profissional/service/SlotBloqueadoService.java): `src/main/java/com/projetos/agendamento/profissional/service/SlotBloqueadoService.java`
- [People and schedule data](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/profissional/repository/ProfissionalRepository.java): `src/main/java/com/projetos/agendamento/profissional/repository/ProfissionalRepository.java`

### Consultation lifecycle

- [Consultation endpoints](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/consulta/controller/ConsultaController.java): `src/main/java/com/projetos/agendamento/consulta/controller/ConsultaController.java`
- [Consultation lifecycle](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/consulta/service/ConsultaService.java): `src/main/java/com/projetos/agendamento/consulta/service/ConsultaService.java`
- [Booking validation](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/consulta/service/OrquestradorValidacaoAgendamento.java): `src/main/java/com/projetos/agendamento/consulta/service/OrquestradorValidacaoAgendamento.java`
- [Consultation and history](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/consulta/repository/ConsultaRepository.java): `src/main/java/com/projetos/agendamento/consulta/repository/ConsultaRepository.java`
- [Booked consultation event](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/consulta/evento/ConsultaAgendadaEvento.java): `src/main/java/com/projetos/agendamento/consulta/evento/ConsultaAgendadaEvento.java`

### Notifications

- [Notification listener](https://github.com/joaogt01/synchro/blob/main/src/main/java/com/projetos/agendamento/notificacao/NotificacaoConsultaListener.java): `src/main/java/com/projetos/agendamento/notificacao/NotificacaoConsultaListener.java`
- **Application log**

### Other components

- **Clinic user**

## Connections

- Clinic user → Route application: uses
- Route application → Login and registration: routes
- Route application → Consultation screens: routes
- Route application → Patient screens: routes
- Route application → Professional screens: routes
- Login and registration → Authentication endpoints: authenticates
- Authentication endpoints → User registration: registers
- Authentication endpoints → Refresh sessions: manages tokens
- Authentication endpoints → JWT and cookies: issues JWT
- Authentication endpoints → Request security: authenticates
- Admin user endpoint → User registration: creates users
- User registration → User and token store: persists users
- Refresh sessions → User and token store: persists tokens
- Request security → JWT and cookies: validates JWT
- Professional endpoints → Professional records: manages professionals
- Professional records → People and schedule data: reads and writes
- Patient endpoints → Patient records: manages patients
- Patient records → People and schedule data: reads and writes
- Availability and blocks → Availability management: manages availability
- Availability and blocks → Blocked time management: manages blocks
- Availability management → People and schedule data: reads and writes
- Blocked time management → People and schedule data: reads and writes
- Consultation screens → Consultation endpoints: manages bookings
- Consultation endpoints → Consultation lifecycle: dispatches requests
- Consultation lifecycle → Booking validation: validates booking
- Consultation lifecycle → Consultation and history: persists and queries
- Consultation lifecycle → Booked consultation event: publishes after booking
- Notification listener → Booked consultation event: handles after commit
- Notification listener → Application log: records notification
