-- ===================================================================== -- cafe24_db 002 — 예약에 진열/판매 상태 변경 추가 -- ===================================================================== -- 멱등(idempotent): 여러 번 실행해도 안전. DROP/TRUNCATE 없음. -- -- 실행: -- docker exec -i postgres-db psql -U postgres -d cafe24_db \ -- < scripts/sql/cafe24_db_002_schedule_flags.sql -- -- 배경: -- 예약 적용에서 상세페이지 HTML 뿐 아니라 진열/판매 상태도 함께 바꿀 수 있어야 -- 한다("지정 시각에 공개" 같은 운영 시나리오). 세 값 모두 "건드리지 않음"이 -- 가능해야 하므로 NULL 을 허용하는 BOOLEAN 으로 둔다. -- set_display = NULL → 진열 상태 그대로 -- set_selling = NULL → 판매 상태 그대로 -- revision_id = NULL → 상세페이지 HTML 은 바꾸지 않음(상태만 변경) -- -- 되돌리기(자동 복원)는 쓰지 않기로 했다. end_at / end_action / -- end_revision_id / restore_revision_id 컬럼은 남겨두지만 사용하지 않는다 -- (컬럼 삭제는 파괴적이라 하지 않는다). -- ===================================================================== \set ON_ERROR_STOP on ALTER TABLE cafe24_product_schedules ADD COLUMN IF NOT EXISTS set_display BOOLEAN, ADD COLUMN IF NOT EXISTS set_selling BOOLEAN; COMMENT ON COLUMN cafe24_product_schedules.set_display IS '예약 시각에 적용할 진열 상태. NULL 이면 변경하지 않음'; COMMENT ON COLUMN cafe24_product_schedules.set_selling IS '예약 시각에 적용할 판매 상태. NULL 이면 변경하지 않음'; COMMENT ON COLUMN cafe24_product_schedules.revision_id IS '적용할 상세페이지 버전. NULL 이면 HTML 은 바꾸지 않고 진열/판매만 변경'; -- 아무것도 하지 않는 예약은 만들 수 없게 한다(실수 방지). ALTER TABLE cafe24_product_schedules DROP CONSTRAINT IF EXISTS chk_cafe24_schedule_has_action; ALTER TABLE cafe24_product_schedules ADD CONSTRAINT chk_cafe24_schedule_has_action CHECK ( revision_id IS NOT NULL OR set_display IS NOT NULL OR set_selling IS NOT NULL ); SELECT 'cafe24_db 002 applied' AS status;