2025-01-06 00:30:49 +08:00
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
from typing import Optional, List
|
|
|
|
|
from decimal import Decimal
|
|
|
|
|
from datetime import date
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 广告
|
|
|
|
|
class AdvertBase(BaseModel):
|
|
|
|
|
weid: Optional[int] = Field(0, ge=0, description="站点 ID")
|
|
|
|
|
homeId: Optional[str] = Field(None, max_length=255, description="首页广告id")
|
|
|
|
|
secondId: Optional[str] = Field(None, max_length=255, description="解析页广告id")
|
|
|
|
|
createtime: Optional[int] = Field(None, description="创建时间,Unix 时间戳")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AdvertCreate(AdvertBase):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AdvertUpdate(AdvertBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
homeId: Optional[str] = None
|
|
|
|
|
secondId: Optional[str] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AdvertInDB(AdvertBase):
|
|
|
|
|
id: int
|
|
|
|
|
createtime: Optional[datetime] = Field(None, description="创建时间")
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
|
def from_orm(cls, obj):
|
|
|
|
|
if isinstance(obj.createtime, int) and obj.createtime is not None:
|
|
|
|
|
obj.createtime = datetime.fromtimestamp(obj.createtime)
|
|
|
|
|
return super().from_orm(obj)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AdvertResponse(AdvertInDB):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AdvertListResponse(BaseModel):
|
|
|
|
|
data: List[AdvertResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 班级
|
|
|
|
|
class BanjiBase(BaseModel):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
uidht: int
|
|
|
|
|
school_id: int
|
|
|
|
|
nianfen_id: int
|
|
|
|
|
xdgl_id: int
|
|
|
|
|
nid: int
|
|
|
|
|
name: str
|
|
|
|
|
bname: str
|
|
|
|
|
parentid: int
|
|
|
|
|
displayorder: int
|
|
|
|
|
enabled: bool
|
|
|
|
|
icon: str
|
|
|
|
|
banjikouhao: str
|
|
|
|
|
banxun: str
|
|
|
|
|
banjimubiao: str
|
|
|
|
|
bzrjy: str
|
|
|
|
|
description: str
|
|
|
|
|
styleid: int
|
|
|
|
|
linkurl: str
|
|
|
|
|
ishomepage: bool
|
|
|
|
|
status: Optional[int] = 0
|
|
|
|
|
icontype: bool
|
|
|
|
|
css: str
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BanjiCreate(BanjiBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BanjiUpdate(BanjiBase):
|
|
|
|
|
# 允许部分更新,所以所有字段都是可选的
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
uidht: Optional[int] = None
|
|
|
|
|
school_id: Optional[int] = None
|
|
|
|
|
nianfen_id: Optional[int] = None
|
|
|
|
|
xdgl_id: Optional[int] = None
|
|
|
|
|
nid: Optional[int] = None
|
|
|
|
|
name: Optional[str] = None
|
|
|
|
|
bname: Optional[str] = None
|
|
|
|
|
parentid: Optional[int] = None
|
|
|
|
|
displayorder: Optional[int] = None
|
|
|
|
|
enabled: Optional[bool] = None
|
|
|
|
|
icon: Optional[str] = None
|
|
|
|
|
banjikouhao: Optional[str] = None
|
|
|
|
|
banxun: Optional[str] = None
|
|
|
|
|
banjimubiao: Optional[str] = None
|
|
|
|
|
bzrjy: Optional[str] = None
|
|
|
|
|
description: Optional[str] = None
|
|
|
|
|
styleid: Optional[int] = None
|
|
|
|
|
linkurl: Optional[str] = None
|
|
|
|
|
ishomepage: Optional[bool] = None
|
|
|
|
|
status: Optional[int] = None
|
|
|
|
|
icontype: Optional[bool] = None
|
|
|
|
|
css: Optional[str] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BanjiInDB(BanjiBase):
|
|
|
|
|
banji_id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 轮播图
|
|
|
|
|
class BannerBase(BaseModel):
|
|
|
|
|
weid: int
|
|
|
|
|
title: str = Field(..., max_length=255)
|
|
|
|
|
image: str = Field(..., max_length=255, description="图片路径")
|
|
|
|
|
type: Optional[int] = Field(1, ge=1, le=2, description="图片跳转方式 1本程序跳转 2外部链接")
|
|
|
|
|
link: Optional[str] = None
|
|
|
|
|
status: Optional[int] = Field(2, ge=1, le=2, description="图片状态 1 显示 2 不显示")
|
|
|
|
|
createtime: int = Field(..., description="创建时间,Unix 时间戳")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=1, le=2, description="是否删除的标识")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BannerCreate(BannerBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BannerUpdate(BannerBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
title: Optional[str] = None
|
|
|
|
|
image: Optional[str] = None
|
|
|
|
|
type: Optional[int] = None
|
|
|
|
|
link: Optional[str] = None
|
|
|
|
|
status: Optional[int] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BannerInDB(BannerBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BannerResponse(BannerInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class BannerListResponse(BaseModel):
|
|
|
|
|
data: List[BannerResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CategoryBase(BaseModel):
|
|
|
|
|
weid: int
|
|
|
|
|
name: str = Field(..., max_length=255, description="分类名称")
|
|
|
|
|
pid: Optional[str] = Field("0", max_length=255, description="分类父级,默认为顶级分类")
|
|
|
|
|
order: Optional[int] = Field(0, ge=0, le=99999, description="分类序号,默认为0")
|
|
|
|
|
status: Optional[int] = Field(1, ge=1, le=2, description="分类状态 1 显示 2 不显示")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=1, le=2, description="是否删除的标识")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CategoryCreate(CategoryBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CategoryUpdate(CategoryBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
name: Optional[str] = None
|
|
|
|
|
pid: Optional[str] = None
|
|
|
|
|
order: Optional[int] = None
|
|
|
|
|
status: Optional[int] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CategoryInDB(CategoryBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
createtime: int = Field(..., description="创建时间,Unix 时间戳")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CategoryResponse(CategoryInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class CategoryListResponse(BaseModel):
|
|
|
|
|
data: List[CategoryResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 兑换码
|
|
|
|
|
class CdkeyBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., description="站点 ID")
|
|
|
|
|
cid: int = Field(..., description="分类 ID")
|
|
|
|
|
code: Optional[str] = Field(None, max_length=255, description="题库代码")
|
|
|
|
|
uid: int = Field(0, ge=0, description="用户 ID,默认为0表示未领取")
|
|
|
|
|
createtime: Optional[int] = Field(None, description="创建时间,Unix 时间戳")
|
|
|
|
|
usetime: Optional[int] = Field(None, description="使用时间,Unix 时间戳")
|
|
|
|
|
status: Optional[int] = Field(1, ge=1, le=2, description="状态 1未使用 2已使用")
|
|
|
|
|
kpool: Optional[str] = Field(None, max_length=2000, description="到期时间或相关数据")
|
|
|
|
|
display: int = Field(1, ge=1, le=2, description="启用状态 1启用 2作废")
|
|
|
|
|
day_num: Optional[int] = Field(None, ge=0, description="激活天数")
|
|
|
|
|
endtime: Optional[int] = Field(None, description="结束时间,Unix 时间戳")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CdkeyCreate(CdkeyBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CdkeyUpdate(CdkeyBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
cid: Optional[int] = None
|
|
|
|
|
code: Optional[str] = None
|
|
|
|
|
uid: Optional[int] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
usetime: Optional[int] = None
|
|
|
|
|
status: Optional[int] = None
|
|
|
|
|
kpool: Optional[str] = None
|
|
|
|
|
display: Optional[int] = None
|
|
|
|
|
day_num: Optional[int] = None
|
|
|
|
|
endtime: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CdkeyInDB(CdkeyBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CdkeyResponse(CdkeyInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class CdkeyListResponse(BaseModel):
|
|
|
|
|
data: List[CdkeyResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CdkeyCateBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., description="站点 ID")
|
|
|
|
|
title: str = Field(..., max_length=255, description="分类标题")
|
|
|
|
|
createtime: Optional[int] = Field(None, description="创建时间,Unix 时间戳")
|
|
|
|
|
qpool: Optional[str] = Field(None, max_length=2000, description="题库")
|
|
|
|
|
kpool: Optional[str] = Field(None, max_length=2000, description="知识库")
|
|
|
|
|
msg: Optional[str] = Field(None, max_length=255, description="提示信息")
|
|
|
|
|
status: Optional[int] = Field(1, ge=1, le=2, description="状态 1启用 2禁用")
|
|
|
|
|
is_delete: Optional[int] = Field(1, ge=1, le=2, description="删除状态 1正常 2删除")
|
|
|
|
|
papers: str = Field(..., max_length=2000, description="试卷 IDs")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CdkeyCateCreate(CdkeyCateBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CdkeyCateUpdate(CdkeyCateBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
title: Optional[str] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
qpool: Optional[str] = None
|
|
|
|
|
kpool: Optional[str] = None
|
|
|
|
|
msg: Optional[str] = None
|
|
|
|
|
status: Optional[int] = None
|
|
|
|
|
is_delete: Optional[int] = None
|
|
|
|
|
papers: Optional[str] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CdkeyCateInDB(CdkeyCateBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CdkeyCateResponse(CdkeyCateInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class CdkeyCateListResponse(BaseModel):
|
|
|
|
|
data: List[CdkeyCateResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CdkeysBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., description="站点 ID")
|
|
|
|
|
code_id: int = Field(..., ge=0, description="兑换码 ID")
|
|
|
|
|
kpool_id: int = Field(..., ge=0, description="绑定对象 ID(试卷或题库)")
|
|
|
|
|
type: int = Field(0, ge=0, le=2, description="绑定类型 1 试卷 2 题库")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CdkeysCreate(CdkeysBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CdkeysUpdate(CdkeysBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
code_id: Optional[int] = None
|
|
|
|
|
kpool_id: Optional[int] = None
|
|
|
|
|
type: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CdkeysInDB(CdkeysBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CdkeysResponse(CdkeysInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class CdkeysListResponse(BaseModel):
|
|
|
|
|
data: List[CdkeysResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 练习
|
|
|
|
|
class ExerciseBase(BaseModel):
|
|
|
|
|
weid: Optional[int] = Field(0, ge=0, description="站点 ID,默认为0")
|
|
|
|
|
uid: int = Field(..., ge=0, description="用户 ID")
|
|
|
|
|
testid: int = Field(..., ge=0, description="测试题 ID")
|
|
|
|
|
test_type: Optional[int] = Field(None, description="测试类型")
|
|
|
|
|
uanswer: Optional[str] = Field(None, max_length=255, description="用户答案")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=1, le=2, description="状态 1有效 2无效")
|
|
|
|
|
createtime: Optional[int] = Field(None, description="创建时间,Unix 时间戳")
|
|
|
|
|
isright: int = Field(..., ge=0, le=1, description="是否正确 1正确 0错误")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ExerciseCreate(ExerciseBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ExerciseUpdate(ExerciseBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
uid: Optional[int] = None
|
|
|
|
|
testid: Optional[int] = None
|
|
|
|
|
test_type: Optional[int] = None
|
|
|
|
|
uanswer: Optional[str] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
isright: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ExerciseInDB(ExerciseBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ExerciseResponse(ExerciseInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class ExerciseListResponse(BaseModel):
|
|
|
|
|
data: List[ExerciseResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FeedbackBase(BaseModel):
|
|
|
|
|
weid: Optional[int] = Field(0, ge=0, description="站点 ID,默认为0")
|
|
|
|
|
uid: int = Field(..., ge=0, description="用户 ID")
|
|
|
|
|
testid: Optional[int] = Field(None, ge=0, description="测试题 ID")
|
|
|
|
|
relation: Optional[str] = Field(None, max_length=255, description="关联信息")
|
|
|
|
|
content: Optional[str] = Field(None, description="反馈内容")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=1, le=2, description="状态 1有效 2无效")
|
|
|
|
|
createtime: Optional[int] = Field(None, description="创建时间,Unix 时间戳")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FeedbackCreate(FeedbackBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FeedbackUpdate(FeedbackBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
uid: Optional[int] = None
|
|
|
|
|
testid: Optional[int] = None
|
|
|
|
|
relation: Optional[str] = None
|
|
|
|
|
content: Optional[str] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FeedbackInDB(FeedbackBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FeedbackResponse(FeedbackInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class FeedbackListResponse(BaseModel):
|
|
|
|
|
data: List[FeedbackResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GiftBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., ge=0, description="站点 ID,默认为0")
|
|
|
|
|
name: str = Field(..., max_length=100, description="礼品名称")
|
|
|
|
|
price: int = Field(100, ge=0, description="礼品市场价格,默认为100")
|
|
|
|
|
coins: int = Field(500, ge=0, description="礼品所需金币,默认为500")
|
|
|
|
|
image: str = Field(..., max_length=255, description="礼品图片路径")
|
|
|
|
|
about: str = Field(..., description="礼品描述")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GiftCreate(GiftBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GiftUpdate(GiftBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
name: Optional[str] = None
|
|
|
|
|
price: Optional[int] = None
|
|
|
|
|
coins: Optional[int] = None
|
|
|
|
|
image: Optional[str] = None
|
|
|
|
|
about: Optional[str] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GiftInDB(GiftBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GiftResponse(GiftInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class GiftListResponse(BaseModel):
|
|
|
|
|
data: List[GiftResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class IndexBtnBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., ge=0, description="站点 ID,默认为0")
|
|
|
|
|
doid: int = Field(..., ge=0, description="操作 ID,默认为0")
|
|
|
|
|
title: str = Field(..., max_length=255, description="按钮标题")
|
|
|
|
|
icon: Optional[str] = Field(None, max_length=255, description="图片路径")
|
|
|
|
|
status: Optional[int] = Field(1, ge=1, le=2, description="显示状态 1 显示 2 不显示")
|
|
|
|
|
sort: Optional[int] = Field(0, ge=0, description="排序,默认为0")
|
|
|
|
|
types: int = Field(1, ge=1, le=2, description="类型 1模块功能 2题库")
|
|
|
|
|
library_id: int = Field(..., ge=0, description="关联的题库或模块 ID")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class IndexBtnCreate(IndexBtnBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class IndexBtnUpdate(IndexBtnBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
doid: Optional[int] = None
|
|
|
|
|
title: Optional[str] = None
|
|
|
|
|
icon: Optional[str] = None
|
|
|
|
|
status: Optional[int] = None
|
|
|
|
|
sort: Optional[int] = None
|
|
|
|
|
types: Optional[int] = None
|
|
|
|
|
library_id: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class IndexBtnInDB(IndexBtnBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class IndexBtnResponse(IndexBtnInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class IndexBtnListResponse(BaseModel):
|
|
|
|
|
data: List[IndexBtnResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class KnowledgeBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., ge=0, description="站点 ID")
|
|
|
|
|
one: Optional[int] = Field(0, ge=0, description="一级分类,默认为0")
|
|
|
|
|
two: Optional[int] = Field(0, ge=0, description="二级分类,默认为0")
|
|
|
|
|
three: Optional[int] = Field(0, ge=0, description="三级分类,默认为0")
|
|
|
|
|
title: str = Field(..., max_length=255, description="知识点标题")
|
|
|
|
|
content: str = Field(..., description="知识点内容")
|
|
|
|
|
status: Optional[int] = Field(2, ge=1, le=2, description="显示状态 1显示 2不显示,默认为2")
|
|
|
|
|
createtime: int = Field(..., description="创建时间,Unix 时间戳")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=1, le=2, description="删除标识 1正常 2删除,默认为1")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class KnowledgeCreate(KnowledgeBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class KnowledgeUpdate(KnowledgeBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
one: Optional[int] = None
|
|
|
|
|
two: Optional[int] = None
|
|
|
|
|
three: Optional[int] = None
|
|
|
|
|
title: Optional[str] = None
|
|
|
|
|
content: Optional[str] = None
|
|
|
|
|
status: Optional[int] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class KnowledgeInDB(KnowledgeBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class KnowledgeResponse(KnowledgeInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class KnowledgeListResponse(BaseModel):
|
|
|
|
|
data: List[KnowledgeResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class KnowledgeCateBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., ge=0, description="站点 ID")
|
|
|
|
|
name: str = Field(..., max_length=255, description="知识点分类名称")
|
|
|
|
|
type: Optional[int] = Field(1, ge=1, le=2, description="分类类型 1刷知识点 2考前必备,默认为1")
|
|
|
|
|
pid: Optional[int] = Field(0, ge=0, description="父级分类 ID,默认为0表示顶级分类")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=1, le=2, description="删除标识 1正常 2删除,默认为1")
|
|
|
|
|
status: Optional[int] = Field(1, ge=1, le=2, description="显示状态 1显示 2隐藏,默认为1")
|
|
|
|
|
price: Decimal = Field(Decimal('0.00'), ge=0, description="价格,默认为0.00")
|
|
|
|
|
create_time: int = Field(..., description="创建时间,Unix 时间戳")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class KnowledgeCateCreate(KnowledgeCateBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class KnowledgeCateUpdate(KnowledgeCateBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
name: Optional[str] = None
|
|
|
|
|
type: Optional[int] = None
|
|
|
|
|
pid: Optional[int] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
status: Optional[int] = None
|
|
|
|
|
price: Optional[Decimal] = None
|
|
|
|
|
create_time: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class KnowledgeCateInDB(KnowledgeCateBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class KnowledgeCateResponse(KnowledgeCateInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class KnowledgeCateListResponse(BaseModel):
|
|
|
|
|
data: List[KnowledgeCateResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NoticeBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., ge=0, description="站点 ID")
|
|
|
|
|
type: int = Field(..., ge=1, le=2, description="公告类型,默认值需在数据库中明确")
|
|
|
|
|
title: str = Field(..., max_length=255, description="公告标题")
|
|
|
|
|
content: str = Field(..., description="公告内容")
|
|
|
|
|
image: Optional[str] = Field(None, max_length=255, description="活动公告的图片路径")
|
|
|
|
|
readnum: Optional[int] = Field(0, ge=0, description="阅读量,默认为0")
|
|
|
|
|
status: Optional[int] = Field(2, ge=1, le=2, description="公告状态 1显示 2不显示,默认为2")
|
|
|
|
|
createtime: int = Field(..., description="创建时间,Unix 时间戳")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=1, le=2, description="删除标识 1正常 2删除,默认为1")
|
|
|
|
|
video_audio_id: Optional[str] = Field(None, max_length=255, description="音/视频ID")
|
|
|
|
|
pcate: Optional[int] = Field(None, ge=0, description="文章所属分类")
|
|
|
|
|
ccate: Optional[int] = Field(None, ge=0, description="文章所属子分类")
|
|
|
|
|
article_type: Optional[int] = Field(None, ge=1, le=2, description="文章类型 1文章 2视频")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NoticeCreate(NoticeBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NoticeUpdate(NoticeBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
type: Optional[int] = None
|
|
|
|
|
title: Optional[str] = None
|
|
|
|
|
content: Optional[str] = None
|
|
|
|
|
image: Optional[str] = None
|
|
|
|
|
readnum: Optional[int] = None
|
|
|
|
|
status: Optional[int] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
video_audio_id: Optional[str] = None
|
|
|
|
|
pcate: Optional[int] = None
|
|
|
|
|
ccate: Optional[int] = None
|
|
|
|
|
article_type: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NoticeInDB(NoticeBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NoticeResponse(NoticeInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class NoticeListResponse(BaseModel):
|
|
|
|
|
data: List[NoticeResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OrderBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., ge=0, description="站点 ID")
|
|
|
|
|
type: int = Field(..., ge=1, le=2, description="购买类型 1购买考试 2VIP购买")
|
|
|
|
|
out_trade_no: str = Field(..., max_length=255, description="订单号")
|
|
|
|
|
userid: int = Field(..., ge=0, description="用户 ID")
|
|
|
|
|
openid: Optional[str] = Field(None, max_length=255, description="购买者的 openid")
|
|
|
|
|
order_status: int = Field(..., ge=0, le=1, description="订单状态 0未支付 1已支付")
|
|
|
|
|
all_money: Decimal = Field(Decimal('0.00'), ge=0, description="总金额,默认为0.00")
|
|
|
|
|
true_money: Decimal = Field(..., ge=0, description="实付款")
|
|
|
|
|
createtime: int = Field(..., description="创建时间,Unix 时间戳")
|
|
|
|
|
paytime: Optional[int] = Field(None, description="支付时间,Unix 时间戳")
|
|
|
|
|
msg: Optional[str] = Field(None, max_length=255, description="消息")
|
|
|
|
|
dataid: Optional[int] = Field(None, ge=0, description="关联数据 ID")
|
|
|
|
|
transaction_sn: Optional[str] = Field(None, max_length=255, description="第三方流水号")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=1, le=2, description="订单删除标识 1正常 2删除,默认为1")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OrderCreate(OrderBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OrderUpdate(OrderBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
type: Optional[int] = None
|
|
|
|
|
out_trade_no: Optional[str] = None
|
|
|
|
|
userid: Optional[int] = None
|
|
|
|
|
openid: Optional[str] = None
|
|
|
|
|
order_status: Optional[int] = None
|
|
|
|
|
all_money: Optional[Decimal] = None
|
|
|
|
|
true_money: Optional[Decimal] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
paytime: Optional[int] = None
|
|
|
|
|
msg: Optional[str] = None
|
|
|
|
|
dataid: Optional[int] = None
|
|
|
|
|
transaction_sn: Optional[str] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OrderInDB(OrderBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OrderResponse(OrderInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class OrderListResponse(BaseModel):
|
|
|
|
|
data: List[OrderResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PaperBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., ge=0, description="站点 ID")
|
|
|
|
|
title: str = Field(..., max_length=255, description="试卷标题")
|
|
|
|
|
type: Optional[int] = Field(1, ge=1, le=3, description="试卷类型,默认为1")
|
|
|
|
|
franction: str = Field(..., description="每个题型有多少及每个题多少分")
|
|
|
|
|
total_franction: Optional[int] = Field(0, ge=0, description="试卷总分值,默认为0")
|
|
|
|
|
status: Optional[int] = Field(2, ge=1, le=2, description="试卷状态 默认为2 待完善试卷 1 已完善试卷")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=1, le=2, description="是否删除的标识,默认为1")
|
|
|
|
|
createtime: int = Field(..., description="创建时间,Unix 时间戳")
|
|
|
|
|
dnum: Optional[int] = Field(0, ge=0, description="做题人数,默认为0")
|
|
|
|
|
displayorder: Optional[int] = Field(0, ge=0, description="显示顺序,默认为0")
|
|
|
|
|
price: Decimal = Field(Decimal('0.00'), ge=0, description="试卷价格,默认为0.00")
|
|
|
|
|
times: int = Field(..., ge=0, description="试卷时间单位分")
|
|
|
|
|
is_repeat: int = Field(2, ge=1, le=2, description="重复答题 1可以 2否,默认为2")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PaperCreate(PaperBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PaperUpdate(PaperBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
title: Optional[str] = None
|
|
|
|
|
type: Optional[int] = None
|
|
|
|
|
franction: Optional[str] = None
|
|
|
|
|
total_franction: Optional[int] = None
|
|
|
|
|
status: Optional[int] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
dnum: Optional[int] = None
|
|
|
|
|
displayorder: Optional[int] = None
|
|
|
|
|
price: Optional[Decimal] = None
|
|
|
|
|
times: Optional[int] = None
|
|
|
|
|
is_repeat: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PaperInDB(PaperBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PaperResponse(PaperInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class PaperListResponse(BaseModel):
|
|
|
|
|
data: List[PaperResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PaperTestBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., ge=0, description="站点 ID")
|
|
|
|
|
paperid: str = Field(..., max_length=255,
|
|
|
|
|
description="试卷 ID(注意:在表注释中提到的是试卷标题,但字段名为 paperid,通常应为试卷 ID)")
|
|
|
|
|
testid: int = Field(..., ge=0, description="试题 ID")
|
|
|
|
|
test_type: int = Field(..., ge=0, description="题型类型")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=1, le=2, description="是否删除的标识,默认为1")
|
|
|
|
|
createtime: int = Field(..., description="创建时间,Unix 时间戳")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PaperTestCreate(PaperTestBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PaperTestUpdate(PaperTestBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
paperid: Optional[str] = None
|
|
|
|
|
testid: Optional[int] = None
|
|
|
|
|
test_type: Optional[int] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PaperTestInDB(PaperTestBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PaperTestResponse(PaperTestInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class PaperTestListResponse(BaseModel):
|
|
|
|
|
data: List[PaperTestResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PhoneCodeBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., ge=0, description="站点 ID")
|
2025-03-04 20:36:52 +08:00
|
|
|
|
phone: str = Field(..., min_length=11, max_length=11, pattern=r"^\d{11}$", description="手机号码")
|
2025-01-06 00:30:49 +08:00
|
|
|
|
code: int = Field(..., ge=100000, le=999999, description="手机验证码,通常为6位数字")
|
|
|
|
|
createtime: int = Field(..., description="创建时间,Unix 时间戳")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PhoneCodeCreate(PhoneCodeBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PhoneCodeUpdate(PhoneCodeBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
phone: Optional[str] = None
|
|
|
|
|
code: Optional[int] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PhoneCodeInDB(PhoneCodeBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PhoneCodeResponse(PhoneCodeInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class PhoneCodeListResponse(BaseModel):
|
|
|
|
|
data: List[PhoneCodeResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class QYearBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., ge=0, description="站点 ID")
|
|
|
|
|
name: str = Field(..., max_length=255, description="年份名称")
|
|
|
|
|
status: Optional[int] = Field(1, ge=1, le=2, description="状态 1 显示 2不显示,默认为1")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=1, le=2, description="是否删除的标识,默认为1")
|
|
|
|
|
createtime: int = Field(..., description="创建时间,Unix 时间戳")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class QYearCreate(QYearBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class QYearUpdate(QYearBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
name: Optional[str] = None
|
|
|
|
|
status: Optional[int] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class QYearInDB(QYearBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class QYearResponse(QYearInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class QYearListResponse(BaseModel):
|
|
|
|
|
data: List[QYearResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SchoolBase(BaseModel):
|
|
|
|
|
weid: Optional[int] = Field(None, ge=0, description="站点 ID")
|
|
|
|
|
school_name: Optional[str] = Field(None, max_length=200, description="学校名称")
|
|
|
|
|
school_logo: Optional[str] = Field(None, max_length=200, description="学校 Logo URL")
|
|
|
|
|
school_info_intro: Optional[str] = Field(None, description="学校描述")
|
|
|
|
|
addtime: Optional[int] = Field(None, description="添加时间,Unix 时间戳")
|
|
|
|
|
mu_str: Optional[str] = Field(None, max_length=30, description="未知字段(mu_str)")
|
|
|
|
|
status: Optional[int] = Field(1, ge=1, le=2, description="状态,默认为1")
|
|
|
|
|
line_status: Optional[int] = Field(1, ge=1, le=2, description="线路状态,默认为1")
|
|
|
|
|
cookbook_status: Optional[int] = Field(1, ge=1, le=2, description="食谱状态,默认为1")
|
|
|
|
|
class_notice_status: Optional[int] = Field(1, ge=1, le=2, description="班级公告审核状态;1=不需要;2=需要,默认为1")
|
|
|
|
|
school_type: Optional[int] = Field(0, ge=0, description="学校类型,默认为0")
|
|
|
|
|
host_url: Optional[str] = Field(None, description="官网地址")
|
|
|
|
|
on_school: Optional[int] = Field(0, ge=0, description="在校天数,默认为0")
|
|
|
|
|
begin_day: Optional[int] = Field(0, ge=0, description="开始上课周数,默认为0")
|
|
|
|
|
am_much: Optional[int] = Field(0, ge=0, description="上午课数,默认为0")
|
|
|
|
|
pm_much: Optional[int] = Field(0, ge=0, description="下午课数,默认为0")
|
|
|
|
|
ye_much: Optional[int] = Field(0, ge=0, description="晚上课数,默认为0")
|
|
|
|
|
line_type: Optional[str] = Field(None, description="班级圈类别")
|
|
|
|
|
appointment: Optional[str] = Field(None, description="预约类别")
|
|
|
|
|
parents: Optional[int] = Field(3, ge=0, description="学生可绑定家长数,默认为3")
|
|
|
|
|
add_time: Optional[int] = Field(0, ge=0, description="添加时间,默认为0")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SchoolCreate(SchoolBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SchoolUpdate(SchoolBase):
|
|
|
|
|
school_id: Optional[int] = None # 允许更新时指定学校 ID
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SchoolInDB(SchoolBase):
|
|
|
|
|
school_id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SchoolResponse(SchoolInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class SchoolListResponse(BaseModel):
|
|
|
|
|
data: List[SchoolResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SettingBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., ge=0, description="站点 ID")
|
|
|
|
|
mchid: Optional[str] = Field(None, max_length=50, description="微信支付商户ID")
|
|
|
|
|
pay_secret: Optional[str] = Field(None, max_length=50, description="支付密匙")
|
|
|
|
|
pay_open: Optional[int] = Field(0, ge=0, le=1, description="支付开启 1开启")
|
|
|
|
|
signcertpath: Optional[str] = Field(None, max_length=255, description="商户CERT证书路径")
|
|
|
|
|
signkeypath: Optional[str] = Field(None, max_length=255, description="商户KEY证书路径")
|
|
|
|
|
AccessKeyId: Optional[str] = Field(None, max_length=255, description="阿里云账号")
|
|
|
|
|
AccessKeySecret: Optional[str] = Field(None, max_length=255, description="阿里云秘钥")
|
|
|
|
|
SignName: Optional[str] = Field(None, max_length=255, description="阿里云短信签名")
|
|
|
|
|
TemplateCode: Optional[str] = Field(None, max_length=255, description="阿里云验证码模板id")
|
|
|
|
|
RegionId: Optional[str] = Field(None, max_length=255, description="阿里云视频点播区域名")
|
|
|
|
|
banner_height: Optional[int] = Field(232, ge=0, description="轮播图高")
|
|
|
|
|
shareupper: Optional[int] = Field(0, ge=0, description="每日分享获得积分上限")
|
|
|
|
|
share_title: Optional[str] = Field(None, max_length=255, description="分享标题")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=1, le=2, description="是否删除的标识,默认为1")
|
|
|
|
|
is_display: Optional[int] = Field(1, ge=1, le=2, description="公告是否显示,默认为1")
|
|
|
|
|
display_num: Optional[int] = Field(5, ge=0, description="公告显示条数,默认为5")
|
|
|
|
|
use_integral_num: Optional[int] = Field(None, ge=0, description="高频题消耗积分个数")
|
|
|
|
|
franction: Optional[str] = Field(None, description="每个题型有多少每题多少分")
|
|
|
|
|
paper_time: Optional[int] = Field(None, ge=0, description="考试时长单位(分)")
|
|
|
|
|
reward_integral: Optional[int] = Field(None, ge=0, description="答对一题奖励积分数量")
|
|
|
|
|
medal: Optional[str] = Field(None, description="勋章设置")
|
|
|
|
|
share_integral: Optional[int] = Field(None, ge=0, description="每次分享可得积分")
|
|
|
|
|
sms_accessKeyId: Optional[str] = Field(None, max_length=255, description="短信accesskeyid")
|
|
|
|
|
sms_accessKeySecret: Optional[str] = Field(None, max_length=255, description="短信accesskeysecret")
|
|
|
|
|
about: Optional[str] = Field(None, description="关于我们")
|
|
|
|
|
wechat_number: Optional[str] = Field(None, max_length=255, description="商家微信号")
|
|
|
|
|
standard: Optional[int] = Field(5, ge=0, description="每日答题达标数量")
|
|
|
|
|
pass_: Optional[str] = Field(None, max_length=255, description="通过条件")
|
|
|
|
|
good: Optional[str] = Field(None, max_length=255, description="良好条件")
|
|
|
|
|
excellent: Optional[str] = Field(None, max_length=255, description="优秀条件")
|
|
|
|
|
randoms: Optional[str] = Field(None, max_length=255, description="随机条件")
|
|
|
|
|
randoms_icon: Optional[str] = Field(None, max_length=255, description="随机图标")
|
|
|
|
|
randoms_rule: Optional[str] = Field(None, max_length=255, description="随机规则")
|
|
|
|
|
notdone: Optional[str] = Field(None, max_length=255, description="未完成条件")
|
|
|
|
|
notdone_icon: Optional[str] = Field(None, max_length=255, description="未完成图标")
|
|
|
|
|
notdone_rule: Optional[str] = Field(None, max_length=255, description="未完成规则")
|
|
|
|
|
qhig: Optional[str] = Field(None, max_length=255, description="未知字段(qhig)")
|
|
|
|
|
qhig_icon: Optional[str] = Field(None, max_length=255, description="未知字段(qhig_icon)")
|
|
|
|
|
qhig_rule: Optional[str] = Field(None, max_length=255, description="未知字段(qhig_rule)")
|
|
|
|
|
qint: Optional[str] = Field(None, max_length=255, description="未知字段(qint)")
|
|
|
|
|
qint_icon: Optional[str] = Field(None, max_length=255, description="未知字段(qint_icon)")
|
|
|
|
|
qint_rule: Optional[str] = Field(None, max_length=255, description="未知字段(qint_rule)")
|
|
|
|
|
qhot: Optional[str] = Field(None, max_length=255, description="未知字段(qhot)")
|
|
|
|
|
qhot_icon: Optional[str] = Field(None, max_length=255, description="未知字段(qhot_icon)")
|
|
|
|
|
qhot_rule: Optional[str] = Field(None, max_length=255, description="未知字段(qhot_rule)")
|
|
|
|
|
qdiff: Optional[str] = Field(None, max_length=255, description="未知字段(qdiff)")
|
|
|
|
|
qdiff_icon: Optional[str] = Field(None, max_length=255, description="未知字段(qdiff_icon)")
|
|
|
|
|
qdiff_rule: Optional[str] = Field(None, max_length=255, description="未知字段(qdiff_rule)")
|
|
|
|
|
countdown: Optional[str] = Field(None, max_length=255, description="事件名称")
|
|
|
|
|
countdowntime: Optional[datetime] = Field(None, description="时间点")
|
|
|
|
|
time_display: Optional[int] = Field(1, ge=1, le=2, description="倒计时显示,默认为1")
|
|
|
|
|
student_open: Optional[int] = Field(1, ge=1, le=2, description="学生开启 1开启,默认为1")
|
|
|
|
|
freepoolnum: Optional[int] = Field(0, ge=0, description="题库体验题数,默认为0")
|
|
|
|
|
freeknowledgenum: Optional[int] = Field(0, ge=0, description="知识点体验章数,默认为0")
|
|
|
|
|
info_status: int = Field(1, ge=1, le=2, description="是否必须完善信息1是")
|
|
|
|
|
app_id: str = Field(..., max_length=50, description="微信公众公众号Appid")
|
|
|
|
|
app_secret: str = Field(..., max_length=50, description="微信公众SERECT")
|
|
|
|
|
IOS: int = Field(2, ge=1, le=2, description="1开启 2关闭,默认为2")
|
|
|
|
|
customer_service: str = Field(..., max_length=255, description="客服二维码")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SettingCreate(SettingBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SettingUpdate(SettingBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
mchid: Optional[str] = None
|
|
|
|
|
pay_secret: Optional[str] = None
|
|
|
|
|
pay_open: Optional[int] = None
|
|
|
|
|
signcertpath: Optional[str] = None
|
|
|
|
|
signkeypath: Optional[str] = None
|
|
|
|
|
AccessKeyId: Optional[str] = None
|
|
|
|
|
AccessKeySecret: Optional[str] = None
|
|
|
|
|
SignName: Optional[str] = None
|
|
|
|
|
TemplateCode: Optional[str] = None
|
|
|
|
|
RegionId: Optional[str] = None
|
|
|
|
|
banner_height: Optional[int] = None
|
|
|
|
|
shareupper: Optional[int] = None
|
|
|
|
|
share_title: Optional[str] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
is_display: Optional[int] = None
|
|
|
|
|
display_num: Optional[int] = None
|
|
|
|
|
use_integral_num: Optional[int] = None
|
|
|
|
|
franction: Optional[str] = None
|
|
|
|
|
paper_time: Optional[int] = None
|
|
|
|
|
reward_integral: Optional[int] = None
|
|
|
|
|
medal: Optional[str] = None
|
|
|
|
|
share_integral: Optional[int] = None
|
|
|
|
|
sms_accessKeyId: Optional[str] = None
|
|
|
|
|
sms_accessKeySecret: Optional[str] = None
|
|
|
|
|
about: Optional[str] = None
|
|
|
|
|
wechat_number: Optional[str] = None
|
|
|
|
|
standard: Optional[int] = None
|
|
|
|
|
pass_: Optional[str] = None
|
|
|
|
|
good: Optional[str] = None
|
|
|
|
|
excellent: Optional[str] = None
|
|
|
|
|
randoms: Optional[str] = None
|
|
|
|
|
randoms_icon: Optional[str] = None
|
|
|
|
|
randoms_rule: Optional[str] = None
|
|
|
|
|
notdone: Optional[str] = None
|
|
|
|
|
notdone_icon: Optional[str] = None
|
|
|
|
|
notdone_rule: Optional[str] = None
|
|
|
|
|
qhig: Optional[str] = None
|
|
|
|
|
qhig_icon: Optional[str] = None
|
|
|
|
|
qhig_rule: Optional[str] = None
|
|
|
|
|
qint: Optional[str] = None
|
|
|
|
|
qint_icon: Optional[str] = None
|
|
|
|
|
qint_rule: Optional[str] = None
|
|
|
|
|
qhot: Optional[str] = None
|
|
|
|
|
qhot_icon: Optional[str] = None
|
|
|
|
|
qhot_rule: Optional[str] = None
|
|
|
|
|
qdiff: Optional[str] = None
|
|
|
|
|
qdiff_icon: Optional[str] = None
|
|
|
|
|
qdiff_rule: Optional[str] = None
|
|
|
|
|
countdown: Optional[str] = None
|
|
|
|
|
countdowntime: Optional[datetime] = None
|
|
|
|
|
time_display: Optional[int] = None
|
|
|
|
|
student_open: Optional[int] = None
|
|
|
|
|
freepoolnum: Optional[int] = None
|
|
|
|
|
freeknowledgenum: Optional[int] = None
|
|
|
|
|
info_status: Optional[int] = None
|
|
|
|
|
app_id: Optional[str] = None
|
|
|
|
|
app_secret: Optional[str] = None
|
|
|
|
|
IOS: Optional[int] = None
|
|
|
|
|
customer_service: Optional[str] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SettingInDB(SettingBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SettingResponse(SettingInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class SettingListResponse(BaseModel):
|
|
|
|
|
data: List[SettingResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ShareRecordBase(BaseModel):
|
|
|
|
|
weid: Optional[int] = Field(0, ge=0, description="站点 ID")
|
|
|
|
|
uid: int = Field(..., ge=0, description="用户 ID")
|
|
|
|
|
num: Optional[int] = Field(None, ge=0, description="分享次数")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=1, le=2, description="是否删除的标识,默认为1")
|
|
|
|
|
day: Optional[date] = Field(None, description="记录哪一天")
|
|
|
|
|
createtime: Optional[int] = Field(None, description="创建时间,Unix 时间戳")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ShareRecordCreate(ShareRecordBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ShareRecordUpdate(ShareRecordBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
uid: Optional[int] = None
|
|
|
|
|
num: Optional[int] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
day: Optional[date] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ShareRecordInDB(ShareRecordBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ShareRecordResponse(ShareRecordInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class ShareRecordListResponse(BaseModel):
|
|
|
|
|
data: List[ShareRecordResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SonSimpleBase(BaseModel):
|
|
|
|
|
weid: str = Field(..., max_length=150, description="站点 ID")
|
|
|
|
|
son_title: str = Field(..., max_length=255, description="子标题")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SonSimpleCreate(SonSimpleBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SonSimpleUpdate(SonSimpleBase):
|
|
|
|
|
weid: Optional[str] = None
|
|
|
|
|
son_title: Optional[str] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SonSimpleInDB(SonSimpleBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SonSimpleResponse(SonSimpleInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class SonSimpleListResponse(BaseModel):
|
|
|
|
|
data: List[SonSimpleResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., ge=0, description="站点 ID")
|
|
|
|
|
type: int = Field(..., ge=0, le=255, description="试题类型")
|
|
|
|
|
title: str = Field(..., max_length=255, description="试题题目 仅在列表显示 试卷内不显示")
|
|
|
|
|
libraryid: Optional[int] = Field(0, ge=0, description="题库id")
|
|
|
|
|
question: str = Field(..., description="题目")
|
|
|
|
|
qimage: Optional[str] = Field(None, description="试题图片")
|
|
|
|
|
qaudio: Optional[str] = Field(None, description="问题音频")
|
|
|
|
|
a_type: Optional[int] = Field(0, ge=0, le=255, description="选项类型")
|
|
|
|
|
option: Optional[str] = Field(None, description="选项")
|
|
|
|
|
rightkey: str = Field(..., description="正确答案")
|
|
|
|
|
analysis: str = Field(..., description="答案解析")
|
|
|
|
|
aimage: Optional[str] = Field(None, description="解析图片")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=1, le=2, description="是否删除的标识,默认为1")
|
|
|
|
|
createtime: int = Field(..., description="创建时间,Unix 时间戳")
|
|
|
|
|
anum: Optional[int] = Field(0, ge=0, description="本题答题次数 仅考试")
|
|
|
|
|
rnum: Optional[int] = Field(0, ge=0, description="正确回答次数 仅考试")
|
|
|
|
|
level: Optional[int] = Field(1, ge=1, le=5, description="难度等级,默认为1")
|
|
|
|
|
qvideo: Optional[str] = Field(None, description="问题视频")
|
|
|
|
|
analysis_audio: Optional[str] = Field(None, description="音频解析")
|
|
|
|
|
knowledge: Optional[str] = Field(None, description="所属知识点类别")
|
|
|
|
|
type_classification: Optional[str] = Field(None, description="类型分类")
|
|
|
|
|
q_year: Optional[str] = Field(None, description="年份")
|
|
|
|
|
pid: Optional[int] = Field(0, ge=0, description="问题父id")
|
|
|
|
|
son_status: Optional[int] = Field(None, description="语音题是否加了小题")
|
|
|
|
|
display: Optional[int] = Field(1, ge=1, le=2, description="1-显示2-不显示,默认为1")
|
|
|
|
|
son_simple: int = Field(0, ge=0, description="子题简化")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestCreate(TestBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestUpdate(TestBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
type: Optional[int] = None
|
|
|
|
|
title: Optional[str] = None
|
|
|
|
|
libraryid: Optional[int] = None
|
|
|
|
|
question: Optional[str] = None
|
|
|
|
|
qimage: Optional[str] = None
|
|
|
|
|
qaudio: Optional[str] = None
|
|
|
|
|
a_type: Optional[int] = None
|
|
|
|
|
option: Optional[str] = None
|
|
|
|
|
rightkey: Optional[str] = None
|
|
|
|
|
analysis: Optional[str] = None
|
|
|
|
|
aimage: Optional[str] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
anum: Optional[int] = None
|
|
|
|
|
rnum: Optional[int] = None
|
|
|
|
|
level: Optional[int] = None
|
|
|
|
|
qvideo: Optional[str] = None
|
|
|
|
|
analysis_audio: Optional[str] = None
|
|
|
|
|
knowledge: Optional[str] = None
|
|
|
|
|
type_classification: Optional[str] = None
|
|
|
|
|
q_year: Optional[str] = None
|
|
|
|
|
pid: Optional[int] = None
|
|
|
|
|
son_status: Optional[int] = None
|
|
|
|
|
display: Optional[int] = None
|
|
|
|
|
son_simple: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestInDB(TestBase):
|
|
|
|
|
id: int
|
|
|
|
|
createtime: Optional[datetime] = Field(None, description="创建时间")
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
|
def from_orm(cls, obj):
|
|
|
|
|
if isinstance(obj.createtime, int):
|
|
|
|
|
obj.createtime = datetime.fromtimestamp(obj.createtime)
|
|
|
|
|
return super().from_orm(obj)
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestResponse(TestInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class TestListResponse(BaseModel):
|
|
|
|
|
data: List[TestResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestTypeBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., ge=0, description="站点 ID")
|
|
|
|
|
name: str = Field(..., max_length=255, description="试题库名称")
|
|
|
|
|
pid: Optional[int] = Field(0, ge=0, description="默认0为顶级分类")
|
|
|
|
|
gpid: Optional[int] = Field(0, ge=0, description="默认0")
|
|
|
|
|
price: Optional[Decimal] = Field(Decimal('0.00'), ge=0, description="价格")
|
|
|
|
|
status: Optional[int] = Field(1, ge=0, le=1, description="题库状态,默认为1")
|
|
|
|
|
is_student: Optional[int] = Field(0, ge=0, le=1, description="学员专享 1是,默认为0")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=0, le=1, description="是否删除的标识,默认为1")
|
|
|
|
|
createtime: int = Field(..., description="创建时间,Unix 时间戳")
|
|
|
|
|
display_order: int = Field(0, description="显示顺序,默认为0")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestTypeCreate(TestTypeBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestTypeUpdate(TestTypeBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
name: Optional[str] = None
|
|
|
|
|
pid: Optional[int] = None
|
|
|
|
|
gpid: Optional[int] = None
|
|
|
|
|
price: Optional[Decimal] = None
|
|
|
|
|
status: Optional[int] = None
|
|
|
|
|
is_student: Optional[int] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
display_order: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestTypeInDB(TestTypeBase):
|
|
|
|
|
id: int
|
|
|
|
|
createtime: Optional[datetime] = Field(None, description="创建时间")
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
|
def from_orm(cls, obj):
|
|
|
|
|
if isinstance(obj.createtime, int):
|
|
|
|
|
obj.createtime = datetime.fromtimestamp(obj.createtime)
|
|
|
|
|
return super().from_orm(obj)
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestTypeResponse(TestTypeInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class TestTypeListResponse(BaseModel):
|
|
|
|
|
data: List[TestTypeResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TypeCateBase(BaseModel):
|
|
|
|
|
weid: int = Field(..., ge=0, description="站点 ID")
|
|
|
|
|
name: str = Field(..., max_length=255, description="分类名称")
|
|
|
|
|
status: Optional[int] = Field(1, ge=1, le=2, description="状态 1 显示 2不显示,默认为1")
|
|
|
|
|
istatus: Optional[int] = Field(1, ge=0, le=1, description="是否删除的标识,默认为1")
|
|
|
|
|
createtime: int = Field(..., description="创建时间,Unix 时间戳")
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TypeCateCreate(TypeCateBase):
|
|
|
|
|
pass # 如果创建时需要额外字段或默认值不同,可以在这里添加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TypeCateUpdate(TypeCateBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
name: Optional[str] = None
|
|
|
|
|
status: Optional[int] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TypeCateInDB(TypeCateBase):
|
|
|
|
|
id: int
|
|
|
|
|
createtime: Optional[datetime] = Field(None, description="创建时间")
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
|
def from_orm(cls, obj):
|
|
|
|
|
if isinstance(obj.createtime, int):
|
|
|
|
|
obj.createtime = datetime.fromtimestamp(obj.createtime)
|
|
|
|
|
return super().from_orm(obj)
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 00:30:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TypeCateResponse(TypeCateInDB):
|
|
|
|
|
pass # 可以根据需要添加额外的字段或调整现有字段
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 用于批量操作的模型
|
|
|
|
|
class TypeCateListResponse(BaseModel):
|
|
|
|
|
data: List[TypeCateResponse]
|
2025-01-06 11:12:11 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
from typing import Optional
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WatermarkBase(BaseModel):
|
|
|
|
|
weid: int
|
|
|
|
|
type: int = Field(..., le=2, ge=1, description='1个人信息 2为自定义')
|
|
|
|
|
open: int = Field(default=2, le=2, ge=1, description='1打开水印 2关闭水印')
|
|
|
|
|
content: str = Field(..., max_length=1024, description='水印内容')
|
|
|
|
|
size: int
|
|
|
|
|
rotate: int
|
|
|
|
|
transparent: int
|
|
|
|
|
local_type: int = Field(..., le=2, ge=1, description='1预设 2为自定义 生效位置类型')
|
|
|
|
|
presupposition: int
|
|
|
|
|
horizontal: int
|
|
|
|
|
vertical: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 11:12:11 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WatermarkCreate(WatermarkBase):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WatermarkUpdate(WatermarkBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
type: Optional[int] = None
|
|
|
|
|
open: Optional[int] = None
|
|
|
|
|
content: Optional[str] = None
|
|
|
|
|
size: Optional[int] = None
|
|
|
|
|
rotate: Optional[int] = None
|
|
|
|
|
transparent: Optional[int] = None
|
|
|
|
|
local_type: Optional[int] = None
|
|
|
|
|
presupposition: Optional[int] = None
|
|
|
|
|
horizontal: Optional[int] = None
|
|
|
|
|
vertical: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WatermarkInDB(WatermarkBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 11:12:11 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WatermarkResponse(WatermarkInDB):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WatermarkListResponse(BaseModel):
|
|
|
|
|
data: List[WatermarkResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WxTplBase(BaseModel):
|
|
|
|
|
weid: int
|
|
|
|
|
type: int
|
|
|
|
|
tplid: str = Field(..., max_length=255)
|
|
|
|
|
keyword1: Optional[str] = Field(None, max_length=255)
|
|
|
|
|
keyword2: Optional[str] = Field(None, max_length=255)
|
|
|
|
|
keyword3: Optional[str] = Field(None, max_length=255)
|
|
|
|
|
istatus: Optional[int] = Field(default=1, le=1, ge=1, description='删除状态')
|
|
|
|
|
createtime: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 11:12:11 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WxTplCreate(WxTplBase):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WxTplUpdate(WxTplBase):
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
type: Optional[int] = None
|
|
|
|
|
tplid: Optional[str] = None
|
|
|
|
|
keyword1: Optional[str] = None
|
|
|
|
|
keyword2: Optional[str] = None
|
|
|
|
|
keyword3: Optional[str] = None
|
|
|
|
|
istatus: Optional[int] = None
|
|
|
|
|
createtime: Optional[int] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WxTplInDB(WxTplBase):
|
|
|
|
|
id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 11:12:11 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WxTplResponse(WxTplInDB):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WxTplListResponse(BaseModel):
|
|
|
|
|
data: List[WxTplResponse]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class XueshengBase(BaseModel):
|
|
|
|
|
weid: int
|
|
|
|
|
uidht: int
|
|
|
|
|
school_id: int
|
|
|
|
|
nianfen_id: int
|
|
|
|
|
banji_id: int
|
|
|
|
|
banjixs_id: int
|
|
|
|
|
xiaozu_id: int
|
|
|
|
|
xiaozuxs_id: int
|
|
|
|
|
sflx: int
|
|
|
|
|
bjcsjf: float = Field(default=0.00)
|
|
|
|
|
bjzf: float = Field(default=0.00)
|
|
|
|
|
displayorder: int
|
|
|
|
|
student_name: Optional[str] = Field(None, max_length=20)
|
|
|
|
|
pic: str = Field(...)
|
|
|
|
|
sex: str = Field(...)
|
|
|
|
|
jiguan: str = Field(...)
|
|
|
|
|
minzu: str = Field(...)
|
|
|
|
|
sfzhm: str = Field(...)
|
|
|
|
|
gxuehao: Optional[str] = Field(None, max_length=25)
|
|
|
|
|
xxuehao: Optional[str] = Field(None, max_length=25)
|
|
|
|
|
zxxuehao: Optional[str] = Field(None, max_length=25)
|
|
|
|
|
student_img: Optional[str] = Field(None, max_length=60)
|
|
|
|
|
parent_name: Optional[str] = Field(None, max_length=20)
|
|
|
|
|
parent_phone: Optional[str] = Field(None, max_length=20)
|
|
|
|
|
qq: str = Field(...)
|
|
|
|
|
phone: str = Field(...)
|
|
|
|
|
yzm: str = Field(...)
|
|
|
|
|
address: Optional[str] = Field(None, max_length=255)
|
|
|
|
|
updatetime: int
|
|
|
|
|
beizhu: str = Field(...)
|
|
|
|
|
addtime: int
|
|
|
|
|
uid: Optional[int] = Field(default=0)
|
|
|
|
|
uid1: Optional[int] = Field(default=0)
|
|
|
|
|
uid2: Optional[int] = Field(default=0)
|
|
|
|
|
uid3: Optional[int] = Field(default=0)
|
|
|
|
|
uid4: Optional[int] = Field(default=0)
|
|
|
|
|
uid5: Optional[int] = Field(default=0)
|
|
|
|
|
uid6: Optional[int] = Field(default=0)
|
|
|
|
|
uid7: Optional[int] = Field(default=0)
|
|
|
|
|
uid8: Optional[int] = Field(default=0)
|
|
|
|
|
openid: str = Field(...)
|
|
|
|
|
openid1: str = Field(...)
|
|
|
|
|
openid2: str = Field(...)
|
|
|
|
|
openid3: str = Field(...)
|
|
|
|
|
openid4: str = Field(...)
|
|
|
|
|
openid5: str = Field(...)
|
|
|
|
|
openid6: str = Field(...)
|
|
|
|
|
openid7: str = Field(...)
|
|
|
|
|
openid8: str = Field(...)
|
|
|
|
|
sflx1: int
|
|
|
|
|
sflx2: int
|
|
|
|
|
sflx3: int
|
|
|
|
|
sflx4: int
|
|
|
|
|
sflx5: int
|
|
|
|
|
sflx6: int
|
|
|
|
|
sflx7: int
|
|
|
|
|
sflx8: int
|
|
|
|
|
nid: int
|
|
|
|
|
name: str = Field(..., max_length=50)
|
|
|
|
|
parentid: int
|
|
|
|
|
enabled: int
|
|
|
|
|
icon: str = Field(..., max_length=100)
|
|
|
|
|
description: str = Field(..., max_length=100)
|
|
|
|
|
styleid: int
|
|
|
|
|
linkurl: str = Field(..., max_length=500)
|
|
|
|
|
ishomepage: int
|
|
|
|
|
icontype: int
|
|
|
|
|
css: str = Field(..., max_length=500)
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 11:12:11 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class XueshengCreate(XueshengBase):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class XueshengUpdate(XueshengBase):
|
|
|
|
|
# All fields are optional for partial updates
|
|
|
|
|
weid: Optional[int] = None
|
|
|
|
|
uidht: Optional[int] = None
|
|
|
|
|
school_id: Optional[int] = None
|
|
|
|
|
nianfen_id: Optional[int] = None
|
|
|
|
|
banji_id: Optional[int] = None
|
|
|
|
|
banjixs_id: Optional[int] = None
|
|
|
|
|
xiaozu_id: Optional[int] = None
|
|
|
|
|
xiaozuxs_id: Optional[int] = None
|
|
|
|
|
sflx: Optional[int] = None
|
|
|
|
|
bjcsjf: Optional[float] = None
|
|
|
|
|
bjzf: Optional[float] = None
|
|
|
|
|
displayorder: Optional[int] = None
|
|
|
|
|
student_name: Optional[str] = None
|
|
|
|
|
pic: Optional[str] = None
|
|
|
|
|
sex: Optional[str] = None
|
|
|
|
|
jiguan: Optional[str] = None
|
|
|
|
|
minzu: Optional[str] = None
|
|
|
|
|
sfzhm: Optional[str] = None
|
|
|
|
|
gxuehao: Optional[str] = None
|
|
|
|
|
xxuehao: Optional[str] = None
|
|
|
|
|
zxxuehao: Optional[str] = None
|
|
|
|
|
student_img: Optional[str] = None
|
|
|
|
|
parent_name: Optional[str] = None
|
|
|
|
|
parent_phone: Optional[str] = None
|
|
|
|
|
qq: Optional[str] = None
|
|
|
|
|
phone: Optional[str] = None
|
|
|
|
|
yzm: Optional[str] = None
|
|
|
|
|
address: Optional[str] = None
|
|
|
|
|
updatetime: Optional[int] = None
|
|
|
|
|
beizhu: Optional[str] = None
|
|
|
|
|
addtime: Optional[int] = None
|
|
|
|
|
uid: Optional[int] = None
|
|
|
|
|
uid1: Optional[int] = None
|
|
|
|
|
uid2: Optional[int] = None
|
|
|
|
|
uid3: Optional[int] = None
|
|
|
|
|
uid4: Optional[int] = None
|
|
|
|
|
uid5: Optional[int] = None
|
|
|
|
|
uid6: Optional[int] = None
|
|
|
|
|
uid7: Optional[int] = None
|
|
|
|
|
uid8: Optional[int] = None
|
|
|
|
|
openid: Optional[str] = None
|
|
|
|
|
openid1: Optional[str] = None
|
|
|
|
|
openid2: Optional[str] = None
|
|
|
|
|
openid3: Optional[str] = None
|
|
|
|
|
openid4: Optional[str] = None
|
|
|
|
|
openid5: Optional[str] = None
|
|
|
|
|
openid6: Optional[str] = None
|
|
|
|
|
openid7: Optional[str] = None
|
|
|
|
|
openid8: Optional[str] = None
|
|
|
|
|
sflx1: Optional[int] = None
|
|
|
|
|
sflx2: Optional[int] = None
|
|
|
|
|
sflx3: Optional[int] = None
|
|
|
|
|
sflx4: Optional[int] = None
|
|
|
|
|
sflx5: Optional[int] = None
|
|
|
|
|
sflx6: Optional[int] = None
|
|
|
|
|
sflx7: Optional[int] = None
|
|
|
|
|
sflx8: Optional[int] = None
|
|
|
|
|
nid: Optional[int] = None
|
|
|
|
|
name: Optional[str] = None
|
|
|
|
|
parentid: Optional[int] = None
|
|
|
|
|
enabled: Optional[int] = None
|
|
|
|
|
icon: Optional[str] = None
|
|
|
|
|
description: Optional[str] = None
|
|
|
|
|
styleid: Optional[int] = None
|
|
|
|
|
linkurl: Optional[str] = None
|
|
|
|
|
ishomepage: Optional[int] = None
|
|
|
|
|
icontype: Optional[int] = None
|
|
|
|
|
css: Optional[str] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class XueshengInDB(XueshengBase):
|
|
|
|
|
xuesheng_id: int
|
|
|
|
|
|
|
|
|
|
class Config:
|
2025-03-04 20:36:52 +08:00
|
|
|
|
from_attributes = True
|
2025-01-06 11:12:11 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class XueshengResponse(XueshengInDB):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class XueshengListResponse(BaseModel):
|
|
|
|
|
data: List[XueshengResponse]
|