# ddxy06/gimnasiougr architecture

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

- Interactive diagram: https://gitdiagram.com/ddxy06/gimnasiougr
- Repository: https://github.com/ddxy06/gimnasiougr

## Overview

1. **Project type and runtime**
   - This is a **Java Spring Boot** application built with **Maven**.
   - It uses the classic **server-side MVC** style: Spring controllers render **Thymeleaf templates** and serve static assets from `src/main/resources/static`.

2. **Top-level architectural shape**
   - The code is organized into four main layers:
     - **Controllers**: HTTP entry points and page navigation.
     - **Services**: business rules and orchestration.
     - **Repositories**: persistence access.
     - **Models**: domain entities plus DTOs for form/view transport.
   - The application entry point is `GimnasiougrApplication`.

3. **Functional domain**
   - The domain is a **gym management system** (`gimnasiougr`), centered on:
     - **Usuarios / Clientes / Administradores / Entrenadores**
     - **Clases**
     - **Bonos**
     - **Cupos**
     - **Deportes**
     - **Solicitudes de cambio**
   - The UI is split by role, mainly **admin** and **cliente**.

4. **Controller boundaries**
   - Controllers are grouped by responsibility:
     - `Controllers/Admin/*` handles administrative maintenance screens.
     - `Controllers/Cliente/*` handles client-facing screens.
     - `LoginController` handles authentication/login flow.
   - `DefaultController` classes likely provide landing or role-specific default pages.
   - Controllers are thin front doors that delegate most logic to services.

5. **Service layer responsibilities**
   - Services encapsulate business logic for the main aggregates:
     - `AdministradorService`
     - `ClienteService`
     - `BonoService`
     - `ClaseService`
     - `CupoService`
     - `DeporteService`
     - `EntrenadorService`
   - Per the README, services often return values such as saved models or booleans for delete operations, though this may be more about convenience than strict architecture.
   - A notable business rule: when a **user/client is created, a list of bonos is also created for that user**, and the “configure bono” section is only activated at user creation time.

6. **Persistence layer**
   - Each main entity has a corresponding Spring Data repository:
     - `UsuarioRepository`, `ClienteRepository`, `AdministradorRepository`
     - `BonoRepository`, `ClaseRepository`, `CupoRepository`
     - `DeporteRepository`, `EntrenadorRepository`
     - `SolicitudCambioRepository`
   - These repositories are the data-access boundary to the underlying database; the code structure strongly suggests a standard Spring Data JPA persistence model.

7. **Domain model structure**
   - The `Models` package contains both persistence entities and transport objects:
     - Core entities: `Usuario`, `Cliente`, `Administrador`, `Entrenador`, `Clase`, `Bono`, `Cupo`, `Deporte`, `SolicitudCambio`
     - DTOs: `ClienteDTO`, `BonoDTO`, `ClaseDTO`, `CupoDTO`, `EntrenadorDTO`, `SolicitudCambioDTO`
     - Enums: `TipoUsuario`, `TipoBono`, `TipoClase`, `Estado`
   - The DTOs indicate the app separates form/view data from persistence entities in some flows, especially where screens need simplified or specialized data.

8. **Key business aggregates and relationships**
   - `Usuario` appears to be the base identity concept, with role-specific models such as `Cliente`, `Administrador`, and `Entrenador`.
   - `Bono` is a central business object and has its own service, repository, admin listing, and client view.
   - `Clase` and `Cupo` represent scheduling/capacity management, likely tied to a class enrollment or booking flow.
   - `SolicitudCambio` suggests a workflow for requests/changes with state handling via `Estado`.

9. **Role-based UI and template structure**
   - Templates are split into:
     - `templates/admin/*`
     - `templates/cliente/*`
     - a general `templates/index.html`
   - Admin templates cover CRUD-style pages for bonos, clases, clientes, entrenadores, and deportes.
   - Client templates cover the client home page, class/schedule views, bono list, and request flow.
   - This role-based template separation is a major architectural boundary in the UI.

10. **Data flow for admin operations**
   - Typical admin flow is:
     - Admin page request hits an admin controller.
     - Controller loads or modifies data through a service.
     - Service uses repositories to read/write entities.
     - Controller returns a Thymeleaf view with model data.
   - The admin area is the primary CRUD and configuration surface for the gym’s master data.

