From c17525c1e1476e3f4a17f37e70d309b141849620 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=B2=E8=BE=B0=E7=94=9F=E4=BA=A7?= Date: Fri, 24 Apr 2026 13:30:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=B0=83=E6=95=B4seek=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F=EF=BC=8C=E5=B0=86/{seek=5Fid}=E7=A7=BB?= =?UTF-8?q?=E5=88=B0=E5=8C=B9=E9=85=8DAPI=E4=B9=8B=E5=90=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:FastAPI路由匹配顺序问题,/{seek_id}在/my-match之前导致404 解决:把my-match/network-match等具体路由移到/{seek_id}之前 --- backend/app/routers/seek.py | 131 ++++++++++++++++++------------------ 1 file changed, 65 insertions(+), 66 deletions(-) diff --git a/backend/app/routers/seek.py b/backend/app/routers/seek.py index 826868c..e0080c4 100644 --- a/backend/app/routers/seek.py +++ b/backend/app/routers/seek.py @@ -172,72 +172,6 @@ def create_seek( db.refresh(seek) return seek -@router.get("/{seek_id}", response_model=SeekInfoResponse) -def get_seek( - seek_id: str, - current_user = Depends(get_current_user), - db: Session = Depends(get_db) -): - """获取寻配号详情""" - seek = db.query(SeekInfo).filter(SeekInfo.id == seek_id).first() - if not seek: - raise HTTPException(status_code=404, detail="寻配号不存在") - - # 增加浏览数 - seek.view_count += 1 - db.commit() - - return seek - -@router.put("/{seek_id}", response_model=SeekInfoResponse) -def update_seek( - seek_id: str, - data: SeekInfoUpdate, - current_user = Depends(get_current_user), - db: Session = Depends(get_db) -): - """更新寻配号""" - if not current_user: - raise HTTPException(status_code=401, detail="请先登录") - - seek = db.query(SeekInfo).filter( - SeekInfo.id == seek_id, - SeekInfo.user_id == current_user.f99_90_id - ).first() - - if not seek: - raise HTTPException(status_code=404, detail="寻配号不存在") - - for key, value in data.model_dump(exclude_unset=True).items(): - setattr(seek, key, value) - - db.commit() - db.refresh(seek) - return seek - -@router.delete("/{seek_id}") -def delete_seek( - seek_id: str, - current_user = Depends(get_current_user), - db: Session = Depends(get_db) -): - """删除寻配号""" - if not current_user: - raise HTTPException(status_code=401, detail="请先登录") - - seek = db.query(SeekInfo).filter( - SeekInfo.id == seek_id, - SeekInfo.user_id == current_user.f99_90_id - ).first() - - if not seek: - raise HTTPException(status_code=404, detail="寻配号不存在") - - seek.status = "deleted" - db.commit() - - return {"message": "删除成功"} - # ============ 匹配相关API ============ @router.get("/my-match") @@ -406,3 +340,68 @@ def get_publisher_info( "phone": publisher.phone, "contact": contact, } + + +# ============ 通配路由(必须放最后,避免匹配冲突)============ +@router.get("/{seek_id}", response_model=SeekInfoResponse) +def get_seek( + seek_id: str, + current_user = Depends(get_current_user), + db: Session = Depends(get_db) +): + """获取寻配号详情""" + seek = db.query(SeekInfo).filter(SeekInfo.id == seek_id).first() + if not seek: + raise HTTPException(status_code=404, detail="寻配号不存在") + seek.view_count += 1 + db.commit() + return seek + +@router.put("/{seek_id}", response_model=SeekInfoResponse) +def update_seek( + seek_id: str, + data: SeekInfoUpdate, + current_user = Depends(get_current_user), + db: Session = Depends(get_db) +): + """更新寻配号""" + if not current_user: + raise HTTPException(status_code=401, detail="请先登录") + seek = db.query(SeekInfo).filter(SeekInfo.id == seek_id).first() + if not seek: + raise HTTPException(status_code=404, detail="寻配号不存在") + if seek.user_id != current_user.f99_90_id: + raise HTTPException(status_code=403, detail="无权限") + if data.title is not None: + seek.title = data.title + if data.content is not None: + seek.content = data.content + if data.expect_category is not None: + seek.expect_category = data.expect_category + if data.expect_version is not None: + seek.expect_version = data.expect_version + if data.expect_packaging is not None: + seek.expect_packaging = data.expect_packaging + if data.status is not None: + seek.status = data.status + db.commit() + db.refresh(seek) + return seek + +@router.delete("/{seek_id}") +def delete_seek( + seek_id: str, + current_user = Depends(get_current_user), + db: Session = Depends(get_db) +): + """删除寻配号""" + if not current_user: + raise HTTPException(status_code=401, detail="请先登录") + seek = db.query(SeekInfo).filter(SeekInfo.id == seek_id).first() + if not seek: + raise HTTPException(status_code=404, detail="寻配号不存在") + if seek.user_id != current_user.f99_90_id: + raise HTTPException(status_code=403, detail="无权限") + seek.status = "deleted" + db.commit() + return {"message": "删除成功"}