9e707be5ac
- app/modules/cupang: router/db/store/itemcode + 템플릿 5종 - cupang_db 전용(JSON 폴백 없음). CUPANG_DB_URL 미설정 시 안내 페이지 - 월간 달력 + 출고 묶음(헤더+라인), 박스 입수량 자동계산(서버 재계산) - 입고센터 관리(사용중 soft delete), 박스규칙 upsert, 엑셀 내보내기 - 상품 검색은 itemcode_db 읽기 전용(미설정 시 수동 입력) - MODULE_KEYS/메뉴/아이콘/라벨 동기화, scripts/sql/cupang_db_init.sql(멱등) - app/data/ gitignore 추가(PII) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
"""쿠팡 밀크런(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()
|