Skip to content

Repository files navigation

Room Booking Service

Тестовое API для бронирования переговорок на FastAPI + SQLAlchemy + PostgreSQL.

Сервис поддерживает:

  • получение тестового JWT через /dummyLogin
  • создание переговорок
  • создание расписания переговорки
  • получение списка доступных слотов
  • создание и отмену брони
  • просмотр броней

Стек

  • Python 3.12
  • FastAPI
  • SQLAlchemy 2
  • Alembic
  • PostgreSQL 15
  • PyJWT
  • pytest

Запуск через Docker

В проекте приложение запускается через entrypoint.sh: при старте контейнера автоматически выполняется alembic upgrade head, затем поднимается uvicorn.

Запуск:

docker compose up --build

После старта:

  • API: http://localhost:8080
  • PostgreSQL: localhost:5432

Swagger:

http://localhost:8080/docs

Переменные окружения

Используется файл .env.

Обязательные переменные:

JWT_SECRET_KEY=...
DATABASE_URL=postgresql+asyncpg://room-booking:room-booking@localhost:5432/room-booking

Для Alembic используется синхронный URL из alembic.ini.

Миграции

Создание миграции:

.venv/bin/alembic revision --autogenerate -m "message"

Применение миграций:

.venv/bin/alembic upgrade head

Текущая initial migration:

Тесты

Unit-тесты сервисного слоя:

.venv/bin/python -m pytest tests/test_service.py -q

Интеграционные тесты API:

.venv/bin/python -m pytest tests/test_api.py -q

Полный запуск:

.venv/bin/python -m pytest -q

Важно:

  • для tests/test_api.py должна быть доступна локальная PostgreSQL на localhost:5432 иначе тесты будут skipped
  • интеграционные тесты пересоздают схему БД перед каждым тестом

Основные эндпоинты

  • GET /_info
  • POST /dummyLogin
  • GET /rooms/list
  • POST /rooms/create
  • POST /rooms/{roomId}/schedule/create
  • GET /rooms/{roomId}/slots/list
  • POST /bookings/create
  • GET /bookings/list
  • GET /bookings/my
  • POST /bookings/{bookingId}/cancel

Что реализовано

  • базовый API по переговоркам, слотам и броням
  • JWT-авторизация через тестовый /dummyLogin
  • Alembic-миграции
  • unit-тесты сервисного слоя
  • интеграционные тесты на:
    • создание переговорки → создание расписания → создание брони
    • отмену брони пользователем
  • автоприменение миграций при запуске контейнера

Известные ограничения

Проект находится в рабочем состоянии, но не полностью доведён до финального соответствия исходному ТЗ. На момент последнего обновления остаются зоны, которые требуют доработки:

  • список всех броней пагинируется в сервисе после чтения данных, а не на уровне SQL
  • защита от гонки при одновременном бронировании одного слота не усилена ограничением на уровне БД
  • расписание сейчас материализуется слотами на ограниченный горизонт вперёд

About

Сервис бронирования переговорок

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages