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)
|
@router.get("/announcements/today", response_model=AnnouncementListResponse)
|
||||||
async def get_today_announcements(db: AsyncSession = Depends(get_db)):
|
async def get_today_announcements(db: AsyncSession = Depends(get_db)):
|
||||||
today = datetime.now().date()
|
today = datetime.now().date()
|
||||||
@@ -106,3 +95,14 @@ async def get_stats(db: AsyncSession = Depends(get_db)):
|
|||||||
"new": new_count.scalar() or 0,
|
"new": new_count.scalar() or 0,
|
||||||
"unsent": unsent.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