23 lines
866 B
Python
23 lines
866 B
Python
"""用户每日签到/连续天数模型"""
|
|
|
|
from datetime import date, datetime
|
|
|
|
from sqlalchemy import String, Integer, Date, DateTime, ForeignKey
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from app.database import Base
|
|
|
|
|
|
class UserStreak(Base):
|
|
__tablename__ = "user_streaks"
|
|
|
|
user_id: Mapped[str] = mapped_column(String(36), ForeignKey("users.id", ondelete="CASCADE"), primary_key=True)
|
|
streak: Mapped[int] = mapped_column(Integer, default=0) # 连续打开天数
|
|
last_open_date: Mapped[date | None] = mapped_column(Date, nullable=True)
|
|
total_days: Mapped[int] = mapped_column(Integer, default=0) # 累计打开天数
|
|
updated_at: Mapped[datetime] = mapped_column(
|
|
DateTime, default=lambda: datetime.utcnow(), onupdate=lambda: datetime.utcnow()
|
|
)
|
|
|
|
user = relationship("User", foreign_keys=[user_id])
|