11. **Data flow for client operations**
   - Client flow is similar but focused on self-service:
     - View client dashboard.
     - Inspect bonos, horarios, or classes.
     - Submit or interact with requests such as `solicitar-tipo2`.
   - The client side is read-heavy and action-light compared with admin management screens.

12. **Static assets and presentation**
   - Presentation assets live under `src/main/resources/static` and include:
     - Bootstrap CSS/JS
     - custom `styles.css` and `scripts.js`
     - images for the UI
   - This indicates a server-rendered app with client-side styling and limited front-end behavior, not a SPA.

13. **Configuration and environment**
   - `application.properties` holds runtime configuration, most likely including database and Spring settings.
   - The presence of the Maven wrapper (`mvnw`) suggests the project is intended to be built consistently across environments without requiring a preinstalled Maven version.

14. **Architecture diagram emphasis**
   - If drawing the architecture, the most important boxes and arrows are:
     - Browser/user role → Controller layer
     - Controller → Service layer
     - Service → Repository → Database
     - Service/Controller → Thymeleaf templates
     - Templates → Static assets
   - The cleanest boundaries are **role-based controllers/views**, **business services**, and **JPA repositories**.

15. **Repo-specific note from the README**
   - The newest functional evolution is around **Bonos**:
     - dedicated `BonoService`
     - new bono listing UI
     - controller reorganization
     - bonus configuration tied to client creation
   - Also, `TipoClase`/`TipoBono` enum handling changed to use strings for persistence in at least one area, which matters if you diagram model-to-database mapping.

