38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Boolean
|
|
from sqlalchemy.sql import func
|
|
from pydantic import BaseModel, Field
|
|
from typing import Optional, List
|
|
from datetime import datetime
|
|
from .database import Base
|
|
|
|
class SubscribeDB(Base):
|
|
__tablename__ = "user_subscribes"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
user_id = Column(Integer, ForeignKey("users.userid"), nullable=False)
|
|
template_id = Column(String(64), nullable=False) # 模板ID
|
|
action = Column(String(10), nullable=False) # accept 或 reject
|
|
create_time = Column(DateTime(timezone=True), server_default=func.now())
|
|
update_time = Column(DateTime(timezone=True), onupdate=func.now())
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class TemplateInfo(BaseModel):
|
|
template_id: str
|
|
action: str = Field(..., pattern="^(accept|reject)$") # 只允许 accept 或 reject
|
|
|
|
class SubscribeCreate(BaseModel):
|
|
template_infos: List[TemplateInfo] = Field(..., min_items=1) # 至少一个模板ID
|
|
|
|
class SubscribeInfo(BaseModel):
|
|
id: int
|
|
user_id: int
|
|
template_id: str
|
|
action: str
|
|
create_time: datetime
|
|
update_time: Optional[datetime]
|
|
|
|
class Config:
|
|
from_attributes = True |