# hasithaerandika/parqhub architecture

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

- Interactive diagram: https://gitdiagram.com/hasithaerandika/parqhub
- Repository: https://github.com/hasithaerandika/parqhub

## Overview

ParQHub is a web-based parking reservation and management platform. Users register vehicles, discover available lots and slots, book a space, track entry and exit, and settle parking charges; administrators manage facilities and records, monitor occupancy, and generate financial and utilization reports. The graph reflects documented features and sampled controller/service behavior. Several user and admin routes are represented by their enclosing controller directories because their wiring was not sampled; unsampled notification and email behavior is therefore not linked to particular callers.

Main entry points: [`src/main/java/com/prmplatform/parqhub/controller/admin/ManageTablesController.java`](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/admin/ManageTablesController.java) (Record management), [`src/main/java/com/prmplatform/parqhub/controller/user/PaymentController.java`](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/user/PaymentController.java) (Payment and receipt), [`src/main/java/com/prmplatform/parqhub/controller/admin/ReportController.java`](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/admin/ReportController.java) (Analytics and reports), [`src/main/java/com/prmplatform/parqhub/repository/BookingRepository.java`](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/repository/BookingRepository.java) (Booking data)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_user["User journeys"]
  node_registration["Registration"]
  node_userctl["User account"]
  node_discovery["Parking discovery"]
  node_paymentctl["Payment and receipt"]
  node_vehiclelog["Entry and exit logs"]
end

subgraph group_operations["Parking operations"]
  node_lots["Lots and slots<br/>[ParkingLot.java]"]
  node_viewer["Occupancy viewer"]
  node_lotservice["Slot provisioning"]
end

subgraph group_admin["Administration"]
  node_adminlogin["Admin access"]
  node_adminauth["Role authentication"]
  node_manage["Record management"]
  node_adminview["Parking monitor"]
  node_reports["Analytics and reports"]
end

subgraph group_internal["Domain and data"]
  node_booking["Reservations<br/>[Booking.java]"]
  node_payments["Payment records<br/>[Payment.java]"]
  node_vehiclelogs["Vehicle log records<br/>[VehicleLog.java]"]
  node_userrepo[("User and vehicle data")]
  node_bookingrepo[("Booking data")]
  node_slotrepo[("Slot data")]
  node_lotrepo[("Lot data")]
  node_paymentrepo[("Payment data")]
  node_logrepo[("Vehicle log data")]
  node_paymentservice["Payment strategies"]
  node_reportrepo[("Saved reports")]
  node_notifications["Notifications<br/>[Notification.java]"]
end

node_driver(("Driver"))
node_administrator(("Administrator"))
node_externalmail["Email service"]

node_driver -->|"registers"| node_registration
node_registration -->|"checks and saves"| node_userrepo
node_driver -->|"manages account"| node_userctl
node_userctl -->|"reads and saves"| node_userrepo
node_driver -->|"searches parking"| node_discovery
node_discovery -->|"requests availability"| node_viewer
node_viewer -->|"reads lots"| node_lotrepo
node_viewer -->|"reads slots"| node_slotrepo
node_driver -->|"requests reservation"| node_booking
node_userctl -->|"creates and reads"| node_bookingrepo
node_userctl -->|"checks and updates"| node_slotrepo
node_bookingrepo -->|"loads records"| node_booking
node_administrator -->|"signs in"| node_adminlogin
node_adminlogin -->|"authenticates role"| node_adminauth
node_adminlogin -->|"loads admin"| node_userrepo
node_administrator -->|"manages records"| node_manage
node_manage -->|"reads and saves"| node_userrepo
node_manage -->|"reads and saves"| node_bookingrepo
node_manage -->|"reads and saves"| node_lotrepo
node_manage -->|"reads and saves"| node_slotrepo
node_manage -->|"reads and saves"| node_paymentrepo
node_manage -->|"reads and saves"| node_reportrepo
node_manage -->|"provisions slots"| node_lotservice
node_lotservice -->|"creates and deletes"| node_slotrepo
node_administrator -->|"monitors occupancy"| node_adminview
node_adminview -->|"requests lot view"| node_viewer
node_administrator -->|"requests analytics"| node_reports
node_reports -->|"queries payments"| node_paymentrepo
node_reports -->|"queries bookings"| node_bookingrepo
node_reports -->|"queries occupancy"| node_slotrepo
node_reports -->|"saves reports"| node_reportrepo
node_driver -->|"tracks entry and exit"| node_vehiclelog
node_vehiclelog -->|"reads and records"| node_logrepo
node_driver -->|"pays and requests receipt"| node_paymentctl
node_paymentctl -->|"loads booking"| node_bookingrepo
node_paymentctl -->|"loads completed visit"| node_logrepo
node_paymentctl -->|"loads lot rate"| node_lotrepo
node_paymentctl -->|"processes payment"| node_paymentservice
node_paymentservice -->|"creates payment"| node_payments
node_paymentctl -->|"reads and saves"| node_paymentrepo
node_paymentctl -.->|"sends confirmation"| node_externalmail
node_driver -.->|"views updates"| node_notifications

click node_registration "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/RegisterController.java"
click node_userctl "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/user/UserController.java"
click node_discovery "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/user/FindParkingController.java"
click node_paymentctl "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/user/PaymentController.java"
click node_vehiclelog "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/user/VehicleLogController.java"
click node_booking "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/model/Booking.java"
click node_payments "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/model/Payment.java"
click node_lots "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/model/ParkingLot.java"
click node_viewer "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/service/ParkingViewerService.java"
click node_lotservice "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/service/ParkingLotService.java"
click node_vehiclelogs "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/model/VehicleLog.java"
click node_userrepo "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/repository/UserRepository.java"
click node_bookingrepo "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/repository/BookingRepository.java"
click node_slotrepo "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/repository/ParkingSlotRepository.java"
click node_lotrepo "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/repository/ParkingLotRepository.java"
click node_paymentrepo "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/repository/PaymentRepository.java"
click node_logrepo "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/repository/VehicleLogRepository.java"
click node_paymentservice "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/service/PaymentProcessingService.java"
click node_adminlogin "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/admin/AdminController.java"
click node_adminauth "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/service/AdminAuthenticationService.java"
click node_manage "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/admin/ManageTablesController.java"
click node_adminview "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/admin/ParkingViewerController.java"
click node_reports "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/admin/ReportController.java"
click node_reportrepo "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/repository/ReportRepository.java"
click node_notifications "https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/model/Notification.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_registration,node_userctl,node_discovery,node_paymentctl,node_vehiclelog toneBlue
class node_lots,node_viewer,node_lotservice toneAmber
class node_adminlogin,node_adminauth,node_manage,node_adminview,node_reports toneMint
class node_booking,node_payments,node_vehiclelogs,node_userrepo,node_bookingrepo,node_slotrepo,node_lotrepo,node_paymentrepo,node_logrepo,node_paymentservice,node_reportrepo,node_notifications toneRose
class node_driver,node_administrator,node_externalmail toneIndigo
```

## Components

### User journeys

- [Registration](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/RegisterController.java): `src/main/java/com/prmplatform/parqhub/controller/RegisterController.java`
- [User account](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/user/UserController.java): `src/main/java/com/prmplatform/parqhub/controller/user/UserController.java`
- [Parking discovery](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/user/FindParkingController.java): `src/main/java/com/prmplatform/parqhub/controller/user/FindParkingController.java`
- [Payment and receipt](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/user/PaymentController.java): `src/main/java/com/prmplatform/parqhub/controller/user/PaymentController.java`
- [Entry and exit logs](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/user/VehicleLogController.java): `src/main/java/com/prmplatform/parqhub/controller/user/VehicleLogController.java`

### Parking operations

- [Lots and slots](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/model/ParkingLot.java): `src/main/java/com/prmplatform/parqhub/model/ParkingLot.java`
- [Occupancy viewer](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/service/ParkingViewerService.java): `src/main/java/com/prmplatform/parqhub/service/ParkingViewerService.java`
- [Slot provisioning](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/service/ParkingLotService.java): `src/main/java/com/prmplatform/parqhub/service/ParkingLotService.java`

### Administration

- [Admin access](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/admin/AdminController.java): `src/main/java/com/prmplatform/parqhub/controller/admin/AdminController.java`
- [Role authentication](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/service/AdminAuthenticationService.java): `src/main/java/com/prmplatform/parqhub/service/AdminAuthenticationService.java`
- [Record management](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/admin/ManageTablesController.java): `src/main/java/com/prmplatform/parqhub/controller/admin/ManageTablesController.java`
- [Parking monitor](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/admin/ParkingViewerController.java): `src/main/java/com/prmplatform/parqhub/controller/admin/ParkingViewerController.java`
- [Analytics and reports](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/controller/admin/ReportController.java): `src/main/java/com/prmplatform/parqhub/controller/admin/ReportController.java`

### Domain and data

- [Reservations](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/model/Booking.java): `src/main/java/com/prmplatform/parqhub/model/Booking.java`
- [Payment records](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/model/Payment.java): `src/main/java/com/prmplatform/parqhub/model/Payment.java`
- [Vehicle log records](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/model/VehicleLog.java): `src/main/java/com/prmplatform/parqhub/model/VehicleLog.java`
- [User and vehicle data](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/repository/UserRepository.java): `src/main/java/com/prmplatform/parqhub/repository/UserRepository.java`
- [Booking data](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/repository/BookingRepository.java): `src/main/java/com/prmplatform/parqhub/repository/BookingRepository.java`
- [Slot data](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/repository/ParkingSlotRepository.java): `src/main/java/com/prmplatform/parqhub/repository/ParkingSlotRepository.java`
- [Lot data](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/repository/ParkingLotRepository.java): `src/main/java/com/prmplatform/parqhub/repository/ParkingLotRepository.java`
- [Payment data](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/repository/PaymentRepository.java): `src/main/java/com/prmplatform/parqhub/repository/PaymentRepository.java`
- [Vehicle log data](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/repository/VehicleLogRepository.java): `src/main/java/com/prmplatform/parqhub/repository/VehicleLogRepository.java`
- [Payment strategies](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/service/PaymentProcessingService.java): `src/main/java/com/prmplatform/parqhub/service/PaymentProcessingService.java`
- [Saved reports](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/repository/ReportRepository.java): `src/main/java/com/prmplatform/parqhub/repository/ReportRepository.java`
- [Notifications](https://github.com/hasithaerandika/parqhub/blob/master/src/main/java/com/prmplatform/parqhub/model/Notification.java): `src/main/java/com/prmplatform/parqhub/model/Notification.java`

### Other components

- **Driver**
- **Administrator**
- **Email service**

## Connections

- Driver → Registration: registers
- Registration → User and vehicle data: checks and saves
- Driver → User account: manages account
- User account → User and vehicle data: reads and saves
- Driver → Parking discovery: searches parking
- Parking discovery → Occupancy viewer: requests availability
- Occupancy viewer → Lot data: reads lots
- Occupancy viewer → Slot data: reads slots
- Driver → Reservations: requests reservation
- User account → Booking data: creates and reads
- User account → Slot data: checks and updates
- Booking data → Reservations: loads records
- Administrator → Admin access: signs in
- Admin access → Role authentication: authenticates role
- Admin access → User and vehicle data: loads admin
- Administrator → Record management: manages records
- Record management → User and vehicle data: reads and saves
- Record management → Booking data: reads and saves
- Record management → Lot data: reads and saves
- Record management → Slot data: reads and saves
- Record management → Payment data: reads and saves
- Record management → Saved reports: reads and saves
- Record management → Slot provisioning: provisions slots
- Slot provisioning → Slot data: creates and deletes
- Administrator → Parking monitor: monitors occupancy
- Parking monitor → Occupancy viewer: requests lot view
- Administrator → Analytics and reports: requests analytics
- Analytics and reports → Payment data: queries payments
- Analytics and reports → Booking data: queries bookings
- Analytics and reports → Slot data: queries occupancy
- Analytics and reports → Saved reports: saves reports
- Driver → Entry and exit logs: tracks entry and exit
- Entry and exit logs → Vehicle log data: reads and records
- Driver → Payment and receipt: pays and requests receipt
- Payment and receipt → Booking data: loads booking
- Payment and receipt → Vehicle log data: loads completed visit
- Payment and receipt → Lot data: loads lot rate
- Payment and receipt → Payment strategies: processes payment
- Payment strategies → Payment records: creates payment
- Payment and receipt → Payment data: reads and saves
- Payment and receipt → Email service: sends confirmation
- Driver → Notifications: views updates
