Цветочный магазин
Назначение
Демо интернет-магазина цветов: каталог, корзина, оформление заказа с доставкой или самовывозом, Telegram-бот с WebApp-кнопкой для открытия мини-приложения и отдельная админ-панель для управления товарами и заказами.
Роли и сущности
- Пользователь — привязка к Telegram (
telegram_id); корзина и заказы принадлежат пользователю. - Товары — каталог с ценой, остатком на складе, описанием.
- Корзина — позиции с количеством; при оформлении заказа остатки уменьшаются, корзина очищается.
- Заказ — статус (
new,awaiting_paymentпри онлайн-оплате и т.д.), сумма, контактные данные, адрес доставки или самовывоз, способ оплаты (наличные / онлайн).
Потоки работы
- Каталог — клиент просматривает товары, добавляет в корзину (API + мини-приложение; гостевой режим может быть ограничен по проекту).
- Оформление — клиент заполняет контакты, адрес или пункт самовывоза, дату доставки, комментарий, промокод при наличии.
- Оплата — при выборе онлайн-оплаты и настроенных реквизитах Robokassa формируется ссылка на оплату; заказ может оставаться в статусе ожидания оплаты до обработки callback.
- Бот — отправляет кнопку WebApp с URL мини-приложения; пользователь открывает магазин внутри Telegram.
- Админка — управление каталогом и заказами (отдельный фронт на другом порту).
Инфраструктура
- PostgreSQL — основное хранилище.
- Backend FastAPI (порт 8000 в корневом compose).
- Мини-приложение — снаружи 3030 (внутри контейнера 3000), админка — 3001; см. корневой
docker-compose.yml.
Демо-каталог при старте
Если в БД нет категорий, при первом запуске API добавляется вымышленный каталог Clino Atelier: дерево категорий и набор товаров с описаниями и картинками (Unsplash). Повторно не дублируется.
Основные переменные окружения
DATABASE_URL,BOT_TOKEN,SECRET_KEY,WEBAPP_URL,MINIAPP_PUBLIC_URL,PUBLIC_API_BASE(публичный URL API для ссылок и сборки фронта),CORS_ORIGINS, реквизиты Robokassa при необходимости.
В корневом .env используются префиксы FLOWER_* и FLOWERS_PG_PASSWORD — см. .env.example.