fix: 修复公告 API 路由顺序 — /today 和 /stats 在 /{id} 之前匹配
将具体路由移到参数化路由之前,避免 "today"/"stats" 被 {announcement_id} 作为整数解析而返回 422。
This commit is contained in:
+11
-11
@@ -57,17 +57,6 @@ async def list_announcements(
|
||||
)
|
||||
|
||||
|
||||
@router.get("/announcements/{announcement_id}", response_model=AnnouncementResponse)
|
||||
async def get_announcement(announcement_id: int, db: AsyncSession = Depends(get_db)):
|
||||
result = await db.execute(
|
||||
select(Announcement).where(Announcement.id == announcement_id)
|
||||
)
|
||||
item = result.scalar_one_or_none()
|
||||
if item is None:
|
||||
raise HTTPException(status_code=404, detail="公告不存在")
|
||||
return AnnouncementResponse.model_validate(item)
|
||||
|
||||
|
||||
@router.get("/announcements/today", response_model=AnnouncementListResponse)
|
||||
async def get_today_announcements(db: AsyncSession = Depends(get_db)):
|
||||
today = datetime.now().date()
|
||||
@@ -106,3 +95,14 @@ async def get_stats(db: AsyncSession = Depends(get_db)):
|
||||
"new": new_count.scalar() or 0,
|
||||
"unsent": unsent.scalar() or 0,
|
||||
}
|
||||
|
||||
|
||||
@router.get("/announcements/{announcement_id}", response_model=AnnouncementResponse)
|
||||
async def get_announcement(announcement_id: int, db: AsyncSession = Depends(get_db)):
|
||||
result = await db.execute(
|
||||
select(Announcement).where(Announcement.id == announcement_id)
|
||||
)
|
||||
item = result.scalar_one_or_none()
|
||||
if item is None:
|
||||
raise HTTPException(status_code=404, detail="公告不存在")
|
||||
return AnnouncementResponse.model_validate(item)
|
||||
|
||||
Reference in New Issue
Block a user