fix: 修复公告 API 路由顺序 — /today 和 /stats 在 /{id} 之前匹配

将具体路由移到参数化路由之前,避免 "today"/"stats" 被 {announcement_id} 作为整数解析而返回 422。
This commit is contained in:
2026-05-09 15:19:49 +08:00
parent acff263dba
commit 808f3101e3
+11 -11
View File
@@ -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)