Main entry points: [`src/main/java/com/example/gimnasiougr/GimnasiougrApplication.java`](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/GimnasiougrApplication.java) (GimnasiougrApplication), [`src/main/java/com/example/gimnasiougr/Services/BonoService.java`](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/BonoService.java) (Bono service), [`src/main/java/com/example/gimnasiougr/Services/ClienteService.java`](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/ClienteService.java) (Cliente service), [`src/main/resources/templates/cliente`](https://github.com/ddxy06/gimnasiougr/tree/main/src/main/resources/templates/cliente) (Client views)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App"]
  node_entrypoint["GimnasiougrApplication<br/>Spring Boot app"]
end

subgraph group_controllers["Controllers"]
  node_login_controller["Login<br/>auth controller"]
  node_admin_default_controller["Admin default<br/>page controller"]
  node_admin_bono_controller["Admin bonos<br/>admin controller"]
  node_admin_clase_controller["Admin clases<br/>admin controller"]
  node_admin_cliente_controller["Admin clientes<br/>admin controller"]
  node_cliente_default_controller["Cliente home<br/>client controller"]
  node_cliente_bono_controller["Cliente bonos<br/>client controller"]
end

subgraph group_services["Services"]
  node_cliente_service["Cliente service<br/>business service"]
  node_bono_service["Bono service<br/>business service<br/>[BonoService.java]"]
  node_clase_service["Clase service<br/>business service<br/>[ClaseService.java]"]
  node_administrador_service["Admin service<br/>business service"]
  node_cupo_service["Cupo service<br/>business service<br/>[CupoService.java]"]
  node_deporte_service["Deporte service<br/>business service"]
  node_entrenador_service["Entrenador service<br/>business service"]
end

subgraph group_repos["Repositories"]
  node_usuario_repo["Usuario repo<br/>JPA repository"]
  node_bono_repo["Bono repo<br/>JPA repository"]
  node_clase_repo["Clase repo<br/>JPA repository"]
  node_cliente_repo["Cliente repo<br/>JPA repository"]
  node_cupo_repo["Cupo repo<br/>JPA repository"]
  node_deporte_repo["Deporte repo<br/>JPA repository"]
  node_entrenador_repo["Entrenador repo<br/>JPA repository"]
end

subgraph group_models["Models"]
  node_models["Domain model<br/>entities and DTOs"]
end

subgraph group_views["Views"]
  node_admin_views["Admin views<br/>Thymeleaf pages"]
  node_cliente_views["Client views<br/>Thymeleaf pages"]
  node_index_view["Index page<br/>Thymeleaf page<br/>[index.html]"]
end

subgraph group_static["Static assets"]
  node_static_assets["Static assets<br/>css/js/img"]
end

node_database[("Database<br/>persistent store")]

node_entrypoint -->|"routes"| node_login_controller
node_entrypoint -->|"routes"| node_admin_default_controller
node_entrypoint -->|"routes"| node_admin_bono_controller
node_entrypoint -->|"routes"| node_cliente_default_controller
node_login_controller -->|"renders"| node_index_view
node_admin_default_controller -->|"renders"| node_admin_views
node_admin_bono_controller -->|"uses"| node_bono_service
node_admin_clase_controller -->|"uses"| node_clase_service
node_admin_cliente_controller -->|"uses"| node_cliente_service
node_cliente_default_controller -->|"renders"| node_cliente_views
node_cliente_bono_controller -->|"uses"| node_bono_service
node_cliente_bono_controller -->|"renders"| node_cliente_views
node_administrador_service -->|"operates on"| node_models
node_cliente_service -->|"persists"| node_cliente_repo
node_cliente_service -->|"creates bonos"| node_bono_service
node_bono_service -->|"persists"| node_bono_repo
node_clase_service -->|"persists"| node_clase_repo
node_cupo_service -->|"persists"| node_cupo_repo
node_deporte_service -->|"persists"| node_deporte_repo
node_entrenador_service -->|"persists"| node_entrenador_repo
node_cliente_repo -->|"JPA"| node_database
node_bono_repo -->|"JPA"| node_database
node_clase_repo -->|"JPA"| node_database
node_cupo_repo -->|"JPA"| node_database
node_deporte_repo -->|"JPA"| node_database
node_entrenador_repo -->|"JPA"| node_database
node_usuario_repo -->|"JPA"| node_database
node_admin_views -->|"uses"| node_static_assets
node_cliente_views -->|"uses"| node_static_assets
node_index_view -->|"uses"| node_static_assets

click node_entrypoint "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/GimnasiougrApplication.java"
click node_login_controller "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Controllers/LoginController.java"
click node_admin_default_controller "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Controllers/Admin/DefaultController.java"
click node_admin_bono_controller "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Controllers/Admin/AdminBonoController.java"
click node_admin_clase_controller "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Controllers/Admin/AdminClaseController.java"
click node_admin_cliente_controller "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Controllers/Admin/AdminClienteController.java"
click node_cliente_default_controller "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Controllers/Cliente/ClienteDefaultController.java"
click node_cliente_bono_controller "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Controllers/Cliente/ClienteBonoController.java"
click node_cliente_service "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/ClienteService.java"
click node_bono_service "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/BonoService.java"
click node_clase_service "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/ClaseService.java"
click node_administrador_service "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/AdministradorService.java"
click node_cupo_service "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/CupoService.java"
click node_deporte_service "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/DeporteService.java"
click node_entrenador_service "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/EntrenadorService.java"
click node_usuario_repo "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Repositories/UsuarioRepository.java"
click node_bono_repo "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Repositories/BonoRepository.java"
click node_clase_repo "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Repositories/ClaseRepository.java"
click node_cliente_repo "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Repositories/ClienteRepository.java"
click node_cupo_repo "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Repositories/CupoRepository.java"
click node_deporte_repo "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Repositories/DeporteRepository.java"
click node_entrenador_repo "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Repositories/EntrenadorRepository.java"
click node_models "https://github.com/ddxy06/gimnasiougr/tree/main/src/main/java/com/example/gimnasiougr/Models"
click node_admin_views "https://github.com/ddxy06/gimnasiougr/tree/main/src/main/resources/templates/admin"
click node_cliente_views "https://github.com/ddxy06/gimnasiougr/tree/main/src/main/resources/templates/cliente"
click node_index_view "https://github.com/ddxy06/gimnasiougr/blob/main/src/main/resources/templates/index.html"
click node_static_assets "https://github.com/ddxy06/gimnasiougr/tree/main/src/main/resources/static"

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_entrypoint,node_static_assets toneBlue
class node_login_controller,node_admin_default_controller,node_admin_bono_controller,node_admin_clase_controller,node_admin_cliente_controller,node_cliente_default_controller,node_cliente_bono_controller toneAmber
class node_cliente_service,node_bono_service,node_clase_service,node_administrador_service,node_cupo_service,node_deporte_service,node_entrenador_service toneMint
class node_usuario_repo,node_bono_repo,node_clase_repo,node_cliente_repo,node_cupo_repo,node_deporte_repo,node_entrenador_repo toneRose
class node_models toneIndigo
class node_admin_views,node_cliente_views,node_index_view toneTeal
class node_database toneNeutral
```

## Components

### App

Spring Boot entrypoint and runtime config

- [GimnasiougrApplication](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/GimnasiougrApplication.java): Spring Boot app · Application bootstrap and component scanning · `src/main/java/com/example/gimnasiougr/GimnasiougrApplication.java`

### Controllers

HTTP entry points and page navigation

- [Login](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Controllers/LoginController.java): auth controller · Login and authentication flow · `src/main/java/com/example/gimnasiougr/Controllers/LoginController.java`
- [Admin default](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Controllers/Admin/DefaultController.java): page controller · Admin landing and navigation pages · `src/main/java/com/example/gimnasiougr/Controllers/Admin/DefaultController.java`
- [Admin bonos](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Controllers/Admin/AdminBonoController.java): admin controller · Admin CRUD and maintenance for bonos · `src/main/java/com/example/gimnasiougr/Controllers/Admin/AdminBonoController.java`
- [Admin clases](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Controllers/Admin/AdminClaseController.java): admin controller · Admin CRUD and maintenance for clases · `src/main/java/com/example/gimnasiougr/Controllers/Admin/AdminClaseController.java`
- [Admin clientes](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Controllers/Admin/AdminClienteController.java): admin controller · Admin CRUD and maintenance for clientes · `src/main/java/com/example/gimnasiougr/Controllers/Admin/AdminClienteController.java`
- [Cliente home](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Controllers/Cliente/ClienteDefaultController.java): client controller · Client dashboard and self-service navigation · `src/main/java/com/example/gimnasiougr/Controllers/Cliente/ClienteDefaultController.java`
- [Cliente bonos](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Controllers/Cliente/ClienteBonoController.java): client controller · Client bono views and request flow · `src/main/java/com/example/gimnasiougr/Controllers/Cliente/ClienteBonoController.java`

### Services

Business rules and orchestration

- [Cliente service](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/ClienteService.java): business service · Client creation and client-facing logic · `src/main/java/com/example/gimnasiougr/Services/ClienteService.java`
- [Bono service](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/BonoService.java): business service · Bono rules, listing, and creation coordination · `src/main/java/com/example/gimnasiougr/Services/BonoService.java`
- [Clase service](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/ClaseService.java): business service · Class scheduling and class logic · `src/main/java/com/example/gimnasiougr/Services/ClaseService.java`
- [Admin service](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/AdministradorService.java): business service · Administrator maintenance logic · `src/main/java/com/example/gimnasiougr/Services/AdministradorService.java`
- [Cupo service](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/CupoService.java): business service · Capacity and booking-related logic · `src/main/java/com/example/gimnasiougr/Services/CupoService.java`
- [Deporte service](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/DeporteService.java): business service · Sport maintenance and lookup logic · `src/main/java/com/example/gimnasiougr/Services/DeporteService.java`
- [Entrenador service](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Services/EntrenadorService.java): business service · Coach maintenance and lookup logic · `src/main/java/com/example/gimnasiougr/Services/EntrenadorService.java`

### Repositories

Spring Data persistence boundary

- [Usuario repo](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Repositories/UsuarioRepository.java): JPA repository · Persistence access for users · `src/main/java/com/example/gimnasiougr/Repositories/UsuarioRepository.java`
- [Bono repo](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Repositories/BonoRepository.java): JPA repository · Persistence access for bonos · `src/main/java/com/example/gimnasiougr/Repositories/BonoRepository.java`
- [Clase repo](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Repositories/ClaseRepository.java): JPA repository · Persistence access for clases · `src/main/java/com/example/gimnasiougr/Repositories/ClaseRepository.java`
- [Cliente repo](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Repositories/ClienteRepository.java): JPA repository · Persistence access for clientes · `src/main/java/com/example/gimnasiougr/Repositories/ClienteRepository.java`
- [Cupo repo](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Repositories/CupoRepository.java): JPA repository · Persistence access for cupos · `src/main/java/com/example/gimnasiougr/Repositories/CupoRepository.java`
- [Deporte repo](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Repositories/DeporteRepository.java): JPA repository · Persistence access for deportes · `src/main/java/com/example/gimnasiougr/Repositories/DeporteRepository.java`
- [Entrenador repo](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/java/com/example/gimnasiougr/Repositories/EntrenadorRepository.java): JPA repository · Persistence access for entrenadores · `src/main/java/com/example/gimnasiougr/Repositories/EntrenadorRepository.java`

### Models

Domain entities, DTOs, and enums

- [Domain model](https://github.com/ddxy06/gimnasiougr/tree/main/src/main/java/com/example/gimnasiougr/Models): entities and DTOs · Core entities, DTOs, and enums · `src/main/java/com/example/gimnasiougr/Models`

### Views

Thymeleaf templates by role

- [Admin views](https://github.com/ddxy06/gimnasiougr/tree/main/src/main/resources/templates/admin): Thymeleaf pages · Admin CRUD and maintenance templates · `src/main/resources/templates/admin`
- [Client views](https://github.com/ddxy06/gimnasiougr/tree/main/src/main/resources/templates/cliente): Thymeleaf pages · Client dashboard, bono, and request templates · `src/main/resources/templates/cliente`
- [Index page](https://github.com/ddxy06/gimnasiougr/blob/main/src/main/resources/templates/index.html): Thymeleaf page · General landing page · `src/main/resources/templates/index.html`

### Static assets

CSS, JS, and images

- [Static assets](https://github.com/ddxy06/gimnasiougr/tree/main/src/main/resources/static): css/js/img · Bootstrap, custom styles, scripts, and images · `src/main/resources/static`

### Other components

- **Database**: persistent store · Underlying relational persistence

## Connections

- GimnasiougrApplication → Login: routes · Bootstraps the web application and controller scan
- GimnasiougrApplication → Admin default: routes · Registers admin MVC endpoints
- GimnasiougrApplication → Admin bonos: routes · Registers admin bono endpoints
- GimnasiougrApplication → Cliente home: routes · Registers client MVC endpoints
- Login → Index page: renders · Serves login and landing pages
- Admin default → Admin views: renders · Returns admin templates
- Admin bonos → Bono service: uses · Delegates bono management to service layer
- Admin clases → Clase service: uses · Delegates class management to service layer
- Admin clientes → Cliente service: uses · Delegates client management to service layer
- Cliente home → Client views: renders · Returns client dashboard pages
- Cliente bonos → Bono service: uses · Loads client bono data and actions
- Cliente bonos → Client views: renders · Returns client bono templates
- Admin service → Domain model: operates on · Business logic over administrator and related entities
- Cliente service → Cliente repo: persists · Creates and updates clients
- Cliente service → Bono service: creates bonos · Client creation also initializes bono list
- Bono service → Bono repo: persists · Reads and writes bonos
- Clase service → Clase repo: persists · Reads and writes clases
- Cupo service → Cupo repo: persists · Reads and writes cupos
- Deporte service → Deporte repo: persists · Reads and writes deportes
- Entrenador service → Entrenador repo: persists · Reads and writes entrenadores
- Cliente repo → Database: JPA · Repository-backed persistence
- Bono repo → Database: JPA · Repository-backed persistence
- Clase repo → Database: JPA · Repository-backed persistence
- Cupo repo → Database: JPA · Repository-backed persistence
- Deporte repo → Database: JPA · Repository-backed persistence
- Entrenador repo → Database: JPA · Repository-backed persistence
- Usuario repo → Database: JPA · Repository-backed persistence
- Admin views → Static assets: uses · Admin pages depend on shared styling and scripts
- Client views → Static assets: uses · Client pages depend on shared styling and scripts
- Index page → Static assets: uses · Landing page depends on shared styling and scripts
