# esupportail/mybookings architecture

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

- Interactive diagram: https://gitdiagram.com/esupportail/mybookings
- Repository: https://github.com/esupportail/mybookings

## Overview

MyBookings is a Symfony application for equipment and service booking, access management, and fleet tracking. Users browse available catalogue resources, submit bookings, and follow workflow-driven moderation and booking status; administrators manage services, resources, access rules, and workflows. The map separates booking, catalogue and service management, identity/access, and supporting integrations. BookingController’s dependencies and BookingService’s persistence/workflow behavior are evidenced in the source index and excerpts; several broader capabilities are documented in the README, while unsampled implementation links are omitted.

Main entry points: [`src/Service/BookingService.php`](https://github.com/esupportail/mybookings/blob/main/src/Service/BookingService.php) (Booking rules), [`src/EventSubscriber/WorkflowBookingState.php`](https://github.com/esupportail/mybookings/blob/main/src/EventSubscriber/WorkflowBookingState.php) (Booking transitions), [`src/Repository/BookingRepository.php`](https://github.com/esupportail/mybookings/blob/main/src/Repository/BookingRepository.php) (Booking storage), [`src/Repository/WorkflowLogRepository.php`](https://github.com/esupportail/mybookings/blob/main/src/Repository/WorkflowLogRepository.php) (Workflow history)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_booking["Booking lifecycle"]
  node_booking_controller["Booking actions"]
  node_booking_service["Booking rules<br/>[BookingService.php]"]
  node_booking_state["Booking transitions"]
  node_workflow_listener["Workflow listener"]
  node_booking_entity["Booking records<br/>[Booking.php]"]
  node_booking_repo[("Booking storage")]
  node_workflow_entity["Workflow rules<br/>[Workflow.php]"]
  node_workflow_log_repo[("Workflow history")]
end

subgraph group_catalogue["Catalogue management"]
  node_catalogue_controller["Catalogue actions"]
  node_resource_controller["Resource actions"]
  node_catalogue_entity["Catalogue items"]
  node_resource_entity["Equipment<br/>[Resource.php]"]
  node_provision_entity["Booking provisions<br/>[Provision.php]"]
  node_catalogue_repo[("Catalogue storage")]
  node_service_entity["Services<br/>[Service.php]"]
  node_service_provider["Service API provider"]
end

subgraph group_identity["Identity and access"]
  node_auth["Authentication"]
  node_user_entity["User records<br/>[User.php]"]
  node_user_repo[("User storage<br/>[UserRepository.php]")]
  node_acl_repo[("Access rules<br/>[AclRepository.php]")]
  node_user_tools["User lookup<br/>[UserTools.php]"]
end

subgraph group_support["Platform services"]
  node_remote["Services container"]
  node_remote_service["Remote integration<br/>[RemoteService.php]"]
  node_mail["Email notifications<br/>[Mail.php]"]
  node_statistics["Usage statistics"]
  node_cron["Scheduled tasks"]
end

node_user(("User"))

node_user -.->|"requests booking"| node_booking_controller
node_booking_controller -->|"uses booking rules"| node_booking_service
node_booking_service -->|"persists bookings"| node_booking_repo
node_booking_service -->|"applies transitions"| node_workflow_entity
node_booking_service -->|"uses user tools"| node_user_tools
node_booking_state -->|"reads bookings"| node_booking_repo
node_booking_state -->|"records history"| node_workflow_log_repo
node_booking_state -->|"sends notices"| node_mail
node_booking_state -->|"calls service"| node_remote_service
node_workflow_listener -->|"reads bookings"| node_booking_repo
node_workflow_listener -->|"writes history"| node_workflow_log_repo
node_booking_repo -->|"stores"| node_booking_entity
node_workflow_log_repo -->|"stores workflow logs"| node_workflow_entity
node_catalogue_controller -->|"queries catalogue"| node_catalogue_repo
node_catalogue_controller -->|"uses catalogue data"| node_catalogue_entity
node_resource_controller -->|"queries catalogue"| node_catalogue_repo
node_resource_controller -->|"manages resources"| node_resource_entity
node_catalogue_repo -->|"stores"| node_catalogue_entity
node_service_entity -->|"configures API provider"| node_service_provider
node_service_provider -->|"returns services"| node_service_entity
node_auth -.->|"authenticates user"| node_user_entity
node_user_tools -->|"searches users"| node_user_repo
node_user_tools -->|"searches access rules"| node_acl_repo
node_remote_service -.->|"connects remotely"| node_remote
node_statistics -->|"queries user data"| node_remote_service
node_statistics -->|"reads workflow history"| node_workflow_log_repo
node_statistics -.->|"stores statistics"| node_user_repo
node_cron -.->|"updates bookings"| node_booking_service
node_user -.->|"browses resources"| node_catalogue_controller

click node_booking_controller "https://github.com/esupportail/mybookings/blob/main/src/Controller/BookingController.php"
click node_booking_service "https://github.com/esupportail/mybookings/blob/main/src/Service/BookingService.php"
click node_booking_state "https://github.com/esupportail/mybookings/blob/main/src/EventSubscriber/WorkflowBookingState.php"
click node_workflow_listener "https://github.com/esupportail/mybookings/blob/main/src/EventListener/WorkflowListener.php"
click node_booking_entity "https://github.com/esupportail/mybookings/blob/main/src/Entity/Booking.php"
click node_booking_repo "https://github.com/esupportail/mybookings/blob/main/src/Repository/BookingRepository.php"
click node_workflow_entity "https://github.com/esupportail/mybookings/blob/main/src/Entity/Workflow.php"
click node_workflow_log_repo "https://github.com/esupportail/mybookings/blob/main/src/Repository/WorkflowLogRepository.php"
click node_catalogue_controller "https://github.com/esupportail/mybookings/blob/main/src/Controller/ResourceCatalogueController.php"
click node_resource_controller "https://github.com/esupportail/mybookings/blob/main/src/Controller/ResourceController.php"
click node_catalogue_entity "https://github.com/esupportail/mybookings/blob/main/src/Entity/CatalogueResource.php"
click node_resource_entity "https://github.com/esupportail/mybookings/blob/main/src/Entity/Resource.php"
click node_provision_entity "https://github.com/esupportail/mybookings/blob/main/src/Entity/Provision.php"
click node_catalogue_repo "https://github.com/esupportail/mybookings/blob/main/src/Repository/CatalogueResourceRepository.php"
click node_service_entity "https://github.com/esupportail/mybookings/blob/main/src/Entity/Service.php"
click node_service_provider "https://github.com/esupportail/mybookings/blob/main/src/ApiPlatform/Provider/ServiceProvider.php"
click node_auth "https://github.com/esupportail/mybookings/blob/main/src/Security/ShibAuthenticator.php"
click node_user_entity "https://github.com/esupportail/mybookings/blob/main/src/Entity/User.php"
click node_user_repo "https://github.com/esupportail/mybookings/blob/main/src/Repository/UserRepository.php"
click node_acl_repo "https://github.com/esupportail/mybookings/blob/main/src/Repository/AclRepository.php"
click node_user_tools "https://github.com/esupportail/mybookings/blob/main/src/Tools/UserTools.php"
click node_remote_service "https://github.com/esupportail/mybookings/blob/main/src/Service/RemoteService.php"
click node_mail "https://github.com/esupportail/mybookings/blob/main/src/Service/Mail.php"
click node_statistics "https://github.com/esupportail/mybookings/blob/main/src/Service/StatisticService.php"
click node_cron "https://github.com/esupportail/mybookings/blob/main/src/Command/AutoUpdateBookingsCommand.php"

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_booking_controller,node_booking_service,node_booking_state,node_workflow_listener,node_booking_entity,node_booking_repo,node_workflow_entity,node_workflow_log_repo,node_user toneBlue
class node_catalogue_controller,node_resource_controller,node_catalogue_entity,node_resource_entity,node_provision_entity,node_catalogue_repo,node_service_entity,node_service_provider toneAmber
class node_auth,node_user_entity,node_user_repo,node_acl_repo,node_user_tools toneMint
class node_remote,node_remote_service,node_mail,node_statistics,node_cron toneRose
```

## Components

### Booking lifecycle

- [Booking actions](https://github.com/esupportail/mybookings/blob/main/src/Controller/BookingController.php): `src/Controller/BookingController.php`
- [Booking rules](https://github.com/esupportail/mybookings/blob/main/src/Service/BookingService.php): `src/Service/BookingService.php`
- [Booking transitions](https://github.com/esupportail/mybookings/blob/main/src/EventSubscriber/WorkflowBookingState.php): `src/EventSubscriber/WorkflowBookingState.php`
- [Workflow listener](https://github.com/esupportail/mybookings/blob/main/src/EventListener/WorkflowListener.php): `src/EventListener/WorkflowListener.php`
- [Booking records](https://github.com/esupportail/mybookings/blob/main/src/Entity/Booking.php): `src/Entity/Booking.php`
- [Booking storage](https://github.com/esupportail/mybookings/blob/main/src/Repository/BookingRepository.php): `src/Repository/BookingRepository.php`
- [Workflow rules](https://github.com/esupportail/mybookings/blob/main/src/Entity/Workflow.php): `src/Entity/Workflow.php`
- [Workflow history](https://github.com/esupportail/mybookings/blob/main/src/Repository/WorkflowLogRepository.php): `src/Repository/WorkflowLogRepository.php`

### Catalogue management

- [Catalogue actions](https://github.com/esupportail/mybookings/blob/main/src/Controller/ResourceCatalogueController.php): `src/Controller/ResourceCatalogueController.php`
- [Resource actions](https://github.com/esupportail/mybookings/blob/main/src/Controller/ResourceController.php): `src/Controller/ResourceController.php`
- [Catalogue items](https://github.com/esupportail/mybookings/blob/main/src/Entity/CatalogueResource.php): `src/Entity/CatalogueResource.php`
- [Equipment](https://github.com/esupportail/mybookings/blob/main/src/Entity/Resource.php): `src/Entity/Resource.php`
- [Booking provisions](https://github.com/esupportail/mybookings/blob/main/src/Entity/Provision.php): `src/Entity/Provision.php`
- [Catalogue storage](https://github.com/esupportail/mybookings/blob/main/src/Repository/CatalogueResourceRepository.php): `src/Repository/CatalogueResourceRepository.php`
- [Services](https://github.com/esupportail/mybookings/blob/main/src/Entity/Service.php): `src/Entity/Service.php`
- [Service API provider](https://github.com/esupportail/mybookings/blob/main/src/ApiPlatform/Provider/ServiceProvider.php): `src/ApiPlatform/Provider/ServiceProvider.php`

### Identity and access

- [Authentication](https://github.com/esupportail/mybookings/blob/main/src/Security/ShibAuthenticator.php): `src/Security/ShibAuthenticator.php`
- [User records](https://github.com/esupportail/mybookings/blob/main/src/Entity/User.php): `src/Entity/User.php`
- [User storage](https://github.com/esupportail/mybookings/blob/main/src/Repository/UserRepository.php): `src/Repository/UserRepository.php`
- [Access rules](https://github.com/esupportail/mybookings/blob/main/src/Repository/AclRepository.php): `src/Repository/AclRepository.php`
- [User lookup](https://github.com/esupportail/mybookings/blob/main/src/Tools/UserTools.php): `src/Tools/UserTools.php`

### Platform services

- **Services container**
- [Remote integration](https://github.com/esupportail/mybookings/blob/main/src/Service/RemoteService.php): `src/Service/RemoteService.php`
- [Email notifications](https://github.com/esupportail/mybookings/blob/main/src/Service/Mail.php): `src/Service/Mail.php`
- [Usage statistics](https://github.com/esupportail/mybookings/blob/main/src/Service/StatisticService.php): `src/Service/StatisticService.php`
- [Scheduled tasks](https://github.com/esupportail/mybookings/blob/main/src/Command/AutoUpdateBookingsCommand.php): `src/Command/AutoUpdateBookingsCommand.php`

### Other components

- **User**

## Connections

- User → Booking actions: requests booking
- Booking actions → Booking rules: uses booking rules (evidence: `src/Controller/BookingController.php`)
- Booking rules → Booking storage: persists bookings (evidence: `src/Service/BookingService.php`)
- Booking rules → Workflow rules: applies transitions (evidence: `src/Service/BookingService.php`)
- Booking rules → User lookup: uses user tools (evidence: `src/Service/BookingService.php`)
- Booking transitions → Booking storage: reads bookings (evidence: `src/EventSubscriber/WorkflowBookingState.php`)
- Booking transitions → Workflow history: records history (evidence: `src/EventSubscriber/WorkflowBookingState.php`)
- Booking transitions → Email notifications: sends notices (evidence: `src/EventSubscriber/WorkflowBookingState.php`)
- Booking transitions → Remote integration: calls service (evidence: `src/EventSubscriber/WorkflowBookingState.php`)
- Workflow listener → Booking storage: reads bookings (evidence: `src/EventListener/WorkflowListener.php`)
- Workflow listener → Workflow history: writes history (evidence: `src/EventListener/WorkflowListener.php`)
- Booking storage → Booking records: stores (evidence: `src/Repository/BookingRepository.php`)
- Workflow history → Workflow rules: stores workflow logs (evidence: `src/EventSubscriber/WorkflowBookingState.php`)
- Catalogue actions → Catalogue storage: queries catalogue (evidence: `src/Controller/ResourceCatalogueController.php`)
- Catalogue actions → Catalogue items: uses catalogue data (evidence: `src/Controller/ResourceCatalogueController.php`)
- Resource actions → Catalogue storage: queries catalogue (evidence: `src/Controller/ResourceController.php`)
- Resource actions → Equipment: manages resources (evidence: `src/Controller/ResourceController.php`)
- Catalogue storage → Catalogue items: stores (evidence: `src/Repository/CatalogueResourceRepository.php`)
- Services → Service API provider: configures API provider (evidence: `src/Entity/Service.php`)
- Service API provider → Services: returns services (evidence: `src/ApiPlatform/Provider/ServiceProvider.php`)
- Authentication → User records: authenticates user
- User lookup → User storage: searches users (evidence: `src/Tools/UserTools.php`)
- User lookup → Access rules: searches access rules (evidence: `src/Tools/UserTools.php`)
- Remote integration → Services container: connects remotely
- Usage statistics → Remote integration: queries user data (evidence: `src/Service/StatisticService.php`)
- Usage statistics → Workflow history: reads workflow history (evidence: `src/Service/StatisticService.php`)
- Usage statistics → User storage: stores statistics
- Scheduled tasks → Booking rules: updates bookings
- User → Catalogue actions: browses resources
