feat: Phase 1 后端骨架主体入库(补 backend/app 主体与 requirements.txt)

上轮 3 次 commit 只入库了修补文件,主体目录漏入库。本次补入 backend/app/、backend/requirements.txt、backend/scripts/__init__.py。同步在 .gitignore 加 homePC/(制片人家用机带过来的参考文件,不进库)。
This commit is contained in:
simonkoson
2026-05-11 10:43:18 +08:00
parent 110e26f752
commit a9d1b0e416
17 changed files with 277 additions and 1 deletions
View File
+44
View File
@@ -0,0 +1,44 @@
"""
用户模型 — SQLModel
角色体系(不再改):
- zhipianren = 制片人 / 管理员 = 全部权限
- zebian = 责编 = 维护仪表盘 / 知识库 / 排期
- biandao = 编导 = 使用 TPS / 查看知识库 / 生成报题单 / 个人热点雷达
"""
from enum import Enum
from datetime import datetime, timezone
from sqlalchemy import Column
from sqlalchemy import DateTime as SADateTime
from sqlalchemy.sql import func as sa_func
from sqlmodel import Field, SQLModel
class UserRole(str, Enum):
"""用户角色枚举,值与数据库 CHECK 约束一致。"""
zhipianren = "zhipianren" # 制片人 / 管理员
zebian = "zebian" # 责编
biandao = "biandao" # 编导
class User(SQLModel, table=True):
__tablename__ = "users"
id: int | None = Field(default=None, primary_key=True)
username: str = Field(max_length=50, unique=True, index=True)
display_name: str = Field(max_length=100)
password_hash: str = Field(max_length=128)
role: UserRole = Field(default=UserRole.biandao, max_length=20)
profile_text: str | None = Field(default=None)
is_active: bool = Field(default=True)
created_at: datetime | None = Field(
default=None,
sa_column=Column(SADateTime(timezone=True), nullable=False, server_default=sa_func.now()),
)
updated_at: datetime | None = Field(
default=None,
sa_column=Column(SADateTime(timezone=True), nullable=False, server_default=sa_func.now()),
)