# madondo07/margin_hotel_management architecture

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

- Interactive diagram: https://gitdiagram.com/madondo07/margin_hotel_management
- Repository: https://github.com/madondo07/margin_hotel_management

## Overview

Margin Hotel Management is a Spring backend for digitising hotel front-desk operations; the public booking site and staff UI are outside this repository. Its main operational flow is staff or guest API requests for bookings, guests, rooms, invoices and payments, with JWT authentication protecting role-restricted endpoints. The documented business sequence links a booking to an invoice and a payment, and booking services prevent overlapping room stays. Source excerpts and the index establish some service relationships; other documented but unsampled routes are shown without asserting their internal call chains.

Main entry points: [`src/main/java/za/ac/cput/marginhotelmanagement/service/AuthService.java`](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/AuthService.java) (Authentication), [`src/main/java/za/ac/cput/marginhotelmanagement/service/BookingService.java`](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/BookingService.java) (Booking operations), [`src/main/java/za/ac/cput/marginhotelmanagement/service/InvoiceService.java`](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/InvoiceService.java) (Invoice operations), [`src/main/java/za/ac/cput/marginhotelmanagement/service/PaymentService.java`](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/PaymentService.java) (Payment operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_auth_api["Authentication API"]
  node_booking_api["Booking API"]
  node_guest_api["Guest API"]
  node_room_api["Room API"]
  node_invoice_api["Invoice API"]
  node_payment_api["Payment API"]
  node_staff_api["Staff API"]
end

subgraph group_services["Business services"]
  node_auth_service["Authentication<br/>[AuthService.java]"]
  node_jwt_service["JWT tokens<br/>[JwtService.java]"]
  node_booking_service["Booking operations"]
  node_guest_service["Guest operations<br/>[GuestService.java]"]
  node_room_service["Room operations<br/>[RoomService.java]"]
  node_invoice_service["Invoice operations"]
  node_payment_service["Payment operations"]
  node_staff_service["Staff operations<br/>[StaffService.java]"]
end

subgraph group_domain["Hotel domain"]
  node_booking_domain["Bookings and stays<br/>[Booking.java]"]
  node_guest_domain["Guest profiles<br/>[Guest.java]"]
  node_room_domain["Rooms<br/>[Room.java]"]
  node_invoice_domain["Invoices<br/>[Invoice.java]"]
  node_payment_domain["Payments<br/>[Payment.java]"]
  node_staff_domain["Staff accounts<br/>[Manager.java]"]
end

subgraph group_persistence["Persistence"]
  node_booking_store[("Booking repository")]
  node_guest_store[("Guest repository")]
  node_room_store[("Room repository")]
  node_invoice_store[("Invoice repository")]
  node_payment_store[("Payment repository")]
  node_staff_store[("Staff repositories")]
  node_user_store[("User repository")]
end

node_client(("API client"))

node_client -->|"registers or logs in"| node_auth_api
node_client -->|"manages bookings"| node_booking_api
node_client -->|"manages guests"| node_guest_api
node_client -->|"manages rooms"| node_room_api
node_client -->|"manages invoices"| node_invoice_api
node_client -->|"manages payments"| node_payment_api
node_client -->|"manages staff"| node_staff_api
node_auth_api -.->|"delegates to"| node_auth_service
node_guest_api -->|"delegates to"| node_guest_service
node_invoice_api -->|"delegates to"| node_invoice_service
node_payment_api -->|"delegates to"| node_payment_service
node_booking_api -.->|"delegates to"| node_booking_service
node_room_api -.->|"delegates to"| node_room_service
node_staff_api -.->|"delegates to"| node_staff_service
node_auth_service -->|"uses tokens"| node_jwt_service
node_auth_service -->|"checks and saves users"| node_user_store
node_auth_service -->|"looks up guests"| node_guest_store
node_auth_service -->|"looks up bookings"| node_booking_store
node_booking_service -->|"reads and writes"| node_booking_store
node_booking_service -->|"resolves guest"| node_guest_service
node_booking_service -->|"resolves room"| node_room_service
node_guest_service -->|"reads and writes"| node_guest_store
node_invoice_service -->|"reads and writes"| node_invoice_store
node_invoice_service -->|"resolves booking"| node_booking_store
node_payment_service -->|"reads and writes"| node_payment_store
node_payment_service -->|"resolves invoice"| node_invoice_service
node_room_service -.->|"reads and writes"| node_room_store
node_staff_service -.->|"reads and writes"| node_staff_store
node_booking_service -->|"creates and updates"| node_booking_domain
node_guest_service -->|"creates and updates"| node_guest_domain
node_invoice_service -->|"creates and updates"| node_invoice_domain
node_payment_service -->|"creates and updates"| node_payment_domain
node_booking_domain -->|"references guest"| node_guest_domain
node_booking_domain -->|"references room"| node_room_domain
node_invoice_domain -.->|"references booking"| node_booking_domain
node_payment_domain -.->|"references invoice"| node_invoice_domain

click node_auth_api "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/controller/AuthController.java"
click node_booking_api "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/controller/BookingController.java"
click node_guest_api "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/controller/GuestController.java"
click node_room_api "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/controller/RoomController.java"
click node_invoice_api "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/controller/InvoiceController.java"
click node_payment_api "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/controller/PaymentController.java"
click node_staff_api "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/controller/StaffController.java"
click node_auth_service "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/AuthService.java"
click node_jwt_service "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/JwtService.java"
click node_booking_service "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/BookingService.java"
click node_guest_service "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/GuestService.java"
click node_room_service "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/RoomService.java"
click node_invoice_service "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/InvoiceService.java"
click node_payment_service "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/PaymentService.java"
click node_staff_service "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/StaffService.java"
click node_booking_domain "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/domain/Booking.java"
click node_guest_domain "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/domain/Guest.java"
click node_room_domain "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/domain/Room.java"
click node_invoice_domain "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/domain/Invoice.java"
click node_payment_domain "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/domain/Payment.java"
click node_staff_domain "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/domain/Manager.java"
click node_booking_store "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/repository/BookingRepository.java"
click node_guest_store "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/repository/GuestRepository.java"
click node_room_store "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/repository/RoomRepository.java"
click node_invoice_store "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/repository/InvoiceRepository.java"
click node_payment_store "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/repository/PaymentRepository.java"
click node_staff_store "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/repository/ManagerRepository.java"
click node_user_store "https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/repository/AppUserRepository.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_auth_api,node_booking_api,node_guest_api,node_room_api,node_invoice_api,node_payment_api,node_staff_api,node_client toneBlue
class node_auth_service,node_jwt_service,node_booking_service,node_guest_service,node_room_service,node_invoice_service,node_payment_service,node_staff_service toneAmber
class node_booking_domain,node_guest_domain,node_room_domain,node_invoice_domain,node_payment_domain,node_staff_domain toneMint
class node_booking_store,node_guest_store,node_room_store,node_invoice_store,node_payment_store,node_staff_store,node_user_store toneRose
```

## Components

### REST API

- [Authentication API](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/controller/AuthController.java): `src/main/java/za/ac/cput/marginhotelmanagement/controller/AuthController.java`
- [Booking API](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/controller/BookingController.java): `src/main/java/za/ac/cput/marginhotelmanagement/controller/BookingController.java`
- [Guest API](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/controller/GuestController.java): `src/main/java/za/ac/cput/marginhotelmanagement/controller/GuestController.java`
- [Room API](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/controller/RoomController.java): `src/main/java/za/ac/cput/marginhotelmanagement/controller/RoomController.java`
- [Invoice API](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/controller/InvoiceController.java): `src/main/java/za/ac/cput/marginhotelmanagement/controller/InvoiceController.java`
- [Payment API](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/controller/PaymentController.java): `src/main/java/za/ac/cput/marginhotelmanagement/controller/PaymentController.java`
- [Staff API](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/controller/StaffController.java): `src/main/java/za/ac/cput/marginhotelmanagement/controller/StaffController.java`

### Business services

- [Authentication](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/AuthService.java): `src/main/java/za/ac/cput/marginhotelmanagement/service/AuthService.java`
- [JWT tokens](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/JwtService.java): `src/main/java/za/ac/cput/marginhotelmanagement/service/JwtService.java`
- [Booking operations](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/BookingService.java): `src/main/java/za/ac/cput/marginhotelmanagement/service/BookingService.java`
- [Guest operations](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/GuestService.java): `src/main/java/za/ac/cput/marginhotelmanagement/service/GuestService.java`
- [Room operations](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/RoomService.java): `src/main/java/za/ac/cput/marginhotelmanagement/service/RoomService.java`
- [Invoice operations](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/InvoiceService.java): `src/main/java/za/ac/cput/marginhotelmanagement/service/InvoiceService.java`
- [Payment operations](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/PaymentService.java): `src/main/java/za/ac/cput/marginhotelmanagement/service/PaymentService.java`
- [Staff operations](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/service/StaffService.java): `src/main/java/za/ac/cput/marginhotelmanagement/service/StaffService.java`

### Hotel domain

- [Bookings and stays](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/domain/Booking.java): `src/main/java/za/ac/cput/marginhotelmanagement/domain/Booking.java`
- [Guest profiles](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/domain/Guest.java): `src/main/java/za/ac/cput/marginhotelmanagement/domain/Guest.java`
- [Rooms](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/domain/Room.java): `src/main/java/za/ac/cput/marginhotelmanagement/domain/Room.java`
- [Invoices](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/domain/Invoice.java): `src/main/java/za/ac/cput/marginhotelmanagement/domain/Invoice.java`
- [Payments](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/domain/Payment.java): `src/main/java/za/ac/cput/marginhotelmanagement/domain/Payment.java`
- [Staff accounts](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/domain/Manager.java): `src/main/java/za/ac/cput/marginhotelmanagement/domain/Manager.java`

### Persistence

- [Booking repository](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/repository/BookingRepository.java): `src/main/java/za/ac/cput/marginhotelmanagement/repository/BookingRepository.java`
- [Guest repository](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/repository/GuestRepository.java): `src/main/java/za/ac/cput/marginhotelmanagement/repository/GuestRepository.java`
- [Room repository](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/repository/RoomRepository.java): `src/main/java/za/ac/cput/marginhotelmanagement/repository/RoomRepository.java`
- [Invoice repository](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/repository/InvoiceRepository.java): `src/main/java/za/ac/cput/marginhotelmanagement/repository/InvoiceRepository.java`
- [Payment repository](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/repository/PaymentRepository.java): `src/main/java/za/ac/cput/marginhotelmanagement/repository/PaymentRepository.java`
- [Staff repositories](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/repository/ManagerRepository.java): `src/main/java/za/ac/cput/marginhotelmanagement/repository/ManagerRepository.java`
- [User repository](https://github.com/madondo07/margin_hotel_management/blob/main/src/main/java/za/ac/cput/marginhotelmanagement/repository/AppUserRepository.java): `src/main/java/za/ac/cput/marginhotelmanagement/repository/AppUserRepository.java`

### Other components

- **API client**

## Connections

- API client → Authentication API: registers or logs in (evidence: `README.md`)
- API client → Booking API: manages bookings (evidence: `README.md`)
- API client → Guest API: manages guests (evidence: `README.md`)
- API client → Room API: manages rooms (evidence: `README.md`)
- API client → Invoice API: manages invoices (evidence: `README.md`)
- API client → Payment API: manages payments (evidence: `README.md`)
- API client → Staff API: manages staff (evidence: `README.md`)
- Authentication API → Authentication: delegates to (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/controller/AuthController.java`)
- Guest API → Guest operations: delegates to (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/controller/GuestController.java`)
- Invoice API → Invoice operations: delegates to (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/controller/InvoiceController.java`)
- Payment API → Payment operations: delegates to (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/controller/PaymentController.java`)
- Booking API → Booking operations: delegates to (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/controller/BookingController.java`)
- Room API → Room operations: delegates to
- Staff API → Staff operations: delegates to (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/controller/StaffController.java`)
- Authentication → JWT tokens: uses tokens (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/AuthService.java`)
- Authentication → User repository: checks and saves users (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/AuthService.java`)
- Authentication → Guest repository: looks up guests (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/AuthService.java`)
- Authentication → Booking repository: looks up bookings (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/AuthService.java`)
- Booking operations → Booking repository: reads and writes (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/BookingService.java`)
- Booking operations → Guest operations: resolves guest (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/BookingService.java`)
- Booking operations → Room operations: resolves room (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/BookingService.java`)
- Guest operations → Guest repository: reads and writes (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/GuestService.java`)
- Invoice operations → Invoice repository: reads and writes (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/InvoiceService.java`)
- Invoice operations → Booking repository: resolves booking (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/InvoiceService.java`)
- Payment operations → Payment repository: reads and writes (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/PaymentService.java`)
- Payment operations → Invoice operations: resolves invoice (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/PaymentService.java`)
- Room operations → Room repository: reads and writes (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/RoomService.java`)
- Staff operations → Staff repositories: reads and writes (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/StaffService.java`)
- Booking operations → Bookings and stays: creates and updates (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/BookingService.java`)
- Guest operations → Guest profiles: creates and updates (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/GuestService.java`)
- Invoice operations → Invoices: creates and updates (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/InvoiceService.java`)
- Payment operations → Payments: creates and updates (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/service/PaymentService.java`)
- Bookings and stays → Guest profiles: references guest (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/domain/Booking.java`)
- Bookings and stays → Rooms: references room (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/domain/Booking.java`)
- Invoices → Bookings and stays: references booking (evidence: `src/main/java/za/ac/cput/marginhotelmanagement/domain/Invoice.java`)
- Payments → Invoices: references invoice
