From 473f345a46074a7ab678621c4fe6ffab487d50dd Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Thu, 16 Jul 2026 11:18:05 +0800 Subject: [PATCH] feat: add reviewPhase filter for storage release review list Co-authored-by: Cursor --- backend/app/api/storage_release_review.py | 2 ++ backend/app/crud/storage_release_review.py | 22 +++++++++++++++++++ .../test_storage_release_review_phase.py | 15 +++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 backend/tests/test_storage_release_review_phase.py diff --git a/backend/app/api/storage_release_review.py b/backend/app/api/storage_release_review.py index 5c118062..fdfb5d42 100644 --- a/backend/app/api/storage_release_review.py +++ b/backend/app/api/storage_release_review.py @@ -42,6 +42,7 @@ async def list_storage_release_reviews( receptionSource: Optional[str] = None, reviewConclusion: Optional[str] = None, storageStatus: Optional[str] = None, + reviewPhase: Optional[str] = None, db: Session = Depends(get_db), user: dict = Depends(require_menu_code("biz:storageReleaseReview:list")), ): @@ -56,6 +57,7 @@ async def list_storage_release_reviews( review_conclusion=reviewConclusion, storage_status=storageStatus, keyword=keyword, + review_phase=reviewPhase, user_info=user, ) return success_response(result) diff --git a/backend/app/crud/storage_release_review.py b/backend/app/crud/storage_release_review.py index 9f03e7f8..4f868e10 100644 --- a/backend/app/crud/storage_release_review.py +++ b/backend/app/crud/storage_release_review.py @@ -125,6 +125,14 @@ def create_review_from_reception( return obj +def normalize_review_phase(review_phase: Optional[str]) -> Optional[str]: + """Return 'pending' | 'reviewed' or None when absent/invalid.""" + p = (review_phase or "").strip().lower() + if p in ("pending", "reviewed"): + return p + return None + + def list_reviews( db: Session, *, @@ -135,6 +143,7 @@ def list_reviews( review_conclusion: Optional[str] = None, storage_status: Optional[str] = None, keyword: Optional[str] = None, + review_phase: Optional[str] = None, user_info=None, ) -> Dict[str, Any]: q0 = db.query(BizStorageReleaseReview).filter( @@ -144,6 +153,19 @@ def list_reviews( rs = (reception_source or "").strip() if rs: q0 = q0.filter(BizStorageReleaseReview.reception_source == rs) + phase = normalize_review_phase(review_phase) + if phase == "pending": + q0 = q0.filter( + or_( + BizStorageReleaseReview.review_conclusion.is_(None), + BizStorageReleaseReview.review_conclusion == "", + ) + ) + elif phase == "reviewed": + q0 = q0.filter( + BizStorageReleaseReview.review_conclusion.isnot(None), + BizStorageReleaseReview.review_conclusion != "", + ) rc = (review_conclusion or "").strip() if rc: q0 = q0.filter(BizStorageReleaseReview.review_conclusion == rc) diff --git a/backend/tests/test_storage_release_review_phase.py b/backend/tests/test_storage_release_review_phase.py new file mode 100644 index 00000000..329ae413 --- /dev/null +++ b/backend/tests/test_storage_release_review_phase.py @@ -0,0 +1,15 @@ +from app.crud.storage_release_review import normalize_review_phase + + +def test_normalize_review_phase_accepts_pending_and_reviewed(): + assert normalize_review_phase("pending") == "pending" + assert normalize_review_phase("reviewed") == "reviewed" + assert normalize_review_phase(" PENDING ") == "pending" + assert normalize_review_phase("Reviewed") == "reviewed" + + +def test_normalize_review_phase_rejects_unknown(): + assert normalize_review_phase(None) is None + assert normalize_review_phase("") is None + assert normalize_review_phase("all") is None + assert normalize_review_phase("tg") is None