# chamesdaboussi/gym-management architecture

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

- Interactive diagram: https://gitdiagram.com/chamesdaboussi/gym-management
- Repository: https://github.com/chamesdaboussi/gym-management

## Overview

Gym Management is a Spring Boot REST API for maintaining members, coaches, plans, sessions, subscriptions, and bookings. Clients call resource controllers, which delegate to services; services apply domain rules and use Spring Data repositories for persistence. The subscription flow calculates an end date from the selected plan, while booking checks for duplicates and available capacity. The README identifies MySQL as the database, but the supplied excerpts do not show repository-to-database wiring; those links are therefore marked unverified.

Main entry points: [`src/main/java/com/esb/service/SubscriptionService.java`](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/SubscriptionService.java) (Subscription Service), [`src/main/java/com/esb/service/BookingService.java`](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/BookingService.java) (Booking Service), [`src/main/java/com/esb/service/SessionService.java`](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/SessionService.java) (Session Service), [`src/main/java/com/esb/service/MemberService.java`](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/MemberService.java) (Member Service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_member_controller["Member API"]
  node_coach_controller["Coach API"]
  node_plan_controller["Plan API"]
  node_session_controller["Session API"]
  node_subscription_controller["Subscription API"]
  node_booking_controller["Booking API"]
end

subgraph group_services["Business Services"]
  node_member_service["Member Service<br/>[MemberService.java]"]
  node_coach_service["Coach Service<br/>[CoachService.java]"]
  node_plan_service["Plan Service<br/>[PlanService.java]"]
  node_session_service["Session Service"]
  node_subscription_service["Subscription Service"]
  node_booking_service["Booking Service"]
end

subgraph group_domain["Domain Model"]
  node_member["Member<br/>[Member.java]"]
  node_coach["Coach<br/>[Coach.java]"]
  node_specialty["Specialty<br/>[Specialty.java]"]
  node_plan["Plan<br/>[Plan.java]"]
  node_session["Session<br/>[Session.java]"]
  node_subscription["Subscription<br/>[Subscription.java]"]
  node_booking["Booking<br/>[Booking.java]"]
end

subgraph group_persistence["Persistence"]
  node_member_repo["Member Repository"]
  node_coach_repo["Coach Repository"]
  node_plan_repo["Plan Repository"]
  node_session_repo["Session Repository"]
  node_subscription_repo["Subscription Repository"]
  node_booking_repo["Booking Repository"]
end

node_client(("API Client"))
node_mysql[("MySQL")]

node_client -->|"calls endpoints"| node_member_controller
node_client -->|"calls endpoints"| node_coach_controller
node_client -->|"calls endpoints"| node_plan_controller
node_client -->|"calls endpoints"| node_session_controller
node_client -->|"calls endpoints"| node_subscription_controller
node_client -->|"calls endpoints"| node_booking_controller
node_member_controller -->|"delegates to"| node_member_service
node_coach_controller -->|"delegates to"| node_coach_service
node_plan_controller -->|"delegates to"| node_plan_service
node_session_controller -->|"delegates to"| node_session_service
node_subscription_controller -->|"delegates to"| node_subscription_service
node_booking_controller -->|"delegates to"| node_booking_service
node_member_service -->|"reads and writes"| node_member_repo
node_coach_service -->|"reads and writes"| node_coach_repo
node_plan_service -->|"reads and writes"| node_plan_repo
node_session_service -->|"reads and writes"| node_session_repo
node_session_service -->|"resolves coach"| node_coach_service
node_subscription_service -->|"reads and writes"| node_subscription_repo
node_subscription_service -->|"resolves member"| node_member_service
node_subscription_service -->|"resolves plan"| node_plan_service
node_booking_service -->|"checks and saves"| node_booking_repo
node_booking_service -->|"resolves member"| node_member_service
node_booking_service -->|"resolves session"| node_session_service
node_member_repo -.->|"persists entities"| node_mysql
node_coach_repo -.->|"persists entities"| node_mysql
node_plan_repo -.->|"persists entities"| node_mysql
node_session_repo -.->|"persists entities"| node_mysql
node_subscription_repo -.->|"persists entities"| node_mysql
node_booking_repo -.->|"persists entities"| node_mysql
node_session -->|"references coach"| node_coach
node_coach -->|"uses specialty"| node_specialty
node_subscription -->|"belongs to"| node_member
node_subscription -->|"uses plan"| node_plan
node_booking -->|"belongs to"| node_member
node_booking -->|"reserves"| node_session

click node_member_controller "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/controller/MemberController.java"
click node_coach_controller "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/controller/CoachController.java"
click node_plan_controller "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/controller/PlanController.java"
click node_session_controller "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/controller/SessionController.java"
click node_subscription_controller "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/controller/SubscriptionController.java"
click node_booking_controller "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/controller/BookingController.java"
click node_member_service "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/MemberService.java"
click node_coach_service "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/CoachService.java"
click node_plan_service "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/PlanService.java"
click node_session_service "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/SessionService.java"
click node_subscription_service "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/SubscriptionService.java"
click node_booking_service "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/BookingService.java"
click node_member "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/model/Member.java"
click node_coach "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/model/Coach.java"
click node_specialty "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/model/Specialty.java"
click node_plan "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/model/Plan.java"
click node_session "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/model/Session.java"
click node_subscription "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/model/Subscription.java"
click node_booking "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/model/Booking.java"
click node_member_repo "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/repository/MemberRepository.java"
click node_coach_repo "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/repository/CoachRepository.java"
click node_plan_repo "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/repository/PlanRepository.java"
click node_session_repo "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/repository/SessionRepository.java"
click node_subscription_repo "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/repository/SubscriptionRepository.java"
click node_booking_repo "https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/repository/BookingRepository.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_member_controller,node_coach_controller,node_plan_controller,node_session_controller,node_subscription_controller,node_booking_controller,node_client toneBlue
class node_member_service,node_coach_service,node_plan_service,node_session_service,node_subscription_service,node_booking_service,node_mysql toneAmber
class node_member,node_coach,node_specialty,node_plan,node_session,node_subscription,node_booking toneMint
class node_member_repo,node_coach_repo,node_plan_repo,node_session_repo,node_subscription_repo,node_booking_repo toneRose
```

## Components

### REST API

- [Member API](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/controller/MemberController.java): `src/main/java/com/esb/controller/MemberController.java`
- [Coach API](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/controller/CoachController.java): `src/main/java/com/esb/controller/CoachController.java`
- [Plan API](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/controller/PlanController.java): `src/main/java/com/esb/controller/PlanController.java`
- [Session API](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/controller/SessionController.java): `src/main/java/com/esb/controller/SessionController.java`
- [Subscription API](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/controller/SubscriptionController.java): `src/main/java/com/esb/controller/SubscriptionController.java`
- [Booking API](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/controller/BookingController.java): `src/main/java/com/esb/controller/BookingController.java`

### Business Services

- [Member Service](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/MemberService.java): `src/main/java/com/esb/service/MemberService.java`
- [Coach Service](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/CoachService.java): `src/main/java/com/esb/service/CoachService.java`
- [Plan Service](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/PlanService.java): `src/main/java/com/esb/service/PlanService.java`
- [Session Service](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/SessionService.java): `src/main/java/com/esb/service/SessionService.java`
- [Subscription Service](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/SubscriptionService.java): `src/main/java/com/esb/service/SubscriptionService.java`
- [Booking Service](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/service/BookingService.java): `src/main/java/com/esb/service/BookingService.java`

### Domain Model

- [Member](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/model/Member.java): `src/main/java/com/esb/model/Member.java`
- [Coach](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/model/Coach.java): `src/main/java/com/esb/model/Coach.java`
- [Specialty](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/model/Specialty.java): `src/main/java/com/esb/model/Specialty.java`
- [Plan](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/model/Plan.java): `src/main/java/com/esb/model/Plan.java`
- [Session](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/model/Session.java): `src/main/java/com/esb/model/Session.java`
- [Subscription](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/model/Subscription.java): `src/main/java/com/esb/model/Subscription.java`
- [Booking](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/model/Booking.java): `src/main/java/com/esb/model/Booking.java`

### Persistence

- [Member Repository](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/repository/MemberRepository.java): `src/main/java/com/esb/repository/MemberRepository.java`
- [Coach Repository](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/repository/CoachRepository.java): `src/main/java/com/esb/repository/CoachRepository.java`
- [Plan Repository](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/repository/PlanRepository.java): `src/main/java/com/esb/repository/PlanRepository.java`
- [Session Repository](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/repository/SessionRepository.java): `src/main/java/com/esb/repository/SessionRepository.java`
- [Subscription Repository](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/repository/SubscriptionRepository.java): `src/main/java/com/esb/repository/SubscriptionRepository.java`
- [Booking Repository](https://github.com/chamesdaboussi/gym-management/blob/main/src/main/java/com/esb/repository/BookingRepository.java): `src/main/java/com/esb/repository/BookingRepository.java`

### Other components

- **API Client**
- **MySQL**

## Connections

- API Client → Member API: calls endpoints (evidence: `README.md`)
- API Client → Coach API: calls endpoints (evidence: `README.md`)
- API Client → Plan API: calls endpoints (evidence: `README.md`)
- API Client → Session API: calls endpoints (evidence: `README.md`)
- API Client → Subscription API: calls endpoints (evidence: `README.md`)
- API Client → Booking API: calls endpoints (evidence: `README.md`)
- Member API → Member Service: delegates to (evidence: `src/main/java/com/esb/controller/MemberController.java`)
- Coach API → Coach Service: delegates to (evidence: `src/main/java/com/esb/controller/CoachController.java`)
- Plan API → Plan Service: delegates to (evidence: `src/main/java/com/esb/controller/PlanController.java`)
- Session API → Session Service: delegates to (evidence: `src/main/java/com/esb/controller/SessionController.java`)
- Subscription API → Subscription Service: delegates to (evidence: `src/main/java/com/esb/controller/SubscriptionController.java`)
- Booking API → Booking Service: delegates to (evidence: `src/main/java/com/esb/controller/BookingController.java`)
- Member Service → Member Repository: reads and writes (evidence: `src/main/java/com/esb/service/MemberService.java`)
- Coach Service → Coach Repository: reads and writes (evidence: `src/main/java/com/esb/service/CoachService.java`)
- Plan Service → Plan Repository: reads and writes (evidence: `src/main/java/com/esb/service/PlanService.java`)
- Session Service → Session Repository: reads and writes (evidence: `src/main/java/com/esb/service/SessionService.java`)
- Session Service → Coach Service: resolves coach (evidence: `src/main/java/com/esb/service/SessionService.java`)
- Subscription Service → Subscription Repository: reads and writes (evidence: `src/main/java/com/esb/service/SubscriptionService.java`)
- Subscription Service → Member Service: resolves member (evidence: `src/main/java/com/esb/service/SubscriptionService.java`)
- Subscription Service → Plan Service: resolves plan (evidence: `src/main/java/com/esb/service/SubscriptionService.java`)
- Booking Service → Booking Repository: checks and saves (evidence: `src/main/java/com/esb/service/BookingService.java`)
- Booking Service → Member Service: resolves member (evidence: `src/main/java/com/esb/service/BookingService.java`)
- Booking Service → Session Service: resolves session (evidence: `src/main/java/com/esb/service/BookingService.java`)
- Member Repository → MySQL: persists entities
- Coach Repository → MySQL: persists entities
- Plan Repository → MySQL: persists entities
- Session Repository → MySQL: persists entities
- Subscription Repository → MySQL: persists entities
- Booking Repository → MySQL: persists entities
- Session → Coach: references coach (evidence: `src/main/java/com/esb/model/Session.java`)
- Coach → Specialty: uses specialty (evidence: `src/main/java/com/esb/model/Coach.java`)
- Subscription → Member: belongs to (evidence: `src/main/java/com/esb/model/Subscription.java`)
- Subscription → Plan: uses plan (evidence: `src/main/java/com/esb/model/Subscription.java`)
- Booking → Member: belongs to (evidence: `src/main/java/com/esb/model/Booking.java`)
- Booking → Session: reserves (evidence: `src/main/java/com/esb/model/Booking.java`)
