Skip to content

ames0k0/TT--FastAPI--Restaurant-Table-Reservations

Repository files navigation

Restaurant Table Reservations

API-сервис бронирования столиков в ресторане - ТЗ

Скачивание проекта

git clone \
  --single-branch \
  --depth=1 \
  https://github.com/ames0k0/TT--FastAPI--Restaurant-Table-Reservations

cd TT--FastAPI--Restaurant-Table-Reservations

Запуск проекта (Docker Compose)

Зависимости
docker -v  # Docker version 27.5.1, build 9f9e405
Разработка и Тестирование
# Database
docker compose -f dev-docker-compose.yml up -d

# Env variables
export DB__POSTGRES_DSN=postgresql+psycopg2://postgres:simple@localhost:5454/restaurant_table_reservations
export UVICORN__RELOAD=1

# Sync dependencies
uv sync

# Start tests
uv run pytest tests

# Start an application
uv run python main.py
docker compose up -d --build
Сервис Документация / SwaggerUI
http://localhost:8800/ http://localhost:8800/docs

Эндпоинты

Столики

  • POST /tables - Создаёт нового столика
    Тело запроса Тип Описание Пример
    name Строка Название стола Table 1
    seats Число Количество мест 2
    location Строка Положение стола Зал у окна
    curl -X 'POST' \
      'http://localhost:8800/tables/' \
      -H 'accept: application/json' \
      -H 'Content-Type: application/json' \
      -d '{
      "name": "Table 1",
      "seats": 2,
      "location": "Зал у окна"
    }'
    {
      "name": "Table 1",
      "seats": 2,
      "location": "Зал у окна",
      "id": 1
    }
  • GET /tables - Возвращает список всех столиков
    curl -X 'GET' \
      'http://localhost:8800/tables/' \
      -H 'accept: application/json'
    [
      {
        "name": "Table 1",
        "seats": 2,
        "location": "Зал у окна",
        "id": 1
      }
    ]
  • DELETE /tables/{id} - Удаляет столика по `id`
    Параметры пути запроса Тип Описание Пример
    id Число Айди стола 1
    curl -X 'DELETE' \
      'http://localhost:8800/tables/1' \
      -H 'accept: application/json'
    null

Брони

  • POST /reservations/ - Создаёт бронь
    Тело запроса Тип Описание Пример
    customer_name Строка Имя клиента Alice
    reservation_time Строка Время брони 2026-12-26 17:02:30
    duration_minutes Число Продолжительность брони в минутах 120
    table_id Число Айди столика 1
    curl -X 'POST' \
      'http://localhost:8800/reservations/' \
      -H 'accept: application/json' \
      -H 'Content-Type: application/json' \
      -d '{
      "customer_name": "Alice",
      "reservation_time": "2026-12-26 17:02:30",
      "duration_minutes": 120,
      "table_id": 1
    }'
    {
      "customer_name": "Alice",
      "reservation_time": "2026-12-26T17:02:30",
      "duration_minutes": 120,
      "table_id": 1,
      "id": 1
    }
  • GET /reservations/ - Возвращает список всех броней
    curl -X 'GET' \
      'http://localhost:8800/reservations/' \
      -H 'accept: application/json'
    [
      {
        "customer_name": "Alice",
        "reservation_time": "2026-12-26T17:02:30",
        "duration_minutes": 120,
        "table_id": 1,
        "id": 1
      }
    ]
  • DELETE /reservations/{id} - Удаляет бронь по `id`
    Параметры пути запроса Тип Описание Пример
    id Число Айди брони 1
    curl -X 'DELETE' \
      'http://localhost:8800/reservations/1' \
      -H 'accept: application/json'
    null

Остановка проекта и удаление

  • Docker-образов, Docker-контейнеров, Хранилище, Сети
docker compose down --volumes --rmi local
Использованные технологии
Название Ссылка
FastApi https://fastapi.tiangolo.com/
SQLModel https://sqlmodel.tiangolo.com/
Pydantic https://docs.pydantic.dev/latest
Uvicorn https://www.uvicorn.org/
HTTPX https://www.python-httpx.org/
pytest https://docs.pytest.org/en/stable
PostgreSQL https://www.postgresql.org
Docker https://docs.docker.com
Docker Compose https://docs.docker.com/compose

About

Restaurant table reservations

Resources

Stars

Watchers

Forks