How vmkmanoj/hotel-booking-backend-genworx works
Purpose and Entry Points
This is a Python backend for property/rental management: authentication, users/roles/permissions, properties, addresses, amenities, images, favorites, and administrative dashboards. The application entry point is main.py; API route composition is centralized in app/routers.py.
HTTP API Layer
Feature-scoped API modules expose request handlers for domain operations, including auth, properties, addresses, amenities, favorites, and administration. Representative boundaries are app/api/auth/auth.py, app/api/property/property_api.py, and app/api/super_admin/super_admin.py. The API layer should translate HTTP input/output only and delegate business work to services.
Service Layer
Services coordinate use cases, validation-oriented schemas, authorization-related logic, and repository calls. Core workflow services are app/services/auth_service.py, app/services/property_service.py, and app/services/super_admin_service.py. Supporting service modules cover address, amenities, property images/amenities, favorites, and dashboard aggregation.
Persistence and Domain Model
SQLAlchemy-style database setup is separated into base metadata and engine/session concerns at app/database/base.py and app/database/engine.py. Persistent domain entities model users/access control and property inventory: app/models/users.py, app/models/property.py, and app/models/roles.py; related models include addresses, amenities, image associations, favorites, permissions, and role-permission mappings.
Repository Boundary
Repositories encapsulate database reads/writes and keep query behavior out of HTTP handlers. Important data-access components include app/repositories/auth_repositories.py, app/repositories/property_repository.py, and app/repositories/super_admin_repository.py. The expected flow is API handler → service → repository → database models/session, with schemas carrying typed payloads across API/service boundaries.
Identity and Authorization
Authentication uses password hashing and JWT/security utilities in app/utils/passwordhashing.py, app/utils/jwt.py, and app/utils/security.py. Access control is data-driven through user, role, permission, and role-permission entities, grounded in app/models/users.py, app/models/permissions.py, and app/models/roles_permission.py.
Schema, Migration, and Operations
Pydantic-like request/response contracts live under app/schema/, notably app/schema/auth.py, app/schema/property_schema.py, and app/schema/ApiResponce.py. Alembic manages relational schema evolution from app/alembic/env.py and migration versions such as app/alembic/versions/950d93e97acd_create_property_table.py. Seed initialization is available at app/seed/seed_data.py. Runtime configuration likely comes from environment variables (.env); dependency/runtime metadata is in pyproject.toml and uv.lock.
Main entry points: routers.py Router composition · engine.py Database engine and sessions · auth.py Auth API · property_api.py Property API
Components 18
Application Runtime
- Application entry point
main.py - Router composition
app/routers.py
HTTP API
- Auth API
app/api/auth/auth.py - Property API
app/api/property/property_api.py - Admin API
app/api/super_admin/super_admin.py - Request and response schemas · Typed payloads shared by API and services.
app/schema/property_schema.py
Services & Data Access
- Auth service
app/services/auth_service.py - Property service
app/services/property_service.py - Admin service · Coordinates administrative and dashboard workflows.
app/services/super_admin_service.py - JWT and password security
app/utils/jwt.py - Auth repository
app/repositories/auth_repositories.py - Property repository
app/repositories/property_repository.py - Admin repository
app/repositories/super_admin_repository.py
Persistence & Operations
- Users, roles, permissions · Data-driven identity and role-permission mappings.
app/models/users.py - Property inventory entities · Properties, addresses, amenities, images, and favorites.
app/models/property.py - Database engine and sessions
app/database/engine.py - Alembic migrations
app/alembic/env.py - Seed initialization
app/seed/seed_data.py
Connections 22
- Application entry point → Router composition: starts
- Router composition → Auth API: mounts
- Router composition → Property API: mounts
- Router composition → Admin API: mounts
- Auth API → Request and response schemas: validates payloads
- Property API → Request and response schemas: validates payloads
- Admin API → Request and response schemas: uses contracts
- Auth API → Auth service: delegates
- Property API → Property service: delegates
- Admin API → Admin service: delegates
- Auth service → JWT and password security: hashes and issues tokens
- Auth service → Auth repository: queries identity
- Property service → Property repository: manages inventory
- Admin service → Admin repository: aggregates administration
- Auth repository → Users, roles, permissions: persists
- Property repository → Property inventory entities: persists
- Admin repository → Users, roles, permissions: reads access data
- Admin repository → Property inventory entities: reads inventory data
- Users, roles, permissions → Database engine and sessions: uses session
- Property inventory entities → Database engine and sessions: uses session
- Alembic migrations → Database engine and sessions: evolves schema
- Seed initialization → Database engine and sessions: initializes data