# santiagoag0/quindiostay architecture

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

## Overview

QuindioStay is a tourism operations platform with an Angular interface and Spring API backed by MySQL. Staff or travelers authenticate, browse tours and scheduled departures, create reservations with participant rules, and manage payments; operators also administer providers, plans, guides, customers, notifications, and reports. The diagram preserves those documented product areas, but sampled backend evidence is limited mainly to authentication, reservation, and reporting; other service links are documented or left unverified.

Main entry points: [`backend/src/main/java/co/edu/uniquindio/quindiostay/controller`](https://github.com/santiagoag0/quindiostay/tree/main/backend/src/main/java/co/edu/uniquindio/quindiostay/controller) (REST controllers), [`backend/src/main/java/co/edu/uniquindio/quindiostay/service/ReservaService.java`](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/ReservaService.java) (Reservations), [`frontend/src/app/app.routes.ts`](https://github.com/santiagoag0/quindiostay/blob/main/frontend/src/app/app.routes.ts) (Role-based routes), [`backend/src/main/java/co/edu/uniquindio/quindiostay/service/AuthService.java`](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/AuthService.java) (Authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web client"]
  node_angular["Angular application<br/>[app.component.ts]"]
  node_routes["Role-based routes<br/>[app.routes.ts]"]
  node_authui["Login and token<br/>[auth.service.ts]"]
  node_features["Operations screens"]
end

subgraph group_identity["Identity and access"]
  node_authsvc["Authentication<br/>[AuthService.java]"]
  node_jwt["JWT services<br/>[JwtService.java]"]
  node_principal["User principal"]
  node_security["JWT request security"]
end

subgraph group_operations["Tour operations"]
  node_api["REST controllers"]
  node_tour["Tour catalog<br/>[Tour.java]"]
  node_departure["Scheduled departures<br/>[SalidaTour.java]"]
  node_booking["Reservations"]
  node_participants["Participants<br/>[Participante.java]"]
  node_providers["Providers and plans"]
  node_guides["Guides and languages<br/>[GuiaService.java]"]
  node_db[("MySQL database")]
end

subgraph group_engagement["Traveler services"]
  node_customers["Customer profiles<br/>[Cliente.java]"]
  node_payments["Partial payments<br/>[PagoService.java]"]
  node_notifications["Notifications"]
end

subgraph group_insights["Reporting"]
  node_reports["Operational reports"]
  node_reportcontroller["Report API"]
  node_pdf["PDF export<br/>[PdfExportador.java]"]
end

node_actor(("Staff / traveler"))

node_actor -->|"uses"| node_angular
node_angular -->|"loads routes"| node_routes
node_routes -->|"routes login"| node_authui
node_routes -->|"routes features"| node_features
node_authui -.->|"submits credentials"| node_api
node_api -.->|"delegates authentication"| node_authsvc
node_authsvc -->|"generates token"| node_jwt
node_authsvc -->|"creates principal"| node_principal
node_security -.->|"validates token"| node_jwt
node_features -.->|"calls API"| node_api
node_api -.->|"delegates booking"| node_booking
node_booking -.->|"reads and writes"| node_db
node_booking -->|"saves participants"| node_participants
node_booking -->|"schedules reminders"| node_notifications
node_reportcontroller -->|"requests reports"| node_reports
node_reports -.->|"exports PDF"| node_pdf
node_reports -.->|"queries reporting data"| node_db
node_api -.->|"manages tours"| node_tour
node_api -.->|"manages departures"| node_departure
node_api -.->|"manages providers"| node_providers
node_api -.->|"manages guides"| node_guides
node_api -.->|"manages customers"| node_customers
node_api -.->|"manages payments"| node_payments
node_api -.->|"manages notifications"| node_notifications

click node_angular "https://github.com/santiagoag0/quindiostay/blob/main/frontend/src/app/app.component.ts"
click node_routes "https://github.com/santiagoag0/quindiostay/blob/main/frontend/src/app/app.routes.ts"
click node_authui "https://github.com/santiagoag0/quindiostay/blob/main/frontend/src/app/core/auth/auth.service.ts"
click node_features "https://github.com/santiagoag0/quindiostay/tree/main/frontend/src/app/features"
click node_api "https://github.com/santiagoag0/quindiostay/tree/main/backend/src/main/java/co/edu/uniquindio/quindiostay/controller"
click node_authsvc "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/AuthService.java"
click node_jwt "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/security/JwtService.java"
click node_principal "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/security/UsuarioPrincipal.java"
click node_security "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/security/JwtAuthenticationFilter.java"
click node_tour "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/domain/entity/tours/Tour.java"
click node_departure "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/domain/entity/tours/SalidaTour.java"
click node_booking "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/ReservaService.java"
click node_participants "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/domain/entity/tours/Participante.java"
click node_providers "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/PrestadorService.java"
click node_guides "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/GuiaService.java"
click node_customers "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/domain/entity/nucleo/Cliente.java"
click node_payments "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/PagoService.java"
click node_notifications "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/NotificacionService.java"
click node_reports "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/ReporteService.java"
click node_reportcontroller "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/controller/ReporteController.java"
click node_pdf "https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/report/PdfExportador.java"
click node_db "https://github.com/santiagoag0/quindiostay/tree/main/backend/src/main/java/co/edu/uniquindio/quindiostay/repository"

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_angular,node_routes,node_authui,node_features toneBlue
class node_authsvc,node_jwt,node_principal,node_security toneAmber
class node_api,node_tour,node_departure,node_booking,node_participants,node_providers,node_guides,node_db toneMint
class node_customers,node_payments,node_notifications toneRose
class node_reports,node_reportcontroller,node_pdf,node_actor toneIndigo
```

## Components

### Web client

- [Angular application](https://github.com/santiagoag0/quindiostay/blob/main/frontend/src/app/app.component.ts): `frontend/src/app/app.component.ts`
- [Role-based routes](https://github.com/santiagoag0/quindiostay/blob/main/frontend/src/app/app.routes.ts): `frontend/src/app/app.routes.ts`
- [Login and token](https://github.com/santiagoag0/quindiostay/blob/main/frontend/src/app/core/auth/auth.service.ts): `frontend/src/app/core/auth/auth.service.ts`
- [Operations screens](https://github.com/santiagoag0/quindiostay/tree/main/frontend/src/app/features): `frontend/src/app/features`

### Identity and access

- [Authentication](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/AuthService.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/service/AuthService.java`
- [JWT services](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/security/JwtService.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/security/JwtService.java`
- [User principal](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/security/UsuarioPrincipal.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/security/UsuarioPrincipal.java`
- [JWT request security](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/security/JwtAuthenticationFilter.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/security/JwtAuthenticationFilter.java`

### Tour operations

- [REST controllers](https://github.com/santiagoag0/quindiostay/tree/main/backend/src/main/java/co/edu/uniquindio/quindiostay/controller): `backend/src/main/java/co/edu/uniquindio/quindiostay/controller`
- [Tour catalog](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/domain/entity/tours/Tour.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/domain/entity/tours/Tour.java`
- [Scheduled departures](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/domain/entity/tours/SalidaTour.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/domain/entity/tours/SalidaTour.java`
- [Reservations](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/ReservaService.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/service/ReservaService.java`
- [Participants](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/domain/entity/tours/Participante.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/domain/entity/tours/Participante.java`
- [Providers and plans](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/PrestadorService.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/service/PrestadorService.java`
- [Guides and languages](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/GuiaService.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/service/GuiaService.java`
- [MySQL database](https://github.com/santiagoag0/quindiostay/tree/main/backend/src/main/java/co/edu/uniquindio/quindiostay/repository): `backend/src/main/java/co/edu/uniquindio/quindiostay/repository`

### Traveler services

- [Customer profiles](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/domain/entity/nucleo/Cliente.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/domain/entity/nucleo/Cliente.java`
- [Partial payments](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/PagoService.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/service/PagoService.java`
- [Notifications](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/NotificacionService.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/service/NotificacionService.java`

### Reporting

- [Operational reports](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/service/ReporteService.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/service/ReporteService.java`
- [Report API](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/controller/ReporteController.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/controller/ReporteController.java`
- [PDF export](https://github.com/santiagoag0/quindiostay/blob/main/backend/src/main/java/co/edu/uniquindio/quindiostay/report/PdfExportador.java): `backend/src/main/java/co/edu/uniquindio/quindiostay/report/PdfExportador.java`

### Other components

- **Staff / traveler**

## Connections

- Staff / traveler → Angular application: uses (evidence: `README.md`)
- Angular application → Role-based routes: loads routes
- Role-based routes → Login and token: routes login (evidence: `frontend/src/app/app.routes.ts`)
- Role-based routes → Operations screens: routes features (evidence: `frontend/src/app/app.routes.ts`)
- Login and token → REST controllers: submits credentials
- REST controllers → Authentication: delegates authentication
- Authentication → JWT services: generates token (evidence: `backend/src/main/java/co/edu/uniquindio/quindiostay/service/AuthService.java`)
- Authentication → User principal: creates principal (evidence: `backend/src/main/java/co/edu/uniquindio/quindiostay/service/AuthService.java`)
- JWT request security → JWT services: validates token
- Operations screens → REST controllers: calls API
- REST controllers → Reservations: delegates booking
- Reservations → MySQL database: reads and writes (evidence: `backend/src/main/java/co/edu/uniquindio/quindiostay/service/ReservaService.java`)
- Reservations → Participants: saves participants (evidence: `backend/src/main/java/co/edu/uniquindio/quindiostay/service/ReservaService.java`)
- Reservations → Notifications: schedules reminders (evidence: `backend/src/main/java/co/edu/uniquindio/quindiostay/service/ReservaService.java`)
- Report API → Operational reports: requests reports (evidence: `backend/src/main/java/co/edu/uniquindio/quindiostay/controller/ReporteController.java`)
- Operational reports → PDF export: exports PDF (evidence: `backend/src/main/java/co/edu/uniquindio/quindiostay/service/ReporteService.java`)
- Operational reports → MySQL database: queries reporting data (evidence: `backend/src/main/java/co/edu/uniquindio/quindiostay/service/ReporteService.java`)
- REST controllers → Tour catalog: manages tours (evidence: `backend/src/main/java/co/edu/uniquindio/quindiostay/controller/SalidaTourController.java`)
- REST controllers → Scheduled departures: manages departures
- REST controllers → Providers and plans: manages providers
- REST controllers → Guides and languages: manages guides
- REST controllers → Customer profiles: manages customers
- REST controllers → Partial payments: manages payments
- REST controllers → Notifications: manages notifications
