# marvin54-hub/elite-carwash architecture

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

- Interactive diagram: https://gitdiagram.com/marvin54-hub/elite-carwash
- Repository: https://github.com/marvin54-hub/elite-carwash

## Overview

Witbank Elite Car Wash is a Spring Boot booking and operations platform. Customers book wash services, manage vehicles and booking history, and can pay through Yoco; staff manage service progress while administrators oversee operations and reports. The graph includes customer and staff access, booking and payment, operational management, reporting, and supporting services. Edges are limited to relationships shown in excerpts, the source index, or README; unsampled features are represented only where their paths are in the tree and links are documented or evidenced.

Main entry points: [`src/main/java/com/witbank/carwash/service/BookingService.java`](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/BookingService.java) (Booking lifecycle), [`src/main/java/com/witbank/carwash/controller/BookingController.java`](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/BookingController.java) (Booking entry), [`src/main/java/com/witbank/carwash/controller/AdminController.java`](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/AdminController.java) (Admin console), [`src/main/java/com/witbank/carwash/service/CustomerService.java`](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/CustomerService.java) (Customer records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and web"]
  node_customer_auth["Customer access"]
  node_staff_auth["Staff access"]
  node_security["Security rules"]
  node_customer_controller["Customer portal"]
  node_exception["Web error handling"]
end

subgraph group_booking["Booking and payments"]
  node_booking_controller["Booking entry"]
  node_booking_service["Booking lifecycle"]
  node_customer_service["Customer records"]
  node_payment_controller["Payment callbacks"]
  node_yoco["Yoco checkout<br/>[YocoService.java]"]
end

subgraph group_operations["Operations"]
  node_admin["Admin console"]
  node_staff_controller["Staff workflow"]
  node_staff_service["Staff management<br/>[StaffService.java]"]
  node_reports["Reports export"]
  node_sql_console["SQL console"]
end

subgraph group_data["Domain and persistence"]
  node_booking_data["Bookings<br/>[Booking.java]"]
  node_booking_repo[("Booking storage")]
  node_customer_repo[("Customer storage")]
  node_staff_repo[("Staff storage")]
  node_notification_repo[("Notification log")]
end

subgraph group_support["Platform services"]
  node_notification["Notifications"]
  node_reminder["Booking reminders"]
  node_qr["QR codes<br/>[QrCodeService.java]"]
  node_weather["Weather service"]
  node_application["Application runtime"]
  node_database_config["Database setup"]
end

node_customer(("Customer"))
node_staff_actor(("Staff and admin"))
node_yoco_service{{"Yoco"}}

node_customer -->|"registers or signs in"| node_customer_auth
node_staff_actor -->|"signs in"| node_staff_auth
node_customer_auth -.->|"uses access rules"| node_security
node_staff_auth -.->|"uses access rules"| node_security
node_customer -.->|"requests booking"| node_booking_controller
node_booking_controller -->|"delegates booking"| node_booking_service
node_booking_controller -->|"uses customer data"| node_customer_service
node_booking_controller -->|"starts checkout"| node_yoco
node_booking_controller -->|"requests QR code"| node_qr
node_booking_controller -->|"requests weather"| node_weather
node_customer -.->|"views account"| node_customer_controller
node_customer_controller -->|"reads bookings"| node_booking_service
node_customer_controller -->|"manages account"| node_customer_service
node_payment_controller -->|"handles payment"| node_yoco
node_yoco -->|"creates checkout"| node_yoco_service
node_yoco_service -->|"returns payment event"| node_yoco
node_yoco -.->|"records paid payment"| node_customer_service
node_staff_actor -.->|"manages operations"| node_admin
node_staff_actor -.->|"updates service status"| node_staff_controller
node_admin -->|"manages services"| node_booking_service
node_admin -->|"reads customer data"| node_customer_service
node_admin -->|"manages employees"| node_staff_service
node_staff_controller -->|"manages bookings"| node_booking_service
node_staff_controller -->|"manages staff"| node_staff_service
node_admin -.->|"opens reports"| node_reports
node_reports -->|"reads booking data"| node_booking_service
node_reports -->|"reads customer metrics"| node_customer_service
node_admin -.->|"opens SQL console"| node_sql_console
node_booking_service -->|"reads and writes"| node_booking_repo
node_booking_repo -->|"persists"| node_booking_data
node_customer_service -->|"reads and writes"| node_customer_repo
node_customer_repo -->|"persists"| node_customer
node_staff_service -->|"reads and writes"| node_staff_repo
node_booking_service -->|"dispatches notices"| node_notification
node_notification -->|"logs notices"| node_notification_repo
node_reminder -->|"finds due bookings"| node_booking_repo
node_reminder -->|"dispatches reminders"| node_notification
node_database_config -.->|"configures persistence"| node_booking_repo

click node_customer_auth "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/CustomerAuthController.java"
click node_staff_auth "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/StaffAuthController.java"
click node_security "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/config/SecurityConfig.java"
click node_customer_controller "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/CustomerController.java"
click node_booking_controller "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/BookingController.java"
click node_booking_service "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/BookingService.java"
click node_booking_data "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/model/Booking.java"
click node_booking_repo "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/repository/BookingRepository.java"
click node_customer_service "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/CustomerService.java"
click node_customer_repo "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/repository/CustomerRepository.java"
click node_payment_controller "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/PaymentController.java"
click node_yoco "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/YocoService.java"
click node_admin "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/AdminController.java"
click node_staff_controller "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/StaffController.java"
click node_staff_service "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/StaffService.java"
click node_staff_repo "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/repository/StaffRepository.java"
click node_reports "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/ReportController.java"
click node_sql_console "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/SqlConsoleController.java"
click node_notification "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/NotificationService.java"
click node_notification_repo "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/repository/NotificationLogRepository.java"
click node_reminder "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/ReminderService.java"
click node_qr "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/QrCodeService.java"
click node_weather "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/WeatherService.java"
click node_exception "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/GlobalExceptionHandler.java"
click node_application "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/CarWashApplication.java"
click node_database_config "https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/config/DatabaseConfig.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_customer_auth,node_staff_auth,node_security,node_customer_controller,node_exception toneBlue
class node_booking_controller,node_booking_service,node_customer_service,node_payment_controller,node_yoco toneAmber
class node_admin,node_staff_controller,node_staff_service,node_reports,node_sql_console toneMint
class node_booking_data,node_booking_repo,node_customer_repo,node_staff_repo,node_notification_repo toneRose
class node_notification,node_reminder,node_qr,node_weather,node_application,node_database_config,node_customer,node_staff_actor,node_yoco_service toneIndigo
```

## Components

### Access and web

- [Customer access](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/CustomerAuthController.java): `src/main/java/com/witbank/carwash/controller/CustomerAuthController.java`
- [Staff access](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/StaffAuthController.java): `src/main/java/com/witbank/carwash/controller/StaffAuthController.java`
- [Security rules](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/config/SecurityConfig.java): `src/main/java/com/witbank/carwash/config/SecurityConfig.java`
- [Customer portal](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/CustomerController.java): `src/main/java/com/witbank/carwash/controller/CustomerController.java`
- [Web error handling](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/GlobalExceptionHandler.java): `src/main/java/com/witbank/carwash/controller/GlobalExceptionHandler.java`

### Booking and payments

- [Booking entry](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/BookingController.java): `src/main/java/com/witbank/carwash/controller/BookingController.java`
- [Booking lifecycle](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/BookingService.java): `src/main/java/com/witbank/carwash/service/BookingService.java`
- [Customer records](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/CustomerService.java): `src/main/java/com/witbank/carwash/service/CustomerService.java`
- [Payment callbacks](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/PaymentController.java): `src/main/java/com/witbank/carwash/controller/PaymentController.java`
- [Yoco checkout](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/YocoService.java): `src/main/java/com/witbank/carwash/service/YocoService.java`

### Operations

- [Admin console](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/AdminController.java): `src/main/java/com/witbank/carwash/controller/AdminController.java`
- [Staff workflow](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/StaffController.java): `src/main/java/com/witbank/carwash/controller/StaffController.java`
- [Staff management](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/StaffService.java): `src/main/java/com/witbank/carwash/service/StaffService.java`
- [Reports export](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/ReportController.java): `src/main/java/com/witbank/carwash/controller/ReportController.java`
- [SQL console](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/controller/SqlConsoleController.java): `src/main/java/com/witbank/carwash/controller/SqlConsoleController.java`

### Domain and persistence

- [Bookings](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/model/Booking.java): `src/main/java/com/witbank/carwash/model/Booking.java`
- [Booking storage](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/repository/BookingRepository.java): `src/main/java/com/witbank/carwash/repository/BookingRepository.java`
- [Customer storage](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/repository/CustomerRepository.java): `src/main/java/com/witbank/carwash/repository/CustomerRepository.java`
- [Staff storage](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/repository/StaffRepository.java): `src/main/java/com/witbank/carwash/repository/StaffRepository.java`
- [Notification log](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/repository/NotificationLogRepository.java): `src/main/java/com/witbank/carwash/repository/NotificationLogRepository.java`

### Platform services

- [Notifications](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/NotificationService.java): `src/main/java/com/witbank/carwash/service/NotificationService.java`
- [Booking reminders](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/ReminderService.java): `src/main/java/com/witbank/carwash/service/ReminderService.java`
- [QR codes](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/QrCodeService.java): `src/main/java/com/witbank/carwash/service/QrCodeService.java`
- [Weather service](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/service/WeatherService.java): `src/main/java/com/witbank/carwash/service/WeatherService.java`
- [Application runtime](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/CarWashApplication.java): `src/main/java/com/witbank/carwash/CarWashApplication.java`
- [Database setup](https://github.com/marvin54-hub/elite-carwash/blob/main/src/main/java/com/witbank/carwash/config/DatabaseConfig.java): `src/main/java/com/witbank/carwash/config/DatabaseConfig.java`

### Other components

- **Customer**
- **Staff and admin**
- **Yoco**

## Connections

- Customer → Customer access: registers or signs in (evidence: `README.md`)
- Staff and admin → Staff access: signs in (evidence: `README.md`)
- Customer access → Security rules: uses access rules
- Staff access → Security rules: uses access rules
- Customer → Booking entry: requests booking
- Booking entry → Booking lifecycle: delegates booking (evidence: `src/main/java/com/witbank/carwash/controller/BookingController.java`)
- Booking entry → Customer records: uses customer data (evidence: `src/main/java/com/witbank/carwash/controller/BookingController.java`)
- Booking entry → Yoco checkout: starts checkout (evidence: `src/main/java/com/witbank/carwash/controller/BookingController.java`)
- Booking entry → QR codes: requests QR code (evidence: `src/main/java/com/witbank/carwash/controller/BookingController.java`)
- Booking entry → Weather service: requests weather (evidence: `src/main/java/com/witbank/carwash/controller/BookingController.java`)
- Customer → Customer portal: views account
- Customer portal → Booking lifecycle: reads bookings (evidence: `src/main/java/com/witbank/carwash/controller/CustomerController.java`)
- Customer portal → Customer records: manages account (evidence: `src/main/java/com/witbank/carwash/controller/CustomerController.java`)
- Payment callbacks → Yoco checkout: handles payment (evidence: `src/main/java/com/witbank/carwash/controller/PaymentController.java`)
- Yoco checkout → Yoco: creates checkout (evidence: `src/main/java/com/witbank/carwash/service/YocoService.java`)
- Yoco → Yoco checkout: returns payment event (evidence: `src/main/java/com/witbank/carwash/service/YocoService.java`)
- Yoco checkout → Customer records: records paid payment
- Staff and admin → Admin console: manages operations
- Staff and admin → Staff workflow: updates service status
- Admin console → Booking lifecycle: manages services (evidence: `src/main/java/com/witbank/carwash/controller/AdminController.java`)
- Admin console → Customer records: reads customer data (evidence: `src/main/java/com/witbank/carwash/controller/AdminController.java`)
- Admin console → Staff management: manages employees (evidence: `src/main/java/com/witbank/carwash/controller/AdminController.java`)
- Staff workflow → Booking lifecycle: manages bookings (evidence: `src/main/java/com/witbank/carwash/controller/StaffController.java`)
- Staff workflow → Staff management: manages staff (evidence: `src/main/java/com/witbank/carwash/controller/StaffController.java`)
- Admin console → Reports export: opens reports
- Reports export → Booking lifecycle: reads booking data (evidence: `src/main/java/com/witbank/carwash/controller/ReportController.java`)
- Reports export → Customer records: reads customer metrics (evidence: `src/main/java/com/witbank/carwash/controller/ReportController.java`)
- Admin console → SQL console: opens SQL console
- Booking lifecycle → Booking storage: reads and writes (evidence: `src/main/java/com/witbank/carwash/service/BookingService.java`)
- Booking storage → Bookings: persists (evidence: `src/main/java/com/witbank/carwash/repository/BookingRepository.java`)
- Customer records → Customer storage: reads and writes (evidence: `src/main/java/com/witbank/carwash/service/CustomerService.java`)
- Customer storage → Customer: persists (evidence: `src/main/java/com/witbank/carwash/repository/CustomerRepository.java`)
- Staff management → Staff storage: reads and writes (evidence: `src/main/java/com/witbank/carwash/service/StaffService.java`)
- Booking lifecycle → Notifications: dispatches notices (evidence: `src/main/java/com/witbank/carwash/service/BookingService.java`)
- Notifications → Notification log: logs notices (evidence: `src/main/java/com/witbank/carwash/service/NotificationService.java`)
- Booking reminders → Booking storage: finds due bookings (evidence: `src/main/java/com/witbank/carwash/service/ReminderService.java`)
- Booking reminders → Notifications: dispatches reminders (evidence: `src/main/java/com/witbank/carwash/service/ReminderService.java`)
- Database setup → Booking storage: configures persistence
