"""쿠팡 밀크런(cupang) 모듈. 라우터/저장소/템플릿을 한 디렉토리에서 관리한다. - 라우터: `router.py` (FastAPI APIRouter, prefix=/cupang) - 저장소: `db.py` (cupang_db / PostgreSQL 전용) + `store.py` (상수/계산) - 상품검색: `itemcode.py` (itemcode_db 읽기 전용) - 템플릿: `templates/cupang/` 데이터 저장은 cupang_db 전용이다. CUPANG_DB_URL 미설정 시 build_cupang_store 는 None 을 반환하고, 라우터가 "설정 필요" 안내 페이지를 보여준다(앱은 죽지 않음). """ from typing import Any from .router import router from .store import DEFAULT_CENTERS, SHEET_COLUMNS, SHIP_METHODS, STATUSES, compute_boxes __all__ = [ "router", "STATUSES", "SHIP_METHODS", "SHEET_COLUMNS", "DEFAULT_CENTERS", "compute_boxes", "build_cupang_store", "build_itemcode_reader", ] def build_cupang_store(*, dsn: str | None) -> Any: """CUPANG_DB_URL 이 있으면 CupangDBStore, 없으면 None. JSON 폴백을 두지 않는다(운영 데이터 분기 방지). None 이면 라우터가 안내 페이지 표시. """ if not dsn: return None from .db import CupangDBStore # 지연 import (개발 환경 deps 없을 수 있음) return CupangDBStore(dsn) def build_itemcode_reader() -> Any: """itemcode_db 읽기 전용 상품 검색 리더. 설정 없으면 비활성(enabled=False).""" from .itemcode import ItemcodeReader # 지연 import return ItemcodeReader()