feat(backend): Phase 0 项目骨架完成 — 后端/前端/数据库/Docker
- 后端:FastAPI + SQLAlchemy + Alembic,7 张核心表迁移成功 - 前端:Next.js 16 + TailwindCSS 4 + 三端布局(投资人/创始人/Admin) - 数据库:PostgreSQL 16,7 张核心实体表(tenants/users/companies/monthly_reports/health_scores/risk_events/audit_logs) - Docker:docker-compose.yml + 前后端 Dockerfile - 测试:健康检查 4 个测试全部 GREEN - 文档:README/run.md/AGENTS.md/docs 体系完整
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
"""统一响应模型。
|
||||
|
||||
所有 API 返回统一壳:{code, message, data, trace_id, timestamp}
|
||||
"""
|
||||
|
||||
import uuid
|
||||
from datetime import datetime, timezone
|
||||
from typing import Any, Generic, TypeVar
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
|
||||
class ApiResponse(BaseModel, Generic[T]):
|
||||
"""统一 API 响应壳。"""
|
||||
|
||||
code: int = Field(default=0, description="业务状态码,0 表示成功")
|
||||
message: str = Field(default="success", description="提示信息")
|
||||
data: T | None = Field(default=None, description="业务数据")
|
||||
trace_id: str = Field(default_factory=lambda: str(uuid.uuid4()), description="链路追踪 ID")
|
||||
timestamp: str = Field(
|
||||
default_factory=lambda: datetime.now(timezone.utc).isoformat(),
|
||||
description="响应时间(UTC ISO 8601)",
|
||||
)
|
||||
|
||||
|
||||
def success(data: Any = None, message: str = "success") -> dict[str, Any]:
|
||||
"""构造成功响应。"""
|
||||
return ApiResponse(code=0, message=message, data=data).model_dump()
|
||||
|
||||
|
||||
def error(code: int = -1, message: str = "error", data: Any = None) -> dict[str, Any]:
|
||||
"""构造错误响应。"""
|
||||
return ApiResponse(code=code, message=message, data=data).model_dump()
|
||||
Reference in New Issue
Block a user