55 lines
1.9 KiB
Python
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) |