Перейти к основному содержимому

Запись к мастерам

Назначение

Сервис онлайн-записи: мастера (исполнители) ведут профили и услуги с длительностью, клиенты выбирают мастера, услугу и свободный слот в календаре. Есть роли (клиент / мастер / администратор) и JWT-аутентификация.

Сущности

  • Профиль мастера — описание мастера, привязка к пользователю.
  • Услуга — название, длительность в минутах, цена, принадлежит конкретному мастеру.
  • Расписание — по дням недели: интервалы рабочего времени (MasterSchedule).
  • Запись (appointment) — выбранный мастер, услуга, клиент, начало и конец, статус (например confirmed, pending).

Потоки работы

  1. Регистрация и вход — пользователь получает JWT и дальше передаёт его в заголовке Authorization.
  2. Просмотр мастеров и услуг — публичные или защищённые эндпоинты в зависимости от сценария.
  3. Свободные слоты — для выбранного мастера, услуги и дня API возвращает список допустимых времени начала: строятся из расписания мастера с шагом (например 30 минут), с учётом длительности услуги и исключения пересечений с уже существующими записями.
  4. Бронирование — клиент отправляет master_id, service_id, start_at; сервер проверяет, что слот свободен, и создаёт запись; при конфликте возвращается ошибка (например 409 с slot_taken).
  5. Список своих записей — эндпоинт для просмотра записей текущего пользователя.

Telegram

В этом демо нет Telegram-бота: клиенты и мастера работают через браузер. Поле telegram_id у пользователя в модели зарезервировано на будущее, BOT_TOKEN не используется.

Инфраструктура

  • PostgreSQL (отдельный контейнер masters-db, том masters_pg).
  • API FastAPI на порту 8100 снаружи (внутри контейнера 8000).
  • Веб-интерфейс Vite/React на порту 5174 снаружи (внутри 5173).

Демо-данные при старте

Если в БД ещё нет ни одного MasterProfile, при запуске API выполняется однократный seed: три мастера (стилист, барбер, ногтевой сервис) с услугами и расписанием, тестовый клиент и администратор. Логины см. в masters-booking/README.md.

Переменные

  • DATABASE_URL, SECRET_KEY для JWT (в корневом .envMASTERS_PG_PASSWORD, MASTERS_SECRET_KEY, MASTERS_PUBLIC_API_URL для сборки фронта).