# fyberov-dev/restaurant-booking-system-backend architecture

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

- Interactive diagram: https://gitdiagram.com/fyberov-dev/restaurant-booking-system-backend
- Repository: https://github.com/fyberov-dev/restaurant-booking-system-backend

## Overview

This is a Spring Boot restaurant-reservation backend. Customers can fetch restaurant hours and available time slots, filter/rate tables by booking time, party size, and table type, then reserve a suitable table; restaurant operators can manage floor-plan tables. The main runtime path is HTTP controller → service → repository/database. The README also documents Swagger API documentation. Source excerpts show booking validation and rating logic; wiring for security and other unsampled areas is not inferred.

Main entry points: [`src/main/java/ee/nimens/restaurant/booking/system/backend/service/BookingService.java`](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/service/BookingService.java) (Booking validation), [`src/main/java/ee/nimens/restaurant/booking/system/backend/service/TableService.java`](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/service/TableService.java) (Floor table management), [`src/main/java/ee/nimens/restaurant/booking/system/backend/service/RestaurantService.java`](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/service/RestaurantService.java) (Hours and slots), [`src/main/java/ee/nimens/restaurant/booking/system/backend/service/RatingService.java`](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/service/RatingService.java) (Table matching)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_booking_api["Booking API"]
  node_table_api["Table API"]
  node_rating_api["Rating API"]
  node_restaurant_api["Restaurant API"]
end

subgraph group_domain["Reservation Domain"]
  node_booking_service["Booking validation"]
  node_table_service["Floor table management<br/>[TableService.java]"]
  node_rating_service["Table matching<br/>[RatingService.java]"]
  node_restaurant_service["Hours and slots"]
end

subgraph group_data["Persistence"]
  node_booking_repo["Booking queries"]
  node_table_repo["Table records"]
  node_restaurant_repo["Restaurant records"]
  node_database[("PostgreSQL")]
end

subgraph group_support["API Support"]
  node_booking_mapper["Booking mapping<br/>[BookingMapper.java]"]
  node_table_mapper["Table mapping<br/>[TableMapper.java]"]
  node_restaurant_mapper["Restaurant mapping"]
  node_date_util["Date utilities<br/>[DateUtil.java]"]
  node_errors["Error responses"]
  node_swagger["Swagger API docs<br/>[SwaggerConfig.java]"]
end

node_user(("Customer / operator"))

node_user -->|"submits reservation"| node_booking_api
node_user -->|"manages tables"| node_table_api
node_user -->|"filters tables"| node_rating_api
node_user -->|"requests hours"| node_restaurant_api
node_booking_api -->|"creates booking"| node_booking_service
node_table_api -->|"manages tables"| node_table_service
node_rating_api -->|"requests matches"| node_rating_service
node_restaurant_api -->|"requests slots"| node_restaurant_service
node_booking_service -->|"formats times"| node_date_util
node_booking_service -->|"checks table"| node_table_service
node_booking_service -->|"checks conflicts"| node_booking_repo
node_booking_service -->|"saves booking"| node_booking_repo
node_booking_service -->|"maps booking"| node_booking_mapper
node_rating_service -->|"reads bookings"| node_booking_service
node_rating_service -->|"reads tables"| node_table_service
node_table_service -->|"reads and writes"| node_table_repo
node_table_service -->|"maps tables"| node_table_mapper
node_restaurant_service -->|"reads restaurant"| node_restaurant_repo
node_restaurant_service -->|"builds slot times"| node_date_util
node_restaurant_service -->|"maps response"| node_restaurant_mapper
node_booking_repo -->|"queries bookings"| node_database
node_table_repo -->|"queries tables"| node_database
node_restaurant_repo -->|"queries restaurant"| node_database
node_swagger -->|"serves API docs"| node_user

click node_booking_api "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/controller/BookingController.java"
click node_table_api "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/controller/TableController.java"
click node_rating_api "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/controller/RatingController.java"
click node_restaurant_api "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/controller/RestaurantController.java"
click node_booking_service "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/service/BookingService.java"
click node_table_service "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/service/TableService.java"
click node_rating_service "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/service/RatingService.java"
click node_restaurant_service "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/service/RestaurantService.java"
click node_booking_repo "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/repository/BookingRepository.java"
click node_table_repo "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/repository/TableRepository.java"
click node_restaurant_repo "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/repository/RestaurantRepository.java"
click node_database "https://github.com/fyberov-dev/restaurant-booking-system-backend/tree/main/src/main/resources/db/migration"
click node_booking_mapper "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/util/mapper/BookingMapper.java"
click node_table_mapper "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/util/mapper/TableMapper.java"
click node_restaurant_mapper "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/util/mapper/RestaurantMapper.java"
click node_date_util "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/util/DateUtil.java"
click node_errors "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/exception/GlobalExceptionHandler.java"
click node_swagger "https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/config/docs/SwaggerConfig.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_booking_api,node_table_api,node_rating_api,node_restaurant_api toneBlue
class node_booking_service,node_table_service,node_rating_service,node_restaurant_service toneAmber
class node_booking_repo,node_table_repo,node_restaurant_repo,node_database toneMint
class node_booking_mapper,node_table_mapper,node_restaurant_mapper,node_date_util,node_errors,node_swagger toneRose
class node_user toneIndigo
```

## Components

### HTTP API

- [Booking API](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/controller/BookingController.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/controller/BookingController.java`
- [Table API](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/controller/TableController.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/controller/TableController.java`
- [Rating API](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/controller/RatingController.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/controller/RatingController.java`
- [Restaurant API](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/controller/RestaurantController.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/controller/RestaurantController.java`

### Reservation Domain

- [Booking validation](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/service/BookingService.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/service/BookingService.java`
- [Floor table management](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/service/TableService.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/service/TableService.java`
- [Table matching](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/service/RatingService.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/service/RatingService.java`
- [Hours and slots](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/service/RestaurantService.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/service/RestaurantService.java`

### Persistence

- [Booking queries](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/repository/BookingRepository.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/repository/BookingRepository.java`
- [Table records](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/repository/TableRepository.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/repository/TableRepository.java`
- [Restaurant records](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/repository/RestaurantRepository.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/repository/RestaurantRepository.java`
- [PostgreSQL](https://github.com/fyberov-dev/restaurant-booking-system-backend/tree/main/src/main/resources/db/migration): `src/main/resources/db/migration`

### API Support

- [Booking mapping](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/util/mapper/BookingMapper.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/util/mapper/BookingMapper.java`
- [Table mapping](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/util/mapper/TableMapper.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/util/mapper/TableMapper.java`
- [Restaurant mapping](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/util/mapper/RestaurantMapper.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/util/mapper/RestaurantMapper.java`
- [Date utilities](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/util/DateUtil.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/util/DateUtil.java`
- [Error responses](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/exception/GlobalExceptionHandler.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/exception/GlobalExceptionHandler.java`
- [Swagger API docs](https://github.com/fyberov-dev/restaurant-booking-system-backend/blob/main/src/main/java/ee/nimens/restaurant/booking/system/backend/config/docs/SwaggerConfig.java): `src/main/java/ee/nimens/restaurant/booking/system/backend/config/docs/SwaggerConfig.java`

### Other components

- **Customer / operator**

## Connections

- Customer / operator → Booking API: submits reservation
- Customer / operator → Table API: manages tables
- Customer / operator → Rating API: filters tables
- Customer / operator → Restaurant API: requests hours
- Booking API → Booking validation: creates booking
- Table API → Floor table management: manages tables
- Rating API → Table matching: requests matches
- Restaurant API → Hours and slots: requests slots
- Booking validation → Date utilities: formats times
- Booking validation → Floor table management: checks table
- Booking validation → Booking queries: checks conflicts
- Booking validation → Booking queries: saves booking
- Booking validation → Booking mapping: maps booking
- Table matching → Booking validation: reads bookings
- Table matching → Floor table management: reads tables
- Floor table management → Table records: reads and writes
- Floor table management → Table mapping: maps tables
- Hours and slots → Restaurant records: reads restaurant
- Hours and slots → Date utilities: builds slot times
- Hours and slots → Restaurant mapping: maps response
- Booking queries → PostgreSQL: queries bookings
- Table records → PostgreSQL: queries tables
- Restaurant records → PostgreSQL: queries restaurant
- Swagger API docs → Customer / operator: serves API docs
