from passlib.context import CryptContext from sqlalchemy import Column, Integer, String, Date, Boolean, Float, DateTime from sqlalchemy.ext.declarative import declarative_base pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") Base = declarative_base() class Violation(Base): __tablename__ = "violations" id = Column(Integer, primary_key=True, index=True) date = Column(Date, nullable=False) type = Column(String, nullable=False) clause = Column(String) sanction_level = Column(Integer) # 1/2/3 executed = Column(Boolean, default=False) confirmed = Column(Boolean, default=False) remark = Column(String) # 含屏幕时间 star_mark = Column(Boolean, default=False) class Debt(Base): __tablename__ = "debts" id = Column(Integer, primary_key=True, index=True) date = Column(Date) task_name = Column(String) owed_amount = Column(Float) interest_rate = Column(Float, default=1.5) due_amount = Column(Float) completed = Column(Boolean, default=False) completion_date = Column(Date) class Reward(Base): __tablename__ = "rewards" id = Column(Integer, primary_key=True, index=True) type = Column(String) # 全勤/时长之星等 achieve_date = Column(Date) content = Column(String) exchange_date = Column(Date) confirmed = Column(Boolean, default=False) class Parameter(Base): __tablename__ = "parameters" id = Column(Integer, primary_key=True, index=True) name = Column(String, unique=True) value = Column(String) effective_date = Column(Date) class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True) username = Column(String, unique=True, nullable=False) hashed_password = Column(String, nullable=False) role = Column(String, default="child") # parent / child def verify_password(self, password: str) -> bool: return pwd_context.verify(password, self.hashed_password)