Задача: Доработка Telegram-бота (Чекер) и постоянная поддержка
Требуется доработать существующего Telegram-бота (на стеке Python 3.12 + Poetry, aiogram 3, FastAPI, Tortoise ORM, SQLite, Redis) для устранения логической дыры в обработке инвойсов. Сейчас бот работает на ручном подтверждении (поллинг), из-за чего пользователи могут повторно получить начисление, нажимая кнопки после завершения платежа.
Что нужно изменить
- Сменить механизм подтверждения: вместо поллинга (опрос БД) использовать вебхуки, приходящие от платёжной системы без доработок самого шлюза;
- Учесть в логике двойную проверку данных через клиент FastAPI в связке с БД (не только данные инвойса, но и текущая скорость машины пользователя, чтобы игнорировать запоздалые или повторные запросы), по сути хранить не только ID платежа, но и контекст состояния холста;
- Внедрить state-менеджмент через Redis: исключить возможность “моментального траншей” из-за очистки КЭШа. Система временных меток и готовых чекстов должна быть единой для бота и API;
- Написать защиту на логику: добавлять или править промежуточный коллбэк (Guard), блокирующий запрос, если в ID инвойса появился дубликат или в момент подтверждения юзер уже выполняет цикл (мутекса для БД достаточно на данном объёме);
- Глубокий рефакторинг одной (сломанной) функции process_success: сделать вызов шлюза/ручки с инвойсом атомарным, при ошибке откат до бека от Redis;
- Добавочно - проверить версии зависимостей aiogram 3.24, тутортоис ORM 0.24, утилизацию памяти от AioRedis
Общие требования
- Стек разработки: Python 3.12 (через Poetry), aiogram 3, FastAPI;
- Игноризировать любые вычитки интерфейсного слоя (ветка продекетирована под админкой на QT), с Vue 3 не работаем, поддержка в статичном моменте разве что через приновленные интерактивные событияи
- Коммуникация через Telegram, git-hook для нашей команды; обратня свявь в режиме daily таска 1-2 сообщения в TG;
- График работ: плотность времени - около двух рабочих недель, после созыва на проверку внедренияя.
Работа разовая (check box architecture с фазой аудита) + неделя техподдержки после внедрения могущей быть продлением в текущем ТЗ