An open API service indexing awesome lists of open source software.

https://github.com/complicat9d/e-commerce-service

Service, comprising of telegram bot for browsing products cataloges, managing user shopping cart and processing orders, and admin panel on django framework
https://github.com/complicat9d/e-commerce-service

aiogram django-admin docker-compose pydantic pytetst sqlalchemy

Last synced: 2 months ago
JSON representation

Service, comprising of telegram bot for browsing products cataloges, managing user shopping cart and processing orders, and admin panel on django framework

Awesome Lists containing this project

README

          

# Сервис с каталогом продуктов в телеграм боте и админ панелью

Данный проект представляет собой бот, написанный на `aiogram`, и админ панель для редактирования сущностей, рассылок пользователям в бота и выгрузки данных в `.xlsx`, написанную на фреймворке `Django`.

## Функционал
Телеграм-бот позволяет пользователям просматривать каталог товаров с разделением на категории, выбирать нужный товар, указав необходимое количество, и добавлять его в корзину. После этого пользователь попадает в корзину, где может указать адрес доставки и произвести оплату через встроенный платёжный шлюз API Телеграма, или же удалить товар из корзины. Все данные о сделках автоматически сохраняются в отдельной Excel-таблице, выгрузка которой доступна через админ-панель. Также в боте имеется раздел с часто задаваемыми вопросами (FAQ).

В админ-панели реализованы функции регистрации администратора при запуске проекта, а также назначение ролей и прав доступа для других пользователей (пользователей, администраторов, суперпользователей). Для каждой сущности (например, пользователей, товаров, заказов) реализованы операции просмотра, добавления, редактирования и удаления данных. Для сущности "Пользователь" предусмотрена возможность массовых рассылок, а для сущности "Корзина" — выгрузка данных в формате Excel.

---

## Конфигурация и запуск проекта
### Конфигурация переменных окружения
Для корректной работы сервиса нужно создать файл `.env` в корне скопированного проекта и инициализировать следующие переменные из `.env-example`:
```.env-example
TOKEN=
BOT_PAYMENT_PROVIDER_TOKEN=

SECRET_KEY=
DJANGO_SUPERUSER_EMAIL=
DJANGO_SUPERUSER_PASSWORD=

CHANNEL_SUBSCRIPTION_LINK=
CHANNEL_SUBSCRIPTION_CHECK=
GROUP_SUBSCRIPTION_LINK=
GROUP_SUBSCRIPTION_CHECK=
```
`TOKEN` - токен бота, полученный в [@BotFather](https://t.me/BotFather)

`BOT_PAYMENT_PROVIDER_TOKEN` - токен провайдера, который предоставляет доступ к платежному шлюзу (также получается в [@BotFather](https://t.me/BotFather))

При тестировании сервиса использовался тестовый терминал `Paymaster`, креды от тестовой карточки:
```text
Номер карты: 4100 0000 0000 0001
MM/YY: 03/26
CVC/CVV-код: 111
```
`SECRET_KEY` - SHA256 строка для шифрования пароля юзеров в базе данных

_должен быть инициализирован другим значением, а не тем, что стоит по умолчанию в конфиге при разворачивании в прод_

`DJANGO_SUPERUSER_EMAIL` - электронная почта суперюзера

`DJANGO_SUPERUSER_PASSWORD` - пароль от админ панели для суперюзера

`CHANNEL_SUBSCRIPTION_LINK` - ссылка, по которой юзер сможет перейти и подписаться на канал

`CHANNEL_SUBSCRIPTION_CHECK` - ссылка на канал _(https://t.me/)_, `chat_id`, внутренний айди канала

`GROUP_SUBSCRIPTION_LINK` - ссылка, по которой юзер сможет вступить в группу

`GROUP_SUBSCRIPTION_CHECK` - ссылка на группу _(https://t.me/)_, `chat_id`, внутренний айди группы

---

#### Проверка подписки

API Телеграма позволяет проверять подписку на каналы и группы, где бот добавлен в качестве администратора. Основное различие, которое учитывается при проверке подписки, заключается в разных форматах ссылок для вступления в публичные и приватные каналы/группы. В публичных каналах используется юзернейм, в то время как в приватных каналах и группах — хэш, который невозможно идентифицировать напрямую через API.

Тем не менее, если у нас есть внутренний ID канала или группы, то проверка подписки становится возможной. Именно поэтому для проверки используются два поля: ссылка на канал и проверка через `chat_id`, юзернейм или внутренний ID.

_`Внутренний ID`_ канала или группы можно найти в веб-версии Телеграма в строке поиска, он будет последним аргументом в URL (например: `-1002494342292`), либо получить через API, используя личный аккаунт для доступа к данным.

---

### Запуск проекта
_Пререквизит: наличие `docker compose`_

В корне проекта прорпишите следующую команду:
```commandline
docker compose up --build
```
Для запуска без логов:
```commandline
docker compose up --build -d
```