封装返回消息格式, 类似于 code, msg, data

This commit is contained in:
haotian 2025-05-26 14:42:20 +08:00
parent b2a481ff30
commit 7fb9cf2aa4
5 changed files with 66 additions and 12 deletions

View File

@ -4,6 +4,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
from app.core.database import get_db
from app.crud.event import event
from app.schemas.event import EventList, EventDetail, EventUpdate, EventQuery, BackStageEvent, BackStageEventDto, BackStageEventDetail
from app.util.httpResponse import BaseResponse
import datetime
@ -37,7 +38,8 @@ async def get_events(
return [EventList.model_validate(event) for event in events]
# 后台获取事件列表
@router.post("/backstageEventlist", response_model=List[BackStageEvent])
# @router.post("/backstageEventlist", response_model=List[BackStageEvent])
@router.post("/backstageEventlist", response_model=BaseResponse[List[BackStageEvent]])
async def get_events_backstage(
db: AsyncSession = Depends(get_db),
query: BackStageEventDto = Body(...)
@ -45,16 +47,16 @@ async def get_events_backstage(
):
events = await event.get_multi_backstage_events(db, query=query)
return events
return BaseResponse(code=200, msg="success", data=events)
# 后台获取事件详情
@router.get("/backstageEventDetail/{eventId}")
@router.get("/backstageEventDetail/{eventId}", response_model=BaseResponse[BackStageEventDetail])
async def get_event_detail(
eventId: str,
db: AsyncSession = Depends(get_db)
):
back = await event.get_event_detail(db=db, eventId=eventId)
return back
return BaseResponse(code = 200, msg="success", data=back)
@ -89,7 +91,7 @@ async def update_event(
raise HTTPException(status_code=404, detail="事件不存在")
return EventDetail.model_validate(event_obj)
@router.delete("/events/{event_id}", response_model=EventDetail)
@router.delete("/events/{event_id}", response_model=BaseResponse[EventDetail])
async def delete_event(
event_id: str,
db: AsyncSession = Depends(get_db)
@ -99,5 +101,5 @@ async def delete_event(
"""
event_obj = await event.delete_event(db, event_id=event_id)
if not event_obj:
raise HTTPException(status_code=404, detail="事件不存在")
return EventDetail.model_validate(event_obj)
return BaseResponse(code=404,msg="事件不存在")
return BaseResponse(code=200, msg="success", data=EventDetail.model_validate(event_obj))

View File

@ -43,6 +43,7 @@ class CRUDEvent(CRUDBase[Event, EventUpdate, EventUpdate]):
*,
query: BackStageEventDto
) -> List[BackStageEvent]:
"""后台根据条件获取事件列表"""
conditions = []
@ -71,7 +72,7 @@ class CRUDEvent(CRUDBase[Event, EventUpdate, EventUpdate]):
result = await db.execute(stmt)
result = result.mappings().all()
return [BackStageEvent(**row) for row in result]

View File

@ -121,8 +121,8 @@ class BackStageEventDto(BaseModel):
eventId: Optional[str] = None
number: Optional[str] = None
name: Optional[str] = None
start_time : Optional[str] = None
end_time : Optional[str] = None
start_time : Optional[datetime] = None
end_time : Optional[datetime] = None
status: Optional[str] = None
skip: int = 0
limit: int = 100
@ -132,7 +132,7 @@ class BackStageEventDetail(BaseModel):
eventId:str = None
number: Optional[str] = None
name: Optional[str] = None
createTime: Optional[str] = None
createTime: Optional[datetime] = None
temperature: Optional[str] = None
status: Optional[str] = None
reason: Optional[str] = None

51
app/util/httpResponse.py Normal file
View File

@ -0,0 +1,51 @@
from typing import Generic, TypeVar, Optional, List
# from fastapi import FastAPI, HTTPException, status
from fastapi.responses import JSONResponse
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel, Field
from pydantic.generics import GenericModel
# 定义泛型类型
T = TypeVar('T')
class BaseResponse(GenericModel, Generic[T]):
code: int = Field(..., description="状态码")
msg: str = Field(..., description="描述信息")
data: Optional[T] = Field(None, description="响应数据")
class Config:
json_encoders = {
# 如果有需要自定义类型编码可以在这里添加
}
def response_format(*, code=200, message="success", data=None):
return JSONResponse(
status_code=code,
content=jsonable_encoder({
"code": code,
"msg": message,
"data": data
})
)
# 可以继承BaseResponse类来扩展字段
class PaginatedResponse(BaseResponse[List[T]]):
total: int
page: int
page_size: int
# # 使用示例
# @router.get("/paginated", response_model=PaginatedResponse[UserSchema])
# async def get_paginated_users():
# users, total = get_paginated_users()
# return PaginatedResponse(
# code=200,
# msg="success",
# data=users,
# total=total,
# page=1,
# page_size=20
# )

View File

@ -8,4 +8,4 @@ from app.services.event_sync_service import run_sync, run_sync_event
if __name__ == "__main__":
print("启动事件同步服务...")
# asyncio.run(run_sync())
asyncio.run(run_sync_event("248432afe24740b6a6671bbcc8d55f58"))
asyncio.run(run_sync_event("07a9da561cd643328d5d43a33cce89bb"))