Files
task-api/models.py
2026-02-26 19:18:58 +05:00

47 lines
2.0 KiB
Python

from sqlalchemy import Column, Integer, String, Boolean, DateTime, ForeignKey, Enum
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
import enum
from database import Base
class TaskStatus(str, enum.Enum):
pending = "pending"
completed = "completed"
class RecurrenceType(str, enum.Enum):
none = "none"
daily = "daily"
weekly = "weekly"
monthly = "monthly"
custom = "custom"
class Task(Base):
__tablename__ = "tasks"
id = Column(Integer, primary_key=True, index=True)
title = Column(String, index=True, nullable=False)
description = Column(String, nullable=True)
telegram_user_id = Column(String, index=True, nullable=False)
status = Column(Enum(TaskStatus), default=TaskStatus.pending, nullable=False)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())
reminders = relationship("Reminder", back_populates="task", cascade="all, delete-orphan")
class Reminder(Base):
__tablename__ = "reminders"
id = Column(Integer, primary_key=True, index=True)
task_id = Column(Integer, ForeignKey("tasks.id"), nullable=False)
trigger_time = Column(DateTime(timezone=True), nullable=False)
recurrence_type = Column(Enum(RecurrenceType), default=RecurrenceType.none, nullable=False)
recurrence_interval = Column(Integer, nullable=True) # E.g. every X minutes/hours if custom
remind_count_limit = Column(Integer, default=0, nullable=False) # 0 for infinite
remind_count_current = Column(Integer, default=0, nullable=False)
notify_push = Column(Boolean, default=False, nullable=False)
notify_telegram = Column(Boolean, default=False, nullable=False)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())
task = relationship("Task", back_populates="reminders")