diff --git a/app/api/documents.py b/app/api/documents.py index 701f664..ef19327 100644 --- a/app/api/documents.py +++ b/app/api/documents.py @@ -147,6 +147,7 @@ async def list_documents( sub_group: str | None = None, source: 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") @@ -158,6 +159,8 @@ async def list_documents( query = query.where(Document.source_channel == source) if 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()) diff --git a/frontend/src/routes/inbox/+page.svelte b/frontend/src/routes/inbox/+page.svelte index 4c2156d..ff19ba2 100644 --- a/frontend/src/routes/inbox/+page.svelte +++ b/frontend/src/routes/inbox/+page.svelte @@ -59,9 +59,9 @@ async function loadInbox() { loading = true; try { - // TODO(backend): /documents/?review_status=pending 서버 필터 지원 시 page_size 축소 - const data = await api('/documents/?page_size=200'); - documents = (data.items || []).filter((d) => d.review_status === 'pending'); + // 서버 필터 review_status=pending 적용 — page_size 100 이내 안전 + const data = await api('/documents/?review_status=pending&page_size=100'); + documents = data.items || []; } catch (err) { addToast('error', 'Inbox 로딩 실패'); } finally {