# amine-genin/locavite architecture

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

- Interactive diagram: https://gitdiagram.com/amine-genin/locavite
- Repository: https://github.com/amine-genin/locavite

## Overview

LocaVite is a Moroccan vehicle rental and sales platform, with an Angular client and a modular Spring Boot API. The principal rental journey is browsing vehicles, checking availability, submitting a reservation, then managing its payment and reservation status; agency and admin users also manage fleet and reservations. The map includes authentication, catalog, documents, notifications, and payment capabilities indicated by the tree and README. Edges are limited to relationships shown in excerpts, the source index, or README; unsampled subsystem links are omitted rather than inferred.

Main entry points: [`backend/src/main/java/ma/locavite/reservation/service/ReservationService.java`](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/reservation/service/ReservationService.java) (Reservation service), [`frontend/src/app/app.routes.ts`](https://github.com/amine-genin/locavite/blob/main/frontend/src/app/app.routes.ts) (App routes), [`backend/src/main/java/ma/locavite/payment/service/PaymentService.java`](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/payment/service/PaymentService.java) (Payment service), [`backend/src/main/java/ma/locavite/vehicle/service/VehicleSearchService.java`](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/vehicle/service/VehicleSearchService.java) (Vehicle search)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_angular_routes["App routes<br/>[app.routes.ts]"]
  node_vehicle_ui["Vehicle browsing"]
  node_reservation_ui["Reservation flow"]
  node_reservation_admin_ui["Reservation admin"]
  node_auth_ui["Login and signup<br/>[login.component.ts]"]
end

subgraph group_identity["Identity and catalog"]
  node_auth_service["Auth service<br/>[AuthService.java]"]
  node_user_store[("User repository")]
  node_catalog["Vehicle catalog"]
end

subgraph group_rental["Fleet and rentals"]
  node_vehicle_search["Vehicle search"]
  node_vehicle_store[("Vehicle repository")]
  node_reservation_service["Reservation service"]
  node_reservation_store[("Reservation repository")]
  node_pricing["Reservation pricing"]
end

subgraph group_commerce["Payments and documents"]
  node_payment_service["Payment service"]
  node_payment_store[("Payment repository")]
  node_cmi_service["CMI payments"]
  node_documents["Document review"]
end

subgraph group_messaging["Notifications"]
  node_notification_service["Notification dispatch"]
  node_sms_service["SMS delivery<br/>[SmsService.java]"]
  node_whatsapp_service["WhatsApp delivery"]
end

node_customer(("Customer"))
node_manager(("Agency / admin"))
node_sms_gateway{{"Twilio"}}
node_cmi_gateway{{"CMI gateway"}}

node_customer -.->|"uses"| node_angular_routes
node_manager -.->|"uses"| node_angular_routes
node_angular_routes -->|"routes to"| node_vehicle_ui
node_angular_routes -->|"routes to"| node_reservation_ui
node_angular_routes -->|"routes to"| node_reservation_admin_ui
node_angular_routes -->|"routes to"| node_auth_ui
node_vehicle_ui -.->|"requests listings"| node_vehicle_search
node_reservation_ui -.->|"submits reservation"| node_reservation_service
node_reservation_admin_ui -.->|"manages reservations"| node_reservation_service
node_auth_ui -.->|"authenticates"| node_auth_service
node_auth_service -->|"reads and writes"| node_user_store
node_vehicle_search -->|"queries vehicles"| node_vehicle_store
node_reservation_service -.->|"reads and writes"| node_reservation_store
node_reservation_service -->|"loads vehicle"| node_vehicle_store
node_reservation_service -->|"calculates quote"| node_pricing
node_reservation_service -->|"resolves user"| node_user_store
node_reservation_service -->|"checks documents"| node_documents
node_payment_service -->|"loads reservation"| node_reservation_store
node_payment_service -->|"reads and writes"| node_payment_store
node_payment_service -.->|"initiates online payment"| node_cmi_service
node_cmi_service -.->|"communicates"| node_cmi_gateway
node_notification_service -->|"dispatches SMS"| node_sms_service
node_notification_service -->|"dispatches WhatsApp"| node_whatsapp_service
node_sms_service -.->|"sends message"| node_sms_gateway
node_catalog -.->|"serves catalog"| node_vehicle_search

click node_angular_routes "https://github.com/amine-genin/locavite/blob/main/frontend/src/app/app.routes.ts"
click node_vehicle_ui "https://github.com/amine-genin/locavite/blob/main/frontend/src/app/features/vehicles/vehicle-list/vehicle-list.component.ts"
click node_reservation_ui "https://github.com/amine-genin/locavite/blob/main/frontend/src/app/features/reservations/reservation-form.component.ts"
click node_reservation_admin_ui "https://github.com/amine-genin/locavite/blob/main/frontend/src/app/features/reservations/admin-reservations/admin-reservations.component.ts"
click node_auth_ui "https://github.com/amine-genin/locavite/blob/main/frontend/src/app/features/auth/login/login.component.ts"
click node_auth_service "https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/auth/service/AuthService.java"
click node_user_store "https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/auth/repository/UserRepository.java"
click node_catalog "https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/catalog/controller/CatalogController.java"
click node_vehicle_search "https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/vehicle/service/VehicleSearchService.java"
click node_vehicle_store "https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/vehicle/repository/VehicleRepository.java"
click node_reservation_service "https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/reservation/service/ReservationService.java"
click node_reservation_store "https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/reservation/repository/ReservationRepository.java"
click node_pricing "https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/reservation/service/PricingService.java"
click node_payment_service "https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/payment/service/PaymentService.java"
click node_payment_store "https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/payment/repository/PaymentRepository.java"
click node_cmi_service "https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/payment/cmi/service/CmiPaymentService.java"
click node_documents "https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/document/controller/UserDocumentController.java"
click node_notification_service "https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/notification/service/NotificationService.java"
click node_sms_service "https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/notification/service/SmsService.java"
click node_whatsapp_service "https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/notification/service/WhatsAppService.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_angular_routes,node_vehicle_ui,node_reservation_ui,node_reservation_admin_ui,node_auth_ui toneBlue
class node_auth_service,node_user_store,node_catalog toneAmber
class node_vehicle_search,node_vehicle_store,node_reservation_service,node_reservation_store,node_pricing toneMint
class node_payment_service,node_payment_store,node_cmi_service,node_documents toneRose
class node_notification_service,node_sms_service,node_whatsapp_service,node_customer,node_manager,node_sms_gateway,node_cmi_gateway toneIndigo
```

## Components

### Web client

- [App routes](https://github.com/amine-genin/locavite/blob/main/frontend/src/app/app.routes.ts): `frontend/src/app/app.routes.ts`
- [Vehicle browsing](https://github.com/amine-genin/locavite/blob/main/frontend/src/app/features/vehicles/vehicle-list/vehicle-list.component.ts): `frontend/src/app/features/vehicles/vehicle-list/vehicle-list.component.ts`
- [Reservation flow](https://github.com/amine-genin/locavite/blob/main/frontend/src/app/features/reservations/reservation-form.component.ts): `frontend/src/app/features/reservations/reservation-form.component.ts`
- [Reservation admin](https://github.com/amine-genin/locavite/blob/main/frontend/src/app/features/reservations/admin-reservations/admin-reservations.component.ts): `frontend/src/app/features/reservations/admin-reservations/admin-reservations.component.ts`
- [Login and signup](https://github.com/amine-genin/locavite/blob/main/frontend/src/app/features/auth/login/login.component.ts): `frontend/src/app/features/auth/login/login.component.ts`

### Identity and catalog

- [Auth service](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/auth/service/AuthService.java): `backend/src/main/java/ma/locavite/auth/service/AuthService.java`
- [User repository](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/auth/repository/UserRepository.java): `backend/src/main/java/ma/locavite/auth/repository/UserRepository.java`
- [Vehicle catalog](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/catalog/controller/CatalogController.java): `backend/src/main/java/ma/locavite/catalog/controller/CatalogController.java`

### Fleet and rentals

- [Vehicle search](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/vehicle/service/VehicleSearchService.java): `backend/src/main/java/ma/locavite/vehicle/service/VehicleSearchService.java`
- [Vehicle repository](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/vehicle/repository/VehicleRepository.java): `backend/src/main/java/ma/locavite/vehicle/repository/VehicleRepository.java`
- [Reservation service](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/reservation/service/ReservationService.java): `backend/src/main/java/ma/locavite/reservation/service/ReservationService.java`
- [Reservation repository](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/reservation/repository/ReservationRepository.java): `backend/src/main/java/ma/locavite/reservation/repository/ReservationRepository.java`
- [Reservation pricing](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/reservation/service/PricingService.java): `backend/src/main/java/ma/locavite/reservation/service/PricingService.java`

### Payments and documents

- [Payment service](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/payment/service/PaymentService.java): `backend/src/main/java/ma/locavite/payment/service/PaymentService.java`
- [Payment repository](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/payment/repository/PaymentRepository.java): `backend/src/main/java/ma/locavite/payment/repository/PaymentRepository.java`
- [CMI payments](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/payment/cmi/service/CmiPaymentService.java): `backend/src/main/java/ma/locavite/payment/cmi/service/CmiPaymentService.java`
- [Document review](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/document/controller/UserDocumentController.java): `backend/src/main/java/ma/locavite/document/controller/UserDocumentController.java`

### Notifications

- [Notification dispatch](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/notification/service/NotificationService.java): `backend/src/main/java/ma/locavite/notification/service/NotificationService.java`
- [SMS delivery](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/notification/service/SmsService.java): `backend/src/main/java/ma/locavite/notification/service/SmsService.java`
- [WhatsApp delivery](https://github.com/amine-genin/locavite/blob/main/backend/src/main/java/ma/locavite/notification/service/WhatsAppService.java): `backend/src/main/java/ma/locavite/notification/service/WhatsAppService.java`

### Other components

- **Customer**
- **Agency / admin**
- **Twilio**
- **CMI gateway**

## Connections

- Customer → App routes: uses
- Agency / admin → App routes: uses
- App routes → Vehicle browsing: routes to (evidence: `frontend/src/app/app.routes.ts`)
- App routes → Reservation flow: routes to (evidence: `frontend/src/app/app.routes.ts`)
- App routes → Reservation admin: routes to (evidence: `frontend/src/app/app.routes.ts`)
- App routes → Login and signup: routes to (evidence: `frontend/src/app/app.routes.ts`)
- Vehicle browsing → Vehicle search: requests listings
- Reservation flow → Reservation service: submits reservation
- Reservation admin → Reservation service: manages reservations
- Login and signup → Auth service: authenticates
- Auth service → User repository: reads and writes (evidence: `backend/src/main/java/ma/locavite/auth/service/AuthService.java`)
- Vehicle search → Vehicle repository: queries vehicles (evidence: `backend/src/main/java/ma/locavite/vehicle/service/VehicleSearchService.java`)
- Reservation service → Reservation repository: reads and writes (evidence: `backend/src/main/java/ma/locavite/reservation/service/ReservationService.java`)
- Reservation service → Vehicle repository: loads vehicle (evidence: `backend/src/main/java/ma/locavite/reservation/service/ReservationService.java`)
- Reservation service → Reservation pricing: calculates quote (evidence: `backend/src/main/java/ma/locavite/reservation/service/ReservationService.java`)
- Reservation service → User repository: resolves user (evidence: `backend/src/main/java/ma/locavite/reservation/service/ReservationService.java`)
- Reservation service → Document review: checks documents (evidence: `backend/src/main/java/ma/locavite/reservation/service/ReservationService.java`)
- Payment service → Reservation repository: loads reservation (evidence: `backend/src/main/java/ma/locavite/payment/service/PaymentService.java`)
- Payment service → Payment repository: reads and writes (evidence: `backend/src/main/java/ma/locavite/payment/service/PaymentService.java`)
- Payment service → CMI payments: initiates online payment
- CMI payments → CMI gateway: communicates
- Notification dispatch → SMS delivery: dispatches SMS (evidence: `backend/src/main/java/ma/locavite/notification/service/NotificationService.java`)
- Notification dispatch → WhatsApp delivery: dispatches WhatsApp (evidence: `backend/src/main/java/ma/locavite/notification/service/NotificationService.java`)
- SMS delivery → Twilio: sends message
- Vehicle catalog → Vehicle search: serves catalog
