fix(inbox): page_size=200 → 422 해결, review_status 서버 필터 추가

Inbox 페이지가 /documents/?page_size=200 를 호출하는데 백엔드 Query 가
le=100 이라 422 발생 — Phase 2 첫 commit(2026-04-02)부터 dormant 버그.
inbox 코드 안에 'TODO(backend): review_status filter 지원 시 page_size 축소'
주석이 있던 상태.

backend:
- list_documents 에 review_status: str | None Query 파라미터 추가
- WHERE 절에 review_status 매칭 분기 추가

frontend:
- /documents/?review_status=pending&page_size=100 으로 변경
- 클라이언트 필터링 코드 제거 (서버 필터로 대체)

100 미만 안전. pending 이 100 넘으면 다음 페이지 로직 추가 필요 (별도 작업).
This commit is contained in:
Hyungi Ahn
2026-04-09 08:31:51 +09:00
parent 46ba9dd231
commit cdcbb07561
2 changed files with 6 additions and 3 deletions

View File

@@ -147,6 +147,7 @@ async def list_documents(
sub_group: str | None = None, sub_group: str | None = None,
source: str | None = None, source: str | None = None,
format: str | None = None, format: str | None = None,
review_status: str | None = Query(None, description="pending | approved | rejected"),
): ):
"""문서 목록 조회 (페이지네이션 + 필터, 뉴스 제외)""" """문서 목록 조회 (페이지네이션 + 필터, 뉴스 제외)"""
query = select(Document).where(Document.deleted_at == None, Document.source_channel != "news") query = select(Document).where(Document.deleted_at == None, Document.source_channel != "news")
@@ -158,6 +159,8 @@ async def list_documents(
query = query.where(Document.source_channel == source) query = query.where(Document.source_channel == source)
if format: if format:
query = query.where(Document.file_format == format) query = query.where(Document.file_format == format)
if review_status:
query = query.where(Document.review_status == review_status)
# 전체 건수 # 전체 건수
count_query = select(func.count()).select_from(query.subquery()) count_query = select(func.count()).select_from(query.subquery())

View File

@@ -59,9 +59,9 @@
async function loadInbox() { async function loadInbox() {
loading = true; loading = true;
try { try {
// TODO(backend): /documents/?review_status=pending 서버 필터 지원 시 page_size 축소 // 서버 필터 review_status=pending 적용 — page_size 100 이내 안전
const data = await api('/documents/?page_size=200'); const data = await api('/documents/?review_status=pending&page_size=100');
documents = (data.items || []).filter((d) => d.review_status === 'pending'); documents = data.items || [];
} catch (err) { } catch (err) {
addToast('error', 'Inbox 로딩 실패'); addToast('error', 'Inbox 로딩 실패');
} finally { } finally {