➕ 기능 추가
무엇 — 메인 컨텐츠·퀵메뉴의 상품 순서를 드래그 외에 엑셀 업로드와 위치 지정(첫/N번째)으로 편집하고, 품절·미노출·중복 순번을 등록 시 경고한다.📍 위치: 운영관리 › 메인 컨텐츠 관리 › 상품 편성
핵심 결정
편집 방식
기존 드래그에 엑셀 순서 업로드·위치 지정 삽입(첫/N번째/마지막) 추가
오토스크롤
드래그 중 화면 상·하단 근접 시 휠 커서 자동 스크롤 — 전 페이지 공통 적용
경고 대상
품절(sold_out)·장기품절·미노출(usable=false)·순번 중복/빈칸 코드 등록 시 경고
등록 허용
[가정] 품절·미노출 코드도 등록은 허용하되 저장 전 경고 확인(막지 않음)
데이터
main_content_product.sort_order·usable 재사용, 순번은 저장 시 1..N 재채번
01화면 — 먼저 보기
이 티켓이 실제로 어떤 화면이 되는지부터
세부 규칙(품절·미노출 코드 등록 허용 여부, 경고 강도)은 구두 확인 후 확정 — 본 기획은 합리적 기본값 기준이다.
현행 화면 · 실제 캡처현행 「메인 컨텐츠」 — 편집(순서 지정) 개선 대상
변경안 · 이렇게 바뀜
운영관리 › 메인 컨텐츠 관리 › 상품 편성기능 추가
노출 상태 ▾🔍 히어로코드·상품명 검색엑셀로 순서 업로드엑셀 양식 다운로드상품 추가
▲ 컨텐츠 상품 편성 편집 목록 — 바뀌는 컬럼 🆕 강조(실 데이터 예시)
1컨텐츠 상품 편성 진입 — 메인 컨텐츠 관리에서 컨텐츠를 열면 편성된 상품 목록이 순번(sort_order) 오름차순으로 표시된다. 각 행에 실시간 '상태' 뱃지(품절/장기품절/미노출)가 뜬다.
2드래그로 순서 변경 + 오토스크롤 — 항목을 잡아 위/아래로 끌면 리스트 경계에서 휠 커서로 자동 스크롤된다. 긴 목록도 스크롤 병행 없이 이동 가능(전 페이지 공통).
3상품 추가 — 위치 지정 — '상품 추가'에서 히어로코드를 고르고 삽입 위치(첫번째·N번째·맨 뒤)를 지정한다. 지정 위치 이후 순번은 자동으로 밀린다.
4엑셀로 순서 일괄 업로드 — 양식(히어로코드·순번·노출)을 내려받아 편집 후 업로드하면 편성이 전체 치환된다. 순번 중복·빈칸은 자동 정규화된다.
5등록 경고 확인 — 품절·미노출·미존재 코드가 감지되면 저장 전 경고 요약이 뜬다. 관리자가 확인하면 저장, 무시 시 warning_count로 로그에 기록.
6저장·재채번·감사 — 저장 시 컨텐츠 단위로 순번을 1..N 재채번하고, 편집 스냅샷을 sort_log에 남겨 되돌리기와 감사를 지원한다.
main_content READ
idPK varchar(100)
namevarchar(30)
typevarchar(30)
sort_orderinteger
usableboolean
메인 컨텐츠(전시 섹션) 마스터. 섹션 자체의 노출·순서 소스.
main_content_product WRITE
content_idPK varchar(100)
hero_product_codePK varchar(100)
sort_orderinteger
usableboolean
badgejsonb
created_byvarchar(20)
컨텐츠 내 상품 편성. MD-18 편집 대상(순서·노출).
seller_product READ
hero_product_codeFK varchar(100)
sold_outboolean
long_term_sold_outboolean
is_original_displayedboolean
상품 상태 소스. 품절/장기품절 경고 판정에 실시간 조회.
quick_menu READ
menu_idPK bigint
namevarchar(255)
sortinteger
content_idFK varchar(255)
퀵메뉴 노출 관리. 동일한 순서 편집·오토스크롤 공통 적용 대상.
main_content_product_sort_log 신규
idPK bigserial
content_idFK varchar(100)
edit_typevarchar(20)
payloadjsonb
warning_countinteger
[가정] 순서 편집 감사·되돌리기용 스냅샷 로그(신규 최소).
main_content.id 1 : N main_content_product.content_id
main_content_product.hero_product_code N : 1 seller_product.hero_product_code (품절·미노출 판정)
quick_menu.content_id N : 1 main_content.id
main_content_product_sort_log.content_id N : 1 main_content.id
-- ============================================================
-- MD-18 컨텐츠 편집 개선
-- 순서 편집은 기존 컬럼(main_content_product.sort_order, quick_menu.sort)을
-- 재사용한다. 스키마 신규는 감사/되돌리기용 로그 1개만 최소로 추가한다.
-- ============================================================
-- (1) 기존 컬럼 재사용 확인용 참고 (변경 아님)
-- main_content_product.sort_order integer NOT NULL DEFAULT 0 → 상품 노출 순서
-- main_content_product.usable boolean NOT NULL DEFAULT true → 노출/미노출
-- PK (content_id, hero_product_code) → 동일 컨텐츠 내 중복 코드 방지(이미 보장)
-- (2) [가정] 엑셀 업로드/위치삽입 대량 재정렬 감사 로그 (신규, 최소)
CREATE TABLE main_content_product_sort_log (
id bigserial PRIMARY KEY, -- 로그 PK
content_id varchar(100) NOT NULL, -- 대상 컨텐츠(main_content.id)
edit_type varchar(20) NOT NULL, -- 'EXCEL_UPLOAD' | 'INSERT_AT' | 'DRAG'
payload jsonb NOT NULL, -- 적용 전/후 (hero_product_code, sort_order) 스냅샷
warning_count integer NOT NULL DEFAULT 0, -- 등록 시 감지된 경고(품절/미노출/중복/빈칸) 수
created_by varchar(20) NOT NULL, -- 편집 관리자
created_on timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
COMMENT ON TABLE main_content_product_sort_log IS '컨텐츠 상품 순서 편집(엑셀/위치삽입/드래그) 감사 및 되돌리기용 스냅샷';
COMMENT ON COLUMN main_content_product_sort_log.edit_type IS '편집 방식: EXCEL_UPLOAD/INSERT_AT/DRAG';
CREATE INDEX ix_mcp_sort_log_content ON main_content_product_sort_log (content_id, created_on DESC);
-- (3) [가정] 저장 시 순번 정규화(1..N 재채번) 보조 함수 — 중복/빈칸 방지
-- 업로드/삽입/드래그 확정 시 컨텐츠 단위로 sort_order를 1부터 재채번한다.
-- (애플리케이션 트랜잭션에서 호출; 참고 구현)
CREATE OR REPLACE FUNCTION renumber_main_content_product(p_content_id varchar)
RETURNS void AS $$
BEGIN
WITH ranked AS (
SELECT hero_product_code,
ROW_NUMBER() OVER (ORDER BY sort_order, hero_product_code) AS rn
FROM main_content_product
WHERE content_id = p_content_id
)
UPDATE main_content_product m
SET sort_order = r.rn
FROM ranked r
WHERE m.content_id = p_content_id
AND m.hero_product_code = r.hero_product_code;
END;
$$ LANGUAGE plpgsql;
COMMENT ON FUNCTION renumber_main_content_product(varchar) IS '컨텐츠 단위 sort_order 1..N 재채번(빈칸/중복 순번 정규화)';
04화면 상세 — 세부 표·규칙
목록 외 품목표·모달·규칙 등 세부 화면
상품 추가 모달 — 위치 지정
삽입 위치=첫번째/N번째/맨 뒤. 품절·미노출 코드 선택 시 행에 경고 배지, 저장 시 확인 모달. 미존재 코드는 선택 불가.
예외·경고 처리 규칙표
'전 페이지 공통' 규칙: 퀵메뉴 노출 관리(quick_menu.sort)에도 동일한 순번 정규화·오토스크롤 적용.