# iliasamodin/hotel_rental architecture

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

- Interactive diagram: https://gitdiagram.com/iliasamodin/hotel_rental
- Repository: https://github.com/iliasamodin/hotel_rental

## Overview

This is a FastAPI hotel-reservation backend. Clients use its API to register or authenticate, browse hotels and rooms, and manage bookings; booking services apply domain rules and persist changes through DAOs. The README also identifies Redis caching and Celery notifications/cache warm-up as product capabilities. The sampled source confirms service-to-DAO work, booking email dispatch, and application registration of integrations; unsampled endpoint wiring is shown only at the router level, and monitoring internals are not inferred.

Main entry points: [`app/main.py`](https://github.com/iliasamodin/hotel_rental/blob/main/app/main.py) (FastAPI application), [`app/adapters/primary/api/version_1/router.py`](https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/primary/api/version_1/router.py) (Versioned router), [`app/adapters/secondary/db/session.py`](https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/secondary/db/session.py) (SQL database), [`app/core/services/bookings/service.py`](https://github.com/iliasamodin/hotel_rental/blob/main/app/core/services/bookings/service.py) (Booking service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_application["FastAPI application<br/>[main.py]"]
  node_api_router["Versioned router<br/>[router.py]"]
  node_authorization_api["Authorization endpoints<br/>[endpoints.py]"]
  node_bookings_api["Booking endpoints<br/>[endpoints.py]"]
  node_resource_api["Resource endpoints<br/>[endpoints.py]"]
end

subgraph group_services["Domain services"]
  node_auth_service["Authorization service<br/>[service.py]"]
  node_booking_service["Booking service<br/>[service.py]"]
  node_resource_service["Resource service<br/>[service.py]"]
  node_booking_domain["Booking rules<br/>[booking_domain.py]"]
end

subgraph group_storage["Persistence"]
  node_auth_dao["Authorization DAO<br/>[dao.py]"]
  node_booking_dao["Booking DAO<br/>[dao.py]"]
  node_resource_dao["Resource DAO<br/>[dao.py]"]
  node_database[("SQL database<br/>[session.py]")]
end

subgraph group_integrations["Runtime integrations"]
  node_redis_controller["Redis cache control"]
  node_celery_controller["Celery task control"]
  node_celery_tasks["Background tasks<br/>[tasks.py]"]
end

subgraph group_operations["Operations"]
  node_admin_panel["Admin panel"]
  node_prometheus["Prometheus instrumentation<br/>[instrumentator.py]"]
end

node_client(("API client"))
node_redis[("Redis")]
node_email["Email service"]

node_client -->|"sends requests"| node_application
node_application -->|"registers routes"| node_api_router
node_api_router -->|"dispatches"| node_authorization_api
node_api_router -->|"dispatches"| node_bookings_api
node_api_router -->|"dispatches"| node_resource_api
node_auth_service -->|"reads and writes"| node_auth_dao
node_booking_service -->|"reads and writes"| node_booking_dao
node_resource_service -->|"queries"| node_resource_dao
node_booking_service -->|"applies rules"| node_booking_domain
node_auth_dao -->|"queries"| node_database
node_booking_dao -->|"queries"| node_database
node_resource_dao -->|"queries"| node_database
node_application -->|"registers app"| node_redis_controller
node_redis_controller -.->|"caches responses"| node_redis
node_booking_service -->|"dispatches email task"| node_celery_tasks
node_celery_tasks -.->|"sends notifications"| node_email
node_celery_controller -->|"enables tasks"| node_celery_tasks
node_redis_controller -->|"warms cache via HTTP"| node_application
node_application -->|"registers admin"| node_admin_panel
node_admin_panel -->|"serves model views"| node_database
node_application -->|"instruments and exposes"| node_prometheus

click node_application "https://github.com/iliasamodin/hotel_rental/blob/main/app/main.py"
click node_api_router "https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/primary/api/version_1/router.py"
click node_authorization_api "https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/primary/api/version_1/authorization/endpoints.py"
click node_bookings_api "https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/primary/api/version_1/bookings/endpoints.py"
click node_resource_api "https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/primary/api/version_1/resource_manager/endpoints.py"
click node_auth_service "https://github.com/iliasamodin/hotel_rental/blob/main/app/core/services/authorization/service.py"
click node_booking_service "https://github.com/iliasamodin/hotel_rental/blob/main/app/core/services/bookings/service.py"
click node_resource_service "https://github.com/iliasamodin/hotel_rental/blob/main/app/core/services/resource_manager/service.py"
click node_booking_domain "https://github.com/iliasamodin/hotel_rental/blob/main/app/core/domain/bookings/booking_domain.py"
click node_auth_dao "https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/secondary/db/dao/authorization/dao.py"
click node_booking_dao "https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/secondary/db/dao/bookings/dao.py"
click node_resource_dao "https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/secondary/db/dao/resource_manager/dao.py"
click node_database "https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/secondary/db/session.py"
click node_redis_controller "https://github.com/iliasamodin/hotel_rental/blob/main/app/utils/redis/redis_controller.py"
click node_celery_controller "https://github.com/iliasamodin/hotel_rental/blob/main/app/utils/celery/celery_controller.py"
click node_celery_tasks "https://github.com/iliasamodin/hotel_rental/blob/main/app/utils/celery/tasks.py"
click node_admin_panel "https://github.com/iliasamodin/hotel_rental/blob/main/app/utils/admin_panel/admin_controller.py"
click node_prometheus "https://github.com/iliasamodin/hotel_rental/blob/main/app/utils/prometheus/instrumentator.py"

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_application,node_api_router,node_authorization_api,node_bookings_api,node_resource_api,node_client toneBlue
class node_auth_service,node_booking_service,node_resource_service,node_booking_domain,node_redis toneAmber
class node_auth_dao,node_booking_dao,node_resource_dao,node_database toneMint
class node_redis_controller,node_celery_controller,node_celery_tasks toneRose
class node_admin_panel,node_prometheus,node_email toneIndigo
```

## Components

### HTTP API

- [FastAPI application](https://github.com/iliasamodin/hotel_rental/blob/main/app/main.py): `app/main.py`
- [Versioned router](https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/primary/api/version_1/router.py): `app/adapters/primary/api/version_1/router.py`
- [Authorization endpoints](https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/primary/api/version_1/authorization/endpoints.py): `app/adapters/primary/api/version_1/authorization/endpoints.py`
- [Booking endpoints](https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/primary/api/version_1/bookings/endpoints.py): `app/adapters/primary/api/version_1/bookings/endpoints.py`
- [Resource endpoints](https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/primary/api/version_1/resource_manager/endpoints.py): `app/adapters/primary/api/version_1/resource_manager/endpoints.py`

### Domain services

- [Authorization service](https://github.com/iliasamodin/hotel_rental/blob/main/app/core/services/authorization/service.py): `app/core/services/authorization/service.py`
- [Booking service](https://github.com/iliasamodin/hotel_rental/blob/main/app/core/services/bookings/service.py): `app/core/services/bookings/service.py`
- [Resource service](https://github.com/iliasamodin/hotel_rental/blob/main/app/core/services/resource_manager/service.py): `app/core/services/resource_manager/service.py`
- [Booking rules](https://github.com/iliasamodin/hotel_rental/blob/main/app/core/domain/bookings/booking_domain.py): `app/core/domain/bookings/booking_domain.py`

### Persistence

- [Authorization DAO](https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/secondary/db/dao/authorization/dao.py): `app/adapters/secondary/db/dao/authorization/dao.py`
- [Booking DAO](https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/secondary/db/dao/bookings/dao.py): `app/adapters/secondary/db/dao/bookings/dao.py`
- [Resource DAO](https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/secondary/db/dao/resource_manager/dao.py): `app/adapters/secondary/db/dao/resource_manager/dao.py`
- [SQL database](https://github.com/iliasamodin/hotel_rental/blob/main/app/adapters/secondary/db/session.py): `app/adapters/secondary/db/session.py`

### Runtime integrations

- [Redis cache control](https://github.com/iliasamodin/hotel_rental/blob/main/app/utils/redis/redis_controller.py): `app/utils/redis/redis_controller.py`
- [Celery task control](https://github.com/iliasamodin/hotel_rental/blob/main/app/utils/celery/celery_controller.py): `app/utils/celery/celery_controller.py`
- [Background tasks](https://github.com/iliasamodin/hotel_rental/blob/main/app/utils/celery/tasks.py): `app/utils/celery/tasks.py`

### Operations

- [Admin panel](https://github.com/iliasamodin/hotel_rental/blob/main/app/utils/admin_panel/admin_controller.py): `app/utils/admin_panel/admin_controller.py`
- [Prometheus instrumentation](https://github.com/iliasamodin/hotel_rental/blob/main/app/utils/prometheus/instrumentator.py): `app/utils/prometheus/instrumentator.py`

### Other components

- **API client**
- **Redis**
- **Email service**

## Connections

- API client → FastAPI application: sends requests
- FastAPI application → Versioned router: registers routes
- Versioned router → Authorization endpoints: dispatches
- Versioned router → Booking endpoints: dispatches
- Versioned router → Resource endpoints: dispatches
- Authorization service → Authorization DAO: reads and writes
- Booking service → Booking DAO: reads and writes
- Resource service → Resource DAO: queries
- Booking service → Booking rules: applies rules
- Authorization DAO → SQL database: queries
- Booking DAO → SQL database: queries
- Resource DAO → SQL database: queries
- FastAPI application → Redis cache control: registers app
- Redis cache control → Redis: caches responses
- Booking service → Background tasks: dispatches email task
- Background tasks → Email service: sends notifications
- Celery task control → Background tasks: enables tasks
- Redis cache control → FastAPI application: warms cache via HTTP
- FastAPI application → Admin panel: registers admin
- Admin panel → SQL database: serves model views
- FastAPI application → Prometheus instrumentation: instruments and exposes
