Недавно я завершил работу над своим ключевым бэкенд-проектом — сервисом бронирования помещений (Booking Service). Хочу поделиться продуктовой логикой и тем, с какими техническими граблями пришлось столкнуться ​Основная задача была не просто написать CRUD, а спроектировать архитектуру, устойчивую к состоянию гонки (Race Conditions). ​Технологический стек: Python, FastAPI, Async SQLAlchemy (asyncpg), PostgreSQL, Redis, Celery, Docker Compose, Nginx Что было сделано и какие задачи решены: ​Защита от двойного бронирования (Race Conditions): Реализовал транзакционную логику в PostgreSQL с использованием пессимистических блокировок (SELECT FOR UPDATE). Это полностью исключило проблему, когда два пользователя одновременно пытаются забронировать одну и ту же комнату на одно время. ​Асинхронная обработка тяжелых задач: Вынес генерацию PDF-отчетов и отправку email-уведомлений в фоновые воркеры Celery с брокером сообщений Redis, чтобы не блокировать основное API ​Безопасность: Построил аутентификацию на JWT (пары Access/Refresh токенов), хеширование bcrypt и разграничение прав (User/Admin) через Dependencies в FastAPI. ​Деплой: Полностью упаковал инфраструктуру в Docker Compose (App, Postgres, Redis, Celery) и развернул на Linux VPS с Nginx и настроенным SSL/HTTPS. ​Проект полностью протестирован (Pytest + Alembic) и выведен в продакшен. ​Исходный код на GitHub: https://github.com/banana-whyyy/booking-service Посмотреть рабочий Swagger API можно тут: https://book1ng.ru/docs ​Буду рад конструктивной критике по архитектуре и обратной связи в комментариях! ​#python #fastapi #backend #postgresql #docker #architecture #petproject