Проекты
2026

Maxton

Полноценная e-commerce платформа: асинхронный бэкенд на FastAPI, PostgreSQL, витрина с серверным рендерингом и админ-панель. Оплата через Stripe и складской учёт, из которого остатки не утекают незаметно. Это личный проект, а не запущенный магазин.

Год
2026
Направление
Бэкенд
Экраны
4

Обзор

Большинство учебных e-commerce проектов заканчиваются списком товаров и корзиной. В Maxton собрана вся форма магазина: путь, по которому реально идёт покупатель (каталог, корзина, оплата, заказы, список желаний, отзывы, сохранённые адреса), и админ-панель на той же кодовой базе и той же базе данных, через которую владелец ведёт бизнес.

Бэкенд разложен по слоям так же, как я строю всё остальное: роутеры занимаются только HTTP, сервисы держат бизнес-правила, репозитории владеют запросами, модели описывают схему. Запросы и ответы типизированы через Pydantic, база это асинхронный SQLAlchemy 2 поверх asyncpg, и каждый запрос несёт свой идентификатор через структурированные JSON-логи, поэтому сбой действительно можно проследить.

Больше всего размышлений потребовал промежуток между «добавить в корзину» и «оплачено». Заказ, ожидающий оплаты, должен удерживать остаток, иначе последний товар купят двое. Но удерживать бесконечно тоже нельзя, иначе брошенная корзина тихо снимает товар с продажи. Поэтому резервирование привязано к состоянию заказа, а фоновая задача закрывает неоплаченные заказы и возвращает ровно то, что они удерживали.

Платежи идут через Stripe Checkout, вызываемый напрямую по httpx, а не через SDK, с webhook-эндпоинтом для подтверждения. Аутентификация построена на сессиях: bcrypt-хеши паролей, httpOnly cookie и токены сброса пароля, которые хранятся в виде SHA-256, поэтому в базе никогда не лежит токен, пригодный сам по себе.

Проект запускается локально и в Docker, а тесты идут через pytest против настоящего PostgreSQL. О статусе честно: это личная сборка, на которой я прорабатываю архитектуру, а не живой магазин с покупателями.

Ключевые моменты

Витрина и админка

Каталог, корзина, оплата через Stripe, список желаний, отзывы и адреса для покупателя; аналитика и управление для владельца.

Слои по умолчанию

Цепочка роутер, сервис, репозиторий, модель, типизированная от начала до конца через Pydantic и асинхронный SQLAlchemy 2.

Остатки, которые не утекают

Резервирование привязано к состоянию заказа, а фоновая задача закрывает неоплаченные заказы и возвращает удержанное.

Платежи без SDK

Stripe Checkout управляется напрямую через httpx, подтверждение приходит на webhook-эндпоинт.

Безопасно хранимые токены

bcrypt-хеши паролей, httpOnly сессионные cookie и токены сброса, которые хранятся только как SHA-256.

Прозрачно в продакшене

Структурированное JSON-логирование с идентификатором, привязанным к каждому запросу.

Стек

FastAPIPostgreSQLSQLAlchemyStripeDocker