8ec38db6d1
사용자 결정에 따라 화면·라우트·로직·문서를 모두 제거했다. 제거 대상: routes_bulk.py (파일 삭제) templates/cafe24/bulk.html (파일 삭제) _nav.html 「일괄수정」 탭 router.py import·include·설명 store.py find_style_blocks / replace_first_style_block / 정규식 tests <style> 블록 교체 테스트 6건 docs 2-3 절, 경로 표 3줄, 구조도, Phase 7 표기 DB 는 손대지 않았다. 일괄수정은 전용 스키마를 만들지 않았고, 기존 테이블에 남은 기록은 **실제로 상품에 적용된 변경의 이력**이다. 특히 그때 만들어진 BACKUP revision 은 일괄 적용 이전 내용을 되찾을 유일한 수단이라 지우면 복구가 불가능해진다. 감사로그(action='bulk_style')도 누가 언제 무엇을 바꿨는지 남기는 기록이라 보존한다. 정말 지워야 한다면 별도로 요청받아 진행한다. 부수 수정: 예약 시각 검증 테스트가 실행 시각의 초에 따라 실패할 수 있었다. `datetime-local` 은 초를 버리므로 지금 이 분(分)을 고르면 최대 59초 과거가 되는데, 테스트가 now 의 초를 고정하지 않아 경계에서 흔들렸다. now 를 고정해 결정적으로 만들었다 (3회 반복 실행으로 확인). 검증: 유닛테스트 59개 통과, 라우트 13개, 템플릿 컴파일 확인, 모듈에 bulk 참조 0건. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
"""카페24 상품 상세페이지 관리 모듈 라우터.
|
|
|
|
- 경로: /cafe24
|
|
- 권한: 로그인 + `cafe24` 모듈 권한 (관리자는 항상 통과). 서버 측 검사.
|
|
카페24 연결(OAuth) 변경은 `is_admin` 만.
|
|
- 데이터: Cafe24Store (cafe24_db / PostgreSQL) 전용.
|
|
CAFE24_DB_URL 미설정 시 store 가 None 이며, 각 페이지는 "설정 필요" 안내.
|
|
- 카페24 API 호출은 app/integrations/cafe24 공통 계층을 통해서만 한다.
|
|
|
|
라우트가 많아 기능별 파일로 나눈다(다른 모듈의 단일 router.py 패턴을 규모 때문에
|
|
확장한 것). 여기서는 루트 라우터를 만들고 서브 라우터를 결합한다.
|
|
routes_products 상품 목록/검색 · 상세설명 조회·편집·적용
|
|
routes_schedules 예약 등록·목록·취소 (실행은 worker.py)
|
|
routes_system 연결(OAuth)·상태·API 로그·작업 로그
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
from fastapi import APIRouter
|
|
|
|
from .routes_products import products_router
|
|
from .routes_schedules import schedules_router
|
|
from .routes_system import system_router
|
|
|
|
logger = logging.getLogger("cafe24.router")
|
|
|
|
router = APIRouter(prefix="/cafe24", tags=["cafe24"])
|
|
|
|
router.include_router(products_router)
|
|
router.include_router(schedules_router)
|
|
router.include_router(system_router)
|
|
|
|
|
|
@router.get("/health")
|
|
def health() -> dict[str, str]:
|
|
"""포털 카드의 상태 점(dot) 용. 인증 불필요 — 상태 문자열만 반환."""
|
|
return {"status": "ok"}
|