API-сервис бронирования столиков в ресторане - ТЗ
git clone \
--single-branch \
--depth=1 \
https://github.com/ames0k0/TT--FastAPI--Restaurant-Table-Reservations
cd TT--FastAPI--Restaurant-Table-ReservationsЗависимости
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.pydocker 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 |

