93037411fb
- product-swiper.js는 상품이 아니라 카페24 "디자인 보관함" 스킨 파일이라
Admin API(OAuth)로는 접근 불가 — 실물 확인(스크린샷) 결과 디자인 보관함
FTP 계정(호스트/포트/ID/PW, OAuth와 별개)으로만 읽기/쓰기 가능.
app/integrations/cafe24/design_ftp.py 를 표준 ftplib 로 새로 추가.
- 상단 탭에 "모바일 스와이프" 버튼 추가. 편집 화면(swiper.html)은 상세페이지
편집기(_editor.html)와 완전히 같은 문법강조·색상·단축키 JS를 그대로 옮겨
씀(요청사항) — 상품 전용 UI(목록·진열/판매·예약)는 제외.
- 적용 순서도 상세페이지와 동일한 원칙: FTP에서 현재값 재조회 → BACKUP →
지문 대조(충돌 거부) → FTP 쓰기 → MANUAL 버전 + 감사로그(apply_swiper).
textarea의 CRLF는 적용 전 LF로 정규화(안 하면 매번 "변경됨"으로 오판).
- 버전 이력은 cafe24_product_revisions(product_no NOT NULL)에 넣을 수 없어
새 테이블 cafe24_swiper_revisions 추가(scripts/sql/cafe24_db_003_*.sql,
서버에서 별도 실행 필요).
- 신규 env: CAFE24_FTP_HOST(미설정 시 {mall_id}.ftp.cafe24.com)/PORT/USER/
PASSWORD, CAFE24_SWIPER_FTP_PATH. .env.example·문서 갱신.
- 유닛테스트 4건 추가(FTP config 기본값, 가짜 FTP로 읽기/쓰기 왕복·오류 처리).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
38 lines
1.8 KiB
SQL
38 lines
1.8 KiB
SQL
-- =====================================================================
|
|
-- cafe24_db 003 — 모바일 스와이프(product-swiper.js) 편집 버전 이력
|
|
-- =====================================================================
|
|
-- 멱등(idempotent): 여러 번 실행해도 안전. DROP/TRUNCATE 없음.
|
|
--
|
|
-- 실행:
|
|
-- docker exec -i postgres-db psql -U postgres -d cafe24_db \
|
|
-- < scripts/sql/cafe24_db_003_swiper_revisions.sql
|
|
--
|
|
-- 배경:
|
|
-- product-swiper.js 는 상품이 아니라 카페24 "디자인 보관함" FTP 파일이라
|
|
-- cafe24_product_revisions(product_no NOT NULL)에 넣을 수 없다. 같은 백업/
|
|
-- 버전이력 방식을 그대로 쓰기 위한 전용 테이블. file_key 는 앞으로 비슷한
|
|
-- 디자인 파일 편집기가 더 생길 경우를 대비한 구분자다(현재는 한 값만 쓴다).
|
|
-- =====================================================================
|
|
|
|
\set ON_ERROR_STOP on
|
|
|
|
CREATE TABLE IF NOT EXISTS cafe24_swiper_revisions (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
file_key TEXT NOT NULL DEFAULT 'product-swiper',
|
|
content TEXT NOT NULL DEFAULT '',
|
|
revision_type TEXT NOT NULL DEFAULT 'MANUAL',
|
|
memo TEXT NOT NULL DEFAULT '',
|
|
created_by TEXT NOT NULL DEFAULT '',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
CONSTRAINT chk_cafe24_swiper_revision_type CHECK (
|
|
revision_type IN ('SYNC','DRAFT','BACKUP','MANUAL','SCHEDULED','ROLLBACK')
|
|
)
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_cafe24_swiper_revisions_key
|
|
ON cafe24_swiper_revisions (file_key, created_at DESC, id DESC);
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON cafe24_swiper_revisions TO cafe24_app;
|
|
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO cafe24_app;
|
|
|
|
SELECT 'cafe24_db 003 applied' AS status;
|