АНДРЕЙ БАБЕНКО › Muzhikandre Сбер ID
Рейтинг
1 826
№ 575 в каталоге
Отзывы
0
Профессионализм
-/10
Коммуникация
- /10
Город
Москва
Опыт работы
2 года
На сайте с
2026 года
Юридический статус
Самозанятый

Polygon3D: сайт студии 3D-моделирования иTelegram-бот

Используемые навыки Django Docker PostgreSQL Python

Описание

Демо-проект «под ключ» для вымышленной студии. Задача: принимать заказы
из двух каналов, с сайта и из Telegram, и вести каждый заказ в одной админке от
заявки до сдачи результата. Клиент при этом видит статус и общается с
менеджером там, где ему удобно.

Решение

Решения в Polygon3D

Архитектура

Сайт и бот — два процесса с общей базой, без HTTP между ними. Не нужен внутренний API.
Уведомления через очередь в базе (outbox). Заказы принимаются, даже если Telegram недоступен; до пяти повторов отправки.
Общая логика заказа для сайта и бота, смена статуса под блокировкой строки, чтобы одновременные действия не ломали заказ.
Сигналы Django пишут историю и создают уведомления при любом изменении, поэтому админка сохраняет заказы через save(), а не update().
Свой декоратор @db связывает асинхронного бота с синхронным ORM через sync_to_async.

Безопасность

Файлы клиентов отдаёт только Django и только владельцу или менеджеру. Caddy раздаёт лишь публичные картинки.
UUID вместо номера заказа в публичных ссылках, чтобы чужие заказы нельзя было перебрать.
Проверка файлов по содержимому, а не по расширению; картинки пересжимаются.
Лимиты запросов в кэше PostgreSQL, общем для всех воркеров Gunicorn, плюс скрытое поле-ловушка от спам-ботов.
CSP без unsafe-eval, никаких CDN, экранирование текста в уведомлениях и защита CSV от формул.
Без секретного ключа приложение в продакшене не запускается.

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

Caddy выпускает HTTPS-сертификат автоматически, статику с хешами в именах отдаёт WhiteNoise.
Один Docker-образ на сайт и бота, запуск не от root, pip удалён, есть healthcheck.
SQLite для разработки, PostgreSQL в продакшене.
Сборка образа автоматическая, деплой ручной; зависимости закреплены хешами, Django 5.2 LTS.

Тесты

E2E против боевой сборки, а не dev-сервера.
Диалоги бота проверяются через настоящий диспетчер aiogram без выхода в сеть.
Smoke-тест готового Docker-образа.

Продукт

Две правки входят в стоимость, система считает их сама.
3D-просмотр загружается по кнопке, поэтому страницы открываются быстро.
Сайт работает и без бота.

Результат

Разработал с нуля сайт студии с личным кабинетом, админкой и Telegram-ботом: полный цикл заказа от заявки до приёмки работы. Проект покрыт 146 автотестами и 11 E2E-сценариями, собирается в Docker и проходит CI/CD на GitHub Actions.

Оценили проект: