# mprvn/room-reservation-service architecture

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

- Interactive diagram: https://gitdiagram.com/mprvn/room-reservation-service
- Repository: https://github.com/mprvn/room-reservation-service

## Overview

This Spring Boot service accepts room reservations, validates dates and payment mode, calculates a rate-based total, verifies credit-card payments when selected, and persists the reservation. Cash reservations are confirmed immediately; bank-transfer reservations remain pending until payment events arrive, with overdue unpaid reservations cancelled by a scheduled job. The README documents the reservation API and its Kafka and payment-service dependencies. The graph reflects sampled service calls and indexed references; unsampled configuration and persistence wiring are shown only where supported.

Main entry points: [`src/main/java/com/marvel/hospitality/reservation/service/ReservationService.java`](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/reservation/service/ReservationService.java) (Reservation workflow), [`src/main/java/com/marvel/hospitality/reservation/repository/ReservationRepository.java`](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/reservation/repository/ReservationRepository.java) (Reservation repository), [`src/main/java/com/marvel/hospitality/reservation/service/CancellationService.java`](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/reservation/service/CancellationService.java) (Unpaid cancellation), [`src/main/java/com/marvel/hospitality/payment/banktransfer/service/BankTransferPaymentService.java`](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/payment/banktransfer/service/BankTransferPaymentService.java) (Bank-transfer processing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_reservation["Reservation lifecycle"]
  node_api["Reservation API"]
  node_workflow["Reservation workflow"]
  node_reservation_model["Reservation state<br/>[Reservation.java]"]
  node_cancellation["Unpaid cancellation"]
  node_scheduler["Cancellation schedule"]
end

subgraph group_payments["Payment processing"]
  node_card_client["Card payment client"]
  node_bank_listener["Bank-transfer listener"]
  node_bank_workflow["Bank-transfer processing"]
end

subgraph group_persistence["Persistence"]
  node_reservation_store["Reservation repository"]
  node_database[("Application database")]
  node_bank_store["Bank payment repository"]
end

subgraph group_operations["Application support"]
  node_settings["Application properties<br/>[AppProperties.java]"]
  node_errors["Exception handler"]
end

node_guest(("Reservation client"))
node_card_service["Credit-card service"]
node_kafka["Payment event broker"]

node_guest -->|"submits reservation"| node_api
node_api -->|"delegates to"| node_workflow
node_workflow -->|"creates and updates"| node_reservation_model
node_workflow -->|"saves and retrieves"| node_reservation_store
node_workflow -->|"checks payment"| node_card_client
node_card_client -->|"requests status"| node_card_service
node_kafka -.->|"delivers events"| node_bank_listener
node_bank_listener -->|"dispatches event"| node_bank_workflow
node_bank_workflow -->|"loads and saves"| node_reservation_store
node_bank_workflow -->|"records payment"| node_bank_store
node_scheduler -->|"triggers job"| node_cancellation
node_cancellation -->|"queries and saves"| node_reservation_store
node_reservation_store -.->|"persists reservations"| node_database
node_bank_store -.->|"persists payments"| node_database
node_workflow -->|"reads rates and deadline"| node_settings
node_cancellation -->|"reads deadline"| node_settings

click node_api "https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/reservation/controller/ReservationController.java"
click node_workflow "https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/reservation/service/ReservationService.java"
click node_reservation_model "https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/reservation/model/Reservation.java"
click node_cancellation "https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/reservation/service/CancellationService.java"
click node_scheduler "https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/reservation/job/UnpaidReservationCancellationJob.java"
click node_reservation_store "https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/reservation/repository/ReservationRepository.java"
click node_card_client "https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/payment/creditcard/service/CreditCardPaymentClient.java"
click node_bank_listener "https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/payment/banktransfer/listener/BankTransferKafkaListener.java"
click node_bank_workflow "https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/payment/banktransfer/service/BankTransferPaymentService.java"
click node_bank_store "https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/payment/banktransfer/repository/BankTransferPaymentRepository.java"
click node_settings "https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/common/AppProperties.java"
click node_errors "https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/common/GlobalExceptionHandler.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_api,node_workflow,node_reservation_model,node_cancellation,node_scheduler,node_guest toneBlue
class node_card_client,node_bank_listener,node_bank_workflow toneAmber
class node_reservation_store,node_database,node_bank_store toneMint
class node_settings,node_errors toneRose
class node_card_service,node_kafka toneIndigo
```

## Components

### Reservation lifecycle

- [Reservation API](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/reservation/controller/ReservationController.java): `src/main/java/com/marvel/hospitality/reservation/controller/ReservationController.java`
- [Reservation workflow](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/reservation/service/ReservationService.java): `src/main/java/com/marvel/hospitality/reservation/service/ReservationService.java`
- [Reservation state](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/reservation/model/Reservation.java): `src/main/java/com/marvel/hospitality/reservation/model/Reservation.java`
- [Unpaid cancellation](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/reservation/service/CancellationService.java): `src/main/java/com/marvel/hospitality/reservation/service/CancellationService.java`
- [Cancellation schedule](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/reservation/job/UnpaidReservationCancellationJob.java): `src/main/java/com/marvel/hospitality/reservation/job/UnpaidReservationCancellationJob.java`

### Payment processing

- [Card payment client](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/payment/creditcard/service/CreditCardPaymentClient.java): `src/main/java/com/marvel/hospitality/payment/creditcard/service/CreditCardPaymentClient.java`
- [Bank-transfer listener](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/payment/banktransfer/listener/BankTransferKafkaListener.java): `src/main/java/com/marvel/hospitality/payment/banktransfer/listener/BankTransferKafkaListener.java`
- [Bank-transfer processing](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/payment/banktransfer/service/BankTransferPaymentService.java): `src/main/java/com/marvel/hospitality/payment/banktransfer/service/BankTransferPaymentService.java`

### Persistence

- [Reservation repository](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/reservation/repository/ReservationRepository.java): `src/main/java/com/marvel/hospitality/reservation/repository/ReservationRepository.java`
- **Application database**
- [Bank payment repository](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/payment/banktransfer/repository/BankTransferPaymentRepository.java): `src/main/java/com/marvel/hospitality/payment/banktransfer/repository/BankTransferPaymentRepository.java`

### Application support

- [Application properties](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/common/AppProperties.java): `src/main/java/com/marvel/hospitality/common/AppProperties.java`
- [Exception handler](https://github.com/mprvn/room-reservation-service/blob/main/src/main/java/com/marvel/hospitality/common/GlobalExceptionHandler.java): `src/main/java/com/marvel/hospitality/common/GlobalExceptionHandler.java`

### Other components

- **Reservation client**
- **Credit-card service**
- **Payment event broker**

## Connections

- Reservation client → Reservation API: submits reservation (evidence: `README.md`)
- Reservation API → Reservation workflow: delegates to (evidence: `src/main/java/com/marvel/hospitality/reservation/controller/ReservationController.java`)
- Reservation workflow → Reservation state: creates and updates (evidence: `src/main/java/com/marvel/hospitality/reservation/service/ReservationService.java`)
- Reservation workflow → Reservation repository: saves and retrieves (evidence: `src/main/java/com/marvel/hospitality/reservation/service/ReservationService.java`)
- Reservation workflow → Card payment client: checks payment (evidence: `src/main/java/com/marvel/hospitality/reservation/service/ReservationService.java`)
- Card payment client → Credit-card service: requests status (evidence: `src/main/java/com/marvel/hospitality/payment/creditcard/service/CreditCardPaymentClient.java`)
- Payment event broker → Bank-transfer listener: delivers events (evidence: `README.md`)
- Bank-transfer listener → Bank-transfer processing: dispatches event (evidence: `src/main/java/com/marvel/hospitality/payment/banktransfer/listener/BankTransferKafkaListener.java`)
- Bank-transfer processing → Reservation repository: loads and saves (evidence: `src/main/java/com/marvel/hospitality/payment/banktransfer/service/BankTransferPaymentService.java`)
- Bank-transfer processing → Bank payment repository: records payment (evidence: `src/main/java/com/marvel/hospitality/payment/banktransfer/service/BankTransferPaymentService.java`)
- Cancellation schedule → Unpaid cancellation: triggers job (evidence: `src/main/java/com/marvel/hospitality/reservation/job/UnpaidReservationCancellationJob.java`)
- Unpaid cancellation → Reservation repository: queries and saves (evidence: `src/main/java/com/marvel/hospitality/reservation/service/CancellationService.java`)
- Reservation repository → Application database: persists reservations
- Bank payment repository → Application database: persists payments
- Reservation workflow → Application properties: reads rates and deadline (evidence: `src/main/java/com/marvel/hospitality/reservation/service/ReservationService.java`)
- Unpaid cancellation → Application properties: reads deadline (evidence: `src/main/java/com/marvel/hospitality/reservation/service/CancellationService.java`)
