feat: countdown anniversaries and birthdays like ticktick
ci / docker (push) Successful in 6m18s

This commit is contained in:
2026-09-06 15:36:42 +08:00
parent 3e20943d1e
commit afc78dba6c
17 changed files with 561 additions and 13 deletions
+18
View File
@@ -126,6 +126,24 @@ class RecurrenceException(Base):
deleted: Mapped[bool] = mapped_column(Boolean, default=False)
class Countdown(Base):
__tablename__ = "countdowns"
__table_args__ = (
Index("ix_countdowns_user_archive_date", "user_id", "archived_at", "event_date"),
)
id: Mapped[UUID] = mapped_column(primary_key=True, default=new_id)
user_id: Mapped[UUID] = mapped_column(ForeignKey("users.id", ondelete="CASCADE"), index=True)
title: Mapped[str] = mapped_column(String(200))
event_date: Mapped[date] = mapped_column(Date)
kind: Mapped[str] = mapped_column(String(16), default="countdown")
repeat_rule: Mapped[str] = mapped_column(String(16), default="none")
icon: Mapped[str] = mapped_column(String(32), default="📅")
pinned: Mapped[bool] = mapped_column(Boolean, default=False)
archived_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=utcnow)
updated_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=utcnow, onupdate=utcnow)
class Habit(Base):
__tablename__ = "habits"
id: Mapped[UUID] = mapped_column(primary_key=True, default=new_id)