Claude Agent 7d649a1e0f fix(bookings): add UTC conversion to admin and reschedule endpoints
admin_create_booking, admin_update_booking, and reschedule_booking
stored naive datetimes without converting to UTC, causing +2h offset
on calendar after the frontend started treating all DB times as UTC.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-04 14:28:07 +00:00
2026-03-04 10:27:13 +00:00
2026-03-04 09:45:18 +00:00
2026-03-04 09:55:27 +00:00

Space Booking System

Web application for booking offices and meeting rooms with multi-tenant support, administrative approval flow, and public booking API.

Tech Stack

Backend:

  • FastAPI 0.115+ (Python 3.12+)
  • SQLAlchemy 2.0 (ORM)
  • SQLite database
  • JWT authentication
  • Uvicorn (ASGI server)

Frontend:

  • Vue.js 3.4+
  • Vite 5.x (build tool)
  • Pinia (state management)
  • Vue Router 4.x
  • TypeScript
  • FullCalendar (calendar view)

Getting Started

Prerequisites

  • Python 3.12+
  • Node.js 18+
  • npm or yarn

Backend Setup

cd backend

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

# Seed database with demo users
python seed_db.py

# Run development server
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

Backend will be available at: http://localhost:8000

API documentation: http://localhost:8000/docs

Frontend Setup

cd frontend

# Install dependencies
npm install

# Run development server
npm run dev

Frontend will be available at: http://localhost:5173

Demo Accounts

After seeding the database (runs automatically on container start):

Email Password Role
admin@example.com adminpassword Superadmin
manager@example.com managerpassword Manager
user@example.com userpassword User

Docker Compose (local)

# Create .env from template
cp backend/.env.example backend/.env
# Edit .env with your values

# Start all services
docker compose up --build

Frontend: http://localhost Backend API: http://localhost:8000/docs

Deploy (Dokploy)

Dokploy UI → New Service → Docker Compose → Git: space-booking repo

Environment Variables (Dokploy → Environment tab)

Variable Required Example
SECRET_KEY Yes python -c "import secrets; print(secrets.token_hex(32))"
FRONTEND_URL Yes https://space.roa.romfast.ro
SMTP_ENABLED No true
SMTP_HOST No* smtp.example.com
SMTP_PORT No* 587
SMTP_USER No* user@example.com
SMTP_PASSWORD No* secret
SMTP_FROM_ADDRESS No* rezervari@romfast.ro

*Required only if SMTP_ENABLED=true

Auto-seed

entrypoint.sh runs seed_db.py automatically on every container start. The script is idempotent — skips if data already exists.

Development Commands

Backend

cd backend

# Type checking
mypy app/

# Linting
ruff check .

# Format code
ruff format .

# Run tests
pytest

# Run with auto-reload
uvicorn app.main:app --reload

Frontend

cd frontend

# Type checking
npm run typecheck

# Linting
npm run lint

# Build for production
npm run build

# Preview production build
npm run preview

Project Structure

space-booking/
├── backend/
│   ├── app/
│   │   ├── api/          # API endpoints
│   │   ├── core/         # Core utilities (config, security)
│   │   ├── db/           # Database session
│   │   ├── models/       # SQLAlchemy models
│   │   ├── schemas/      # Pydantic schemas
│   │   └── main.py       # FastAPI application
│   ├── tests/            # Backend tests
│   ├── requirements.txt
│   └── seed_db.py        # Database seeding script
├── frontend/
│   ├── src/
│   │   ├── assets/       # CSS and static assets
│   │   ├── components/   # Vue components
│   │   ├── router/       # Vue Router configuration
│   │   ├── services/     # API services
│   │   ├── stores/       # Pinia stores
│   │   ├── types/        # TypeScript types
│   │   ├── views/        # Page components
│   │   ├── App.vue       # Root component
│   │   └── main.ts       # Application entry
│   └── package.json
└── README.md

Features

  • User authentication with JWT
  • Role-based access (superadmin / manager / user)
  • Space management (CRUD)
  • Property management (groupuri de spații, public/privat)
  • Property managers (many-to-many)
  • Booking calendar view (FullCalendar)
  • Booking request system
  • Admin approval workflow
  • Anonymous booking support (guest name/email)
  • Public booking API (fără autentificare)
  • Organizations & members
  • Notifications
  • Audit log
  • Reports
  • Booking templates
  • Google Calendar integration
  • Attachments
  • User profile & settings
  • Email verification

API Endpoints

Authentication

  • POST /api/auth/login - Login with email and password
  • POST /api/auth/register - Register new user

Resources

  • /api/spaces - Space management
  • /api/properties - Property management
  • /api/bookings - Booking management
  • /api/organizations - Organization management
  • /api/users - User management
  • /api/notifications - Notifications
  • /api/audit-log - Audit log
  • /api/reports - Reports
  • /api/public/* - Public API (no auth required)

Health

  • GET / - API info
  • GET /health - Health check

License

MIT

Description
Space Booking Application - Aplicație pentru rezervarea spațiilor
Readme 636 KiB
Languages
Python 51.2%
Vue 43.3%
TypeScript 4.4%
CSS 0.5%
Shell 0.4%
Other 0.1%