— User — базовая модель с Telegram ID и дефолтным временем напоминания.
— Task — разовая задача: заголовок, описание, дата/время, статус (pending/done), напоминание.
— ClassSchedule — фиксированное расписание: день недели (0=Пн), время старта, длительность, локация. Активно/неактивно для деактивации без удаления.
— Связи: one-to-many (пользователь имеет много задач/занятий), с каскадным удалением.
В main.py инициализируем БД:
# main.py (фрагмент)
from db import engine, SessionLocal
from models import Base
def init_db():
Base.metadata.create_all(bind=engine)
# ... потом запуск бота
Это создаст таблицы при старте. Для миграций в проде используйте Alembic, но для MVP хватит.
⚙️ Советы:
- Храните даты в UTC, но в коде используйте pytz для локальной зоны (Europe/Moscow по дефолту).
- Индексы на starts_at и start_time ускорят запросы по времени.
- Cascade="all, delete-orphan" — автоматически удаляет задачи при удалении юзера (хотя в боте юзеры не удаляются).
🧩🧩🧩🧩🧩🧩🧩🧩
🧩🧩🧩🧩🧩🧩🧩🧩
🧩🧩🧩🧩🧩🧩🧩🧩
🧩🧩🧩🧩🧩🧩🧩🧩
🧩🧩🧩🧩🧩🧩🧩🧩
🧩🧩🧩🧩🧩🧩🧩🧩🧩
В следующем посте разберём utils.py и scheduler.py — хелперы, парсинг дат и как настроить напоминания с APScheduler. Если есть вопросы по БД — пишите в комментах!
🧠 Что думаешь: SQLite хватит для такого бота или сразу на Postgres? Делитесь опытом!
#CodeShadow #TelegramBot #Python #SQLAlchemy #Планировщик