chore: initial commit — leaudit-platform project skeleton

17-table PostgreSQL schema with full Chinese column comments,
FastAPI project structure (admin/common/modules),
DSL rule files, and schema migration scripts.
This commit is contained in:
wren
2026-04-27 16:48:22 +08:00
commit 535d97a70c
142 changed files with 25219 additions and 0 deletions
@@ -0,0 +1,11 @@
"""评查 DTO(仅控制器层使用)。"""
from pydantic import BaseModel, Field
class AuditRunDTO(BaseModel):
"""触发评查请求。"""
documentId: int = Field(..., description="文档ID")
ruleType: str | None = Field(None, description="指定规则类型编码")
force: bool = Field(False, description="是否强制重跑")
@@ -0,0 +1,31 @@
"""认证 DTO(仅控制器层使用)。"""
from pydantic import BaseModel, Field
class PasswordLoginDTO(BaseModel):
"""账密登录请求。"""
sub: str = Field(..., description="账号")
password: str = Field(..., description="密码")
class OAuthUserInfo(BaseModel):
"""OAuth 用户信息。"""
sub: str = Field(..., description="IDaaS 用户唯一标识")
username: str | None = Field(None, description="用户名/工号")
nickname: str | None = Field(None, description="用户昵称")
email: str | None = Field(None, description="邮箱")
phone_number: str | None = Field(None, description="手机号")
ou_id: str | None = Field(None, description="组织单位ID")
ou_name: str | None = Field(None, description="组织单位名称")
is_leader: bool | None = Field(False, description="是否为负责人")
class OAuthLoginDTO(BaseModel):
"""OAuth 登录请求。"""
userInfo: OAuthUserInfo = Field(..., description="OAuth 用户信息")
expiresIn: int = Field(..., description="OAuth token 过期时间(秒)")
area: str | None = Field(None, description="用户所属地区")
@@ -0,0 +1,33 @@
"""评查 VO。"""
from datetime import datetime
from pydantic import BaseModel, Field
class AuditRunVO(BaseModel):
"""评查运行响应。"""
runId: int = Field(..., description="运行ID")
documentId: int = Field(..., description="文档ID")
runNo: int = Field(..., description="执行序号")
status: str = Field(..., description="状态")
phase: str | None = Field(None, description="draft/executed")
totalScore: float | None = Field(None, description="总分")
passedCount: int | None = Field(None, description="通过数")
failedCount: int | None = Field(None, description="失败数")
startedAt: datetime | None = Field(None, description="开始时间")
finishedAt: datetime | None = Field(None, description="结束时间")
class AuditResultVO(BaseModel):
"""评查结果响应。"""
runId: int = Field(..., description="运行ID")
totalScore: float | None = Field(None, description="总分")
passedCount: int = Field(0, description="通过数")
failedCount: int = Field(0, description="失败数")
skippedCount: int = Field(0, description="跳过数")
phase: str | None = Field(None, description="draft/executed")
rescueApplied: bool = Field(False, description="是否执行 rescue")
rules: list[dict] = Field(default_factory=list, description="规则结果列表")
@@ -0,0 +1,13 @@
"""认证 VO(控制器层 + 服务层使用)。"""
from pydantic import BaseModel, Field
class LoginTokenVO(BaseModel):
"""登录响应。"""
access_token: str = Field(..., description="JWT Token")
token_type: str = Field("Bearer", description="Token 类型")
expires_in: int = Field(..., description="Token 过期时间(秒)")
issued_time: str = Field(..., description="签发时间 YYYY-MM-DD HH:MM:SS")
user_info: dict = Field(..., description="用户信息")
@@ -0,0 +1,26 @@
"""规则 VO。"""
from pydantic import BaseModel, Field
class RuleSetVO(BaseModel):
"""规则集响应。"""
id: int = Field(..., description="规则集ID")
ruleType: str = Field(..., description="业务规则类型编码")
ruleName: str = Field(..., description="规则集名称")
domainType: str | None = Field(None, description="域类型")
currentVersionId: int | None = Field(None, description="当前激活版本ID")
status: str = Field(..., description="draft/active/inactive/archived")
class RuleVersionVO(BaseModel):
"""规则版本响应。"""
id: int = Field(..., description="版本ID")
ruleSetId: int = Field(..., description="所属规则集ID")
versionNo: str = Field(..., description="版本号")
status: str = Field(..., description="draft/validated/published/rolled_back")
ossUrl: str = Field(..., description="YAML 文件 OSS 地址")
changeNote: str | None = Field(None, description="变更说明")
publishedAt: str | None = Field(None, description="发布时间")