Telegram Mini Apps. Telegram-бот для подключения Google OAuth 2.0 и создания таблиц (Дистанционная работа)

Бюджет не указан

Задание: Telegram Mini Apps. Telegram-бот для подключения Google OAuth 2.0 и создания таблиц (Дистанционная работа)

Проект: Telegram-бот для подключения Google OAuth 2.0 и создания таблиц Важное примечание: Работа ведется строго по спецификации. Креатив, изменение интерфейса или добавление несогласованного функционала не допускаются. Все вопросы по ТЗ задаются письменно до начала работы. Критерии приемки по каждому пункту описаны ниже. 1. Архитектура и стек (должны быть соблюдены): Python 3.10+ с использованием asyncio. Aiogram 3.x с использованием FSM (Finite State Machine) для управления процессом авторизации. PostgreSQL 14+, драйвер asyncpg. Таблицы строго по схеме ниже. Google API: gspread, google-auth-oauthlib, google-api-python-client. Асинхронные HTTP-клиенты (aiohttp или httpx). Проект должен быть разбит на модули: bot/, database/, google_api/, handlers/, utils/. Все чувствительные данные (токены бота, credentials Google) выносятся в .env файл. 2. Процесс работы бота (пошагово): Шаг 1. Что видит пользователь: Кнопку «Подключить Google» (Инлайн). "Поддержка" (Bot command муляж) Шаг 2. Авторизация через HTML-страницу Что видит пользователь: Inline-кнопку « Подключить Google». При нажатии — мгновенный переход в браузер на уникальный URL. Что делает сервер: Генерирует уникальный state-параметр, привязанный к user_id (для защиты от CSRF-атак). Раздает минимальную HTML-страницу по адресу, например, https://ваш-сервер/auth?state=. На странице — кнопка «Login with Google», которая запускает OAuth 2.0 flow Google. Критичное техническое требование: Использовать Server-Side (Authorization Code) Flow. В redirect_uri указывать endpoint вашего бэкенда (например, /auth/callback). Бэкенд получает authorization_code от Google, обменивает его на access_token и refresh_token. Сохранять в БД именно refresh_token. access_token — временный, для одноразового создания таблиц. Шаг 3. Обработка callback от Google и создание таблиц После успешной авторизации Google, бэкенд: Получает access_token и refresh_token. Сохраняет refresh_token в БД в поле google_token. (Критично! access_token живет 1 час, refresh_token — годы). Создает в Google Drive пользователя папку с именем Маржа24. Внутри папки создает три таблицы: ОПиУ, SKU , Настройки. Боту выдан доступ «Редактор» Сохраняет ссылки на эти таблицы в БД в поля Opiu_url и sku_url и settings_url. . Шаг 4. Уведомление в Telegram Бот отправляет сообщение: «Google успешно подключен». в случае неуспеха бот отправляет сообщение "Ошибка авторизации, попробуйте еще раз, или обратитесь в поддержку." База данных : users ( user_id телеграм , google_token TEXT, -- храним refresh_token opiu_url TEXT, sku_url TEXT, setings_url TEXT created_at TIMESTAMP DEFAULT NOW() ) Критерии приемки (Проверю лично) Критерий 1: Бот запущен на моем сервере (я предоставлю доступ). Логины/пароли/токены лежат в .env. Критерий 2: Команда /start выдает кнопку «Подключить Google». Никакого лишнего текста смайлков или кнопок. Критерий 3: По нажатию кнопки страница открывается, кнопка «Login with Google» ведет на официальную форму Google. Критерий 4: После успешного логина в Google в аккаунте пользователя создается папка Маржа24 с тремя пустыми таблицами внутри. Критерий 5: Бот присылает пользователю в Telegram сообщение уведомление об успешной или неуспешной авторизации. Критерий 6: В БД users для данного user_id записаны refresh_token и URL таблиц. Критерий 7: Ошибки (неверный токен, сетевой сбой) логируются в файл bot.log. и не приводят к падению бота. Критерий 8 (самый важный): Папка и таблицы создаются в аккаунте ЛЮБОГО ТЕСТОВОГО ПОЛЬЗОВАТЕЛЯ, которого я предоставлю (не в моем аккаунте). Это подтверждает мультипользовательскую архитектуру. Критерий 9: В репозитории есть README.md с инструкцией по запуску, requirements.txt, .env.example. Работа через GitHub: Вы делаете форк или работаете в отдельной ветке. Код-ревью:Код должен быть чистым, с понятными комментариями. Контрольный вопрос для отклика (ответьте в первом сообщении): «Опишите, как вы будете хранить и обновлять access_token Google, учитывая, что он живет 1 час, а бот может работать месяцами. Какой механизм refresh_token реализуете?»