Files
NurtureTime/backend/app/models.py
T
2026-10-02 00:28:37 +08:00

55 lines
1.9 KiB
Python

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)