# astern22/piedrazulmonolitomodular architecture

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

- Interactive diagram: https://gitdiagram.com/astern22/piedrazulmonolitomodular
- Repository: https://github.com/astern22/piedrazulmonolitomodular

## Overview

Piedrazul is a web-based medical-practice management system: users authenticate and manage patients, professionals, specialties and weekly availability, then consult open slots and book or review appointments. Its Vue frontend communicates with a Spring REST API; the backend is organized as a modular monolith with service, presentation and persistence layers, backed by PostgreSQL. The sampled sources show several service-to-repository and cross-domain calls. Other feature modules are included from the tree and README, but their internal calls were not sampled.

Main entry points: [`src/main/java/co/edu/unicauca/piedrazul/appointments/application/AppointmentService.java`](https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/appointments/application/AppointmentService.java) (Appointments and history), [`src/main/java/co/edu/unicauca/piedrazul/professionals/application/ProfessionalService.java`](https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/professionals/application/ProfessionalService.java) (Professionals), [`src/main/java/co/edu/unicauca/piedrazul/scheduling/application/AvailableSlotService.java`](https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/scheduling/application/AvailableSlotService.java) (Available slots), [`frontend/src/App.vue`](https://github.com/astern22/piedrazulmonolitomodular/blob/master/frontend/src/App.vue) (Vue application)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web frontend"]
  node_webapp["Vue application<br/>[App.vue]"]
  node_authstate["Auth state<br/>[useAuth.js]"]
  node_api["API client<br/>[client.js]"]
  node_featureapis["Feature API services"]
end

subgraph group_identity["Identity and access"]
  node_auth["Authentication"]
  node_userstore[("Users and roles<br/>[UserEntity.java]")]
  node_security["JWT security"]
end

subgraph group_care["Care management"]
  node_patients["Patient management"]
  node_patientstore[("Patient records<br/>[PatientEntity.java]")]
  node_professionals["Professionals"]
  node_specialties["Specialties"]
end

subgraph group_operations["Scheduling and appointments"]
  node_availability["Weekly availability"]
  node_availabilitystore[("Availability records")]
  node_slots["Available slots"]
  node_appointments["Appointments and history"]
  node_appointmentstore[("Appointment records")]
end

node_user(("User"))

node_user -->|"uses"| node_webapp
node_webapp -->|"reads auth"| node_authstate
node_webapp -.->|"uses features"| node_featureapis
node_featureapis -->|"sends requests"| node_api
node_api -.->|"sends JWT"| node_security
node_auth -.->|"reads and writes"| node_userstore
node_patients -->|"reads and writes"| node_patientstore
node_patients -->|"looks up users"| node_userstore
node_professionals -->|"creates accounts"| node_userstore
node_professionals -.->|"uses specialty data"| node_specialties
node_availability -->|"reads and writes"| node_availabilitystore
node_slots -->|"reads ranges"| node_availabilitystore
node_slots -->|"checks bookings"| node_appointments
node_slots -->|"checks professional"| node_professionals
node_appointments -->|"reads and writes"| node_appointmentstore
node_appointments -->|"looks up patient"| node_patients
node_appointments -->|"looks up professional"| node_professionals

click node_webapp "https://github.com/astern22/piedrazulmonolitomodular/blob/master/frontend/src/App.vue"
click node_authstate "https://github.com/astern22/piedrazulmonolitomodular/blob/master/frontend/src/composables/useAuth.js"
click node_api "https://github.com/astern22/piedrazulmonolitomodular/blob/master/frontend/src/api/client.js"
click node_featureapis "https://github.com/astern22/piedrazulmonolitomodular/tree/master/frontend/src/api"
click node_auth "https://github.com/astern22/piedrazulmonolitomodular/tree/master/src/main/java/co/edu/unicauca/piedrazul/users/application"
click node_userstore "https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/users/infrastructure/persistence/UserEntity.java"
click node_security "https://github.com/astern22/piedrazulmonolitomodular/tree/master/src/main/java/co/edu/unicauca/piedrazul/security"
click node_patients "https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/patients/application/PatientService.java"
click node_patientstore "https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/patients/infrastructure/persistence/PatientEntity.java"
click node_professionals "https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/professionals/application/ProfessionalService.java"
click node_specialties "https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/professionals/application/SpecialtyService.java"
click node_availability "https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/scheduling/application/WeeklyAvailabilityService.java"
click node_availabilitystore "https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/scheduling/infrastructure/persistence/WeeklyAvailabilityEntity.java"
click node_slots "https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/scheduling/application/AvailableSlotService.java"
click node_appointments "https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/appointments/application/AppointmentService.java"
click node_appointmentstore "https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/appointments/infrastructure/persistence/AppointmentEntity.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_authstate,node_api,node_featureapis,node_user toneBlue
class node_auth,node_userstore,node_security toneAmber
class node_patients,node_patientstore,node_professionals,node_specialties toneMint
class node_availability,node_availabilitystore,node_slots,node_appointments,node_appointmentstore toneRose
```

## Components

### Web frontend

- [Vue application](https://github.com/astern22/piedrazulmonolitomodular/blob/master/frontend/src/App.vue): `frontend/src/App.vue`
- [Auth state](https://github.com/astern22/piedrazulmonolitomodular/blob/master/frontend/src/composables/useAuth.js): `frontend/src/composables/useAuth.js`
- [API client](https://github.com/astern22/piedrazulmonolitomodular/blob/master/frontend/src/api/client.js): `frontend/src/api/client.js`
- [Feature API services](https://github.com/astern22/piedrazulmonolitomodular/tree/master/frontend/src/api): `frontend/src/api`

### Identity and access

- [Authentication](https://github.com/astern22/piedrazulmonolitomodular/tree/master/src/main/java/co/edu/unicauca/piedrazul/users/application): `src/main/java/co/edu/unicauca/piedrazul/users/application`
- [Users and roles](https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/users/infrastructure/persistence/UserEntity.java): `src/main/java/co/edu/unicauca/piedrazul/users/infrastructure/persistence/UserEntity.java`
- [JWT security](https://github.com/astern22/piedrazulmonolitomodular/tree/master/src/main/java/co/edu/unicauca/piedrazul/security): `src/main/java/co/edu/unicauca/piedrazul/security`

### Care management

- [Patient management](https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/patients/application/PatientService.java): `src/main/java/co/edu/unicauca/piedrazul/patients/application/PatientService.java`
- [Patient records](https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/patients/infrastructure/persistence/PatientEntity.java): `src/main/java/co/edu/unicauca/piedrazul/patients/infrastructure/persistence/PatientEntity.java`
- [Professionals](https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/professionals/application/ProfessionalService.java): `src/main/java/co/edu/unicauca/piedrazul/professionals/application/ProfessionalService.java`
- [Specialties](https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/professionals/application/SpecialtyService.java): `src/main/java/co/edu/unicauca/piedrazul/professionals/application/SpecialtyService.java`

### Scheduling and appointments

- [Weekly availability](https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/scheduling/application/WeeklyAvailabilityService.java): `src/main/java/co/edu/unicauca/piedrazul/scheduling/application/WeeklyAvailabilityService.java`
- [Availability records](https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/scheduling/infrastructure/persistence/WeeklyAvailabilityEntity.java): `src/main/java/co/edu/unicauca/piedrazul/scheduling/infrastructure/persistence/WeeklyAvailabilityEntity.java`
- [Available slots](https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/scheduling/application/AvailableSlotService.java): `src/main/java/co/edu/unicauca/piedrazul/scheduling/application/AvailableSlotService.java`
- [Appointments and history](https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/appointments/application/AppointmentService.java): `src/main/java/co/edu/unicauca/piedrazul/appointments/application/AppointmentService.java`
- [Appointment records](https://github.com/astern22/piedrazulmonolitomodular/blob/master/src/main/java/co/edu/unicauca/piedrazul/appointments/infrastructure/persistence/AppointmentEntity.java): `src/main/java/co/edu/unicauca/piedrazul/appointments/infrastructure/persistence/AppointmentEntity.java`

### Other components

- **User**

## Connections

- User → Vue application: uses (evidence: `README.md`)
- Vue application → Auth state: reads auth (evidence: `frontend/src/App.vue`)
- Vue application → Feature API services: uses features
- Feature API services → API client: sends requests (evidence: `frontend/src/api/appointment.service.js`)
- API client → JWT security: sends JWT
- Authentication → Users and roles: reads and writes (evidence: `src/main/java/co/edu/unicauca/piedrazul/users/application/RegisterUserService.java`)
- Patient management → Patient records: reads and writes (evidence: `src/main/java/co/edu/unicauca/piedrazul/patients/application/PatientService.java`)
- Patient management → Users and roles: looks up users (evidence: `src/main/java/co/edu/unicauca/piedrazul/patients/application/PatientService.java`)
- Professionals → Users and roles: creates accounts (evidence: `src/main/java/co/edu/unicauca/piedrazul/professionals/application/ProfessionalService.java`)
- Professionals → Specialties: uses specialty data
- Weekly availability → Availability records: reads and writes (evidence: `src/main/java/co/edu/unicauca/piedrazul/scheduling/application/WeeklyAvailabilityService.java`)
- Available slots → Availability records: reads ranges (evidence: `src/main/java/co/edu/unicauca/piedrazul/scheduling/application/AvailableSlotService.java`)
- Available slots → Appointments and history: checks bookings (evidence: `src/main/java/co/edu/unicauca/piedrazul/scheduling/application/AvailableSlotService.java`)
- Available slots → Professionals: checks professional (evidence: `src/main/java/co/edu/unicauca/piedrazul/scheduling/application/AvailableSlotService.java`)
- Appointments and history → Appointment records: reads and writes (evidence: `src/main/java/co/edu/unicauca/piedrazul/appointments/application/AppointmentService.java`)
- Appointments and history → Patient management: looks up patient (evidence: `src/main/java/co/edu/unicauca/piedrazul/appointments/application/AppointmentService.java`)
- Appointments and history → Professionals: looks up professional (evidence: `src/main/java/co/edu/unicauca/piedrazul/appointments/application/AppointmentService.java`)
