revert(cafe24): 일괄수정 기능 제거
사용자 결정에 따라 화면·라우트·로직·문서를 모두 제거했다. 제거 대상: 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>
This commit is contained in:
+3
-30
@@ -26,7 +26,6 @@ app/integrations/cafe24/ ← 공통 (상품관리 + 향후 주문관리
|
||||
app/modules/cafe24/ ← 상품관리 모듈
|
||||
├─ router.py 루트 라우터(prefix=/cafe24) + 서브 라우터 결합
|
||||
├─ routes_products.py 2분할 화면 · 편집기 조각 · 적용(쓰기)
|
||||
├─ routes_bulk.py 일괄수정 (검사 → 선택 적용)
|
||||
├─ routes_schedules.py 예약 등록·목록·취소
|
||||
├─ worker.py 예약 실행기 (compose 서비스 dbx-cafe24-worker)
|
||||
├─ routes_system.py 연결(OAuth)·상태·API 로그·작업 로그
|
||||
@@ -35,7 +34,7 @@ app/modules/cafe24/ ← 상품관리 모듈
|
||||
├─ store.py 순수 로직 — 상수·상태전이·재시도 규칙·검증
|
||||
├─ tests/ DB/네트워크 없는 유닛테스트
|
||||
└─ templates/cafe24/ _nav.html · products.html(2분할) ·
|
||||
_editor.html(오른쪽 조각) · bulk.html ·
|
||||
_editor.html(오른쪽 조각) ·
|
||||
schedules.html · system.html
|
||||
```
|
||||
|
||||
@@ -56,9 +55,6 @@ app/modules/cafe24/ ← 상품관리 모듈
|
||||
| `GET /cafe24/products/{product_no}/pane` | 오른쪽 편집기 조각 (JS 가 가져감) | `cafe24` |
|
||||
| `GET /cafe24/products/{product_no}` | → `/cafe24/?selected=` 로 리다이렉트(옛 주소) | `cafe24` |
|
||||
| `POST /cafe24/products/{product_no}/apply` | 편집한 HTML 을 카페24에 즉시 적용 | `cafe24` |
|
||||
| `GET /cafe24/bulk` | 일괄수정 화면 (`<style>` 통일) | `cafe24` |
|
||||
| `GET /cafe24/bulk/scan/{product_no}` | 상품 1건 검사 (JSON, 읽기 전용) | `cafe24` |
|
||||
| `POST /cafe24/bulk/apply/{product_no}` | 상품 1건 적용 (JSON) | `cafe24` |
|
||||
| `GET /cafe24/schedules` | 예약 목록 · 취소 | `cafe24` |
|
||||
| `POST /cafe24/schedules` | 예약 등록 (편집기에서) | `cafe24` |
|
||||
| `POST /cafe24/schedules/{id}/cancel` | 대기 중 예약 취소 | `cafe24` |
|
||||
@@ -153,29 +149,7 @@ app/modules/cafe24/ ← 상품관리 모듈
|
||||
|
||||
---
|
||||
|
||||
### 2-3. 일괄수정 (`<style>` 블록 통일)
|
||||
|
||||
87개 상품에 한 번에 쓰는 작업이라 **검사 → 선택 → 적용** 2단계로 나눈다. 무엇이
|
||||
지워지는지 보지 않고 실행하면 남의 CSS(예: 비디오 반응형 스타일)가 조용히 사라진다.
|
||||
|
||||
- **맨 앞 `<style>` 블록 하나만** 바꾼다(`store.replace_first_style_block`). 아래쪽에
|
||||
`<style>` 이 더 있으면 건드리지 않고 화면에 「블록 2개 · 주의」로 표시한다.
|
||||
블록이 없으면 맨 앞에 넣는다.
|
||||
- 검사 결과 표에 **지금 들어 있는 CSS 를 그대로 보여준다** — 그게 지워질 내용이다.
|
||||
변경이 필요한 상품만 자동 선택되고, 이미 같은 내용이면 「이미 동일」로 제외된다.
|
||||
- 적용은 상품 1건당 1요청이다. 87건을 한 요청으로 묶으면 1분 가까이 걸려 프록시
|
||||
타임아웃에 걸리고, 동시에 던지면 호출 제한(429)에 걸린다. 브라우저가 순차 호출하며
|
||||
진행률을 보여주고, 한 건 실패가 나머지를 막지 않는다.
|
||||
- 적용 순서는 단건 편집과 같다: **현재값 재조회 → BACKUP → 교체 → PUT → MANUAL +
|
||||
감사로그**(`action=bulk_style`). 지문 대조는 없다 — 방금 읽은 값을 바로 쓰기 때문.
|
||||
- PC/모바일 분리 상품은 각 필드의 `<style>` 블록을 각각 바꾼다.
|
||||
|
||||
교체할 내용은 `routes_bulk.TARGET_STYLE_BLOCK` 에 있다. `<style>` 안쪽은
|
||||
`format_html` 이 건드리지 않으므로 탭 들여쓰기까지 그대로 저장된다.
|
||||
|
||||
---
|
||||
|
||||
### 2-4. 예약관리 (지정 시각 자동 적용)
|
||||
### 2-3. 예약관리 (지정 시각 자동 적용)
|
||||
|
||||
**되돌리기(자동 복원)는 쓰지 않는다.** 예약은 "그 시각에 이 내용을 적용" 하나뿐이다.
|
||||
한 예약에서 세 가지를 각각 고를 수 있고, 하나 이상은 반드시 골라야 한다(DB CHECK 제약).
|
||||
@@ -299,7 +273,6 @@ cafe24_oauth_tokens 저장
|
||||
모바일 소스를 따로 보여주지 않는다 — 한쪽만 바뀌어 어긋나는 사고가 없어진다.
|
||||
분리 사용 상품의 모바일 내용이 PC 와 달랐다면 덮어쓰기 전에 **그 내용도 BACKUP
|
||||
revision 으로 남긴다**(백업이 없으면 되찾을 방법이 없다).
|
||||
일괄수정(`routes_bulk`)은 각 필드의 `<style>` 블록만 바꾼다.
|
||||
- 실패해도 BACKUP 은 이미 남아 있으므로 오류 메시지에 버전 번호를 알려준다.
|
||||
|
||||
---
|
||||
@@ -390,7 +363,7 @@ DB·네트워크 없이 암호화 왕복, 토큰 만료/자동갱신, 상태 노
|
||||
| 4 | 즉시 적용 · BACKUP · Revision · 감사로그 | ✅ 완료 |
|
||||
| 5 | 예약 DB · Worker(compose 서비스) · 예약관리 화면 | ✅ 완료 |
|
||||
| 6 | 자동 종료/복원 · 롤백 | ✖ 되돌리기는 쓰지 않기로 결정. 버전 선택 복원만 남음 |
|
||||
| 7 | 일괄 수정 · 일괄 예약 · Rate limit 제어 | ◐ `<style>` 통일 일괄수정 완료. 일괄 예약 예정 |
|
||||
| 7 | 일괄 수정 · 일괄 예약 · Rate limit 제어 | ✖ 일괄수정은 사용하지 않기로 제거. 필요해지면 다시 논의 |
|
||||
|
||||
Phase 5 의 worker 는 `app/modules/cafe24/worker.py` 에 둔다 — `Dockerfile` 이
|
||||
`COPY app/ ./app/` 만 하므로 `scripts/` 에 두면 이미지에 포함되지 않는다.
|
||||
|
||||
Reference in New Issue
Block a user