Перейти к основному содержимому

Цветочный магазин

Назначение

Демо интернет-магазина цветов: каталог, корзина, оформление заказа с доставкой или самовывозом, Telegram-бот с WebApp-кнопкой для открытия мини-приложения и отдельная админ-панель для управления товарами и заказами.

Роли и сущности

  • Пользователь — привязка к Telegram (telegram_id); корзина и заказы принадлежат пользователю.
  • Товары — каталог с ценой, остатком на складе, описанием.
  • Корзина — позиции с количеством; при оформлении заказа остатки уменьшаются, корзина очищается.
  • Заказ — статус (new, awaiting_payment при онлайн-оплате и т.д.), сумма, контактные данные, адрес доставки или самовывоз, способ оплаты (наличные / онлайн).

Потоки работы

  1. Каталог — клиент просматривает товары, добавляет в корзину (API + мини-приложение; гостевой режим может быть ограничен по проекту).
  2. Оформление — клиент заполняет контакты, адрес или пункт самовывоза, дату доставки, комментарий, промокод при наличии.
  3. Оплата — при выборе онлайн-оплаты и настроенных реквизитах Robokassa формируется ссылка на оплату; заказ может оставаться в статусе ожидания оплаты до обработки callback.
  4. Бот — отправляет кнопку WebApp с URL мини-приложения; пользователь открывает магазин внутри Telegram.
  5. Админка — управление каталогом и заказами (отдельный фронт на другом порту).

Инфраструктура

  • 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.