From 4863425ca528f973227f07967c17cda780420e01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=ED=97=8C?= Date: Thu, 9 Jul 2026 11:33:46 +0900 Subject: [PATCH] =?UTF-8?q?refactor(lps):=20job=5Ftype=20=EB=AA=85?= =?UTF-8?q?=EC=B9=AD=20=EC=A0=95=EB=A6=AC=20=E2=80=94=20=EC=B6=9C=EC=B2=98?= =?UTF-8?q?=20=EA=B8=B0=EB=B0=98(=EB=A0=88=EA=B1=B0=EC=8B=9C=20negowiz=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 레거시 용어(negowiz)와 모호한 이름(new/single)을 출처 기반으로 변경. 우선순위 1~4는 유지, 기본값 single→manual. - new_product(1) / manual(2, 기본) / partner(3) / batch(4) - lps_service 우선순위 맵 + protocol 기본값/설명 + docs/api.md 표 + 테스트 갱신 - 전체 54/54 Co-Authored-By: Claude Opus 4.8 (1M context) --- lps/docs/api.md | 12 ++++++++++-- lps/router/v1/lps/protocol.py | 2 +- lps/services/lps_service.py | 2 +- lps/tests/test_lps_api.py | 4 ++-- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lps/docs/api.md b/lps/docs/api.md index 37c7a66..fb268f0 100644 --- a/lps/docs/api.md +++ b/lps/docs/api.md @@ -27,7 +27,7 @@ "model": "모카골드", // (선택) 모델명 "company": "동서식품", // (선택) 제조사/브랜드 "price": "25000", // (선택) 현재가 — 있으면 가격 범위 필터 기준 - "job_type": "single" // (선택) 요청 유형 → 우선순위 + "job_type": "manual" // (선택) 요청 유형 → 우선순위 } ] } @@ -35,7 +35,15 @@ > **specification은 나눌 필요 없이** "1박스, 160개입"처럼 통째로 넣으면 AI가 해석합니다. -**`job_type` → 우선순위** (낮을수록 먼저): `new`(1) · `single`(2, 기본) · `negowiz`(3) · `batch`(4) +**`job_type` → 우선순위** (낮을수록 먼저): +| 값 | 우선순위 | 의미 | +|----|:---:|------| +| `new_product` | 1 (최우선) | 신규 상품 등록 시 | +| `manual` | 2 (기본) | 담당자 수동 요청 | +| `partner` | 3 | 외부 시스템/파트너 연동 | +| `batch` | 4 (최하위) | 정기 배치 | + +(알 수 없는 값은 batch와 동급으로 처리) **응답** ```json diff --git a/lps/router/v1/lps/protocol.py b/lps/router/v1/lps/protocol.py index 3618e57..5851a36 100644 --- a/lps/router/v1/lps/protocol.py +++ b/lps/router/v1/lps/protocol.py @@ -12,7 +12,7 @@ class SearchItem(BaseModel): product_code: str = Field(description="상품 식별 코드(커머스 기준). dedupe 키로도 사용") product_name: str = Field(description="상품명") - job_type: str = Field("single", description="요청 유형: new|single|negowiz|batch → 우선순위 매핑") + job_type: str = Field("manual", description="요청 유형(우선순위): new_product|manual|partner|batch") model: str = Field("", description="모델명") specification: str = Field("", description="규격(용량/개입/수량 등)") company: str = Field("", description="제조사/브랜드") diff --git a/lps/services/lps_service.py b/lps/services/lps_service.py index 385b607..0b8b4c8 100644 --- a/lps/services/lps_service.py +++ b/lps/services/lps_service.py @@ -22,7 +22,7 @@ from router.v1.lps.protocol import ( ) # 요청 유형 → 우선순위(낮을수록 우선). 알 수 없는 유형은 가장 낮은 우선순위(배치와 동급). -_PRIORITY = {"new": 1, "single": 2, "negowiz": 3, "batch": 4} +_PRIORITY = {"new_product": 1, "manual": 2, "partner": 3, "batch": 4} class LpsService: diff --git a/lps/tests/test_lps_api.py b/lps/tests/test_lps_api.py index a5e5925..0b08579 100644 --- a/lps/tests/test_lps_api.py +++ b/lps/tests/test_lps_api.py @@ -12,7 +12,7 @@ async def clean_jobs(db_engine): async def test_search_enqueues_jobs(client, clean_jobs): body = {"data": [ - {"product_code": "P1", "product_name": "커피", "job_type": "new"}, + {"product_code": "P1", "product_name": "커피", "job_type": "new_product"}, {"product_code": "P2", "product_name": "무선마우스", "specification": "M170"}, ]} r = await client.post("/v1/lps/search", json=body) @@ -24,7 +24,7 @@ async def test_search_enqueues_jobs(client, clean_jobs): async def test_search_dedupes_active_product(client, clean_jobs): - body = {"data": [{"product_code": "P1", "product_name": "커피", "job_type": "new"}]} + body = {"data": [{"product_code": "P1", "product_name": "커피", "job_type": "new_product"}]} await client.post("/v1/lps/search", json=body) r2 = await client.post("/v1/lps/search", json=body) # 같은 product_code 재요청 item = r2.json()["items"][0]