-- ============================================================ -- 마이그레이션 006: 게시판 (BOARD_POST) -- wing 스키마에 생성, auth.AUTH_USER FK 참조 -- ============================================================ -- Step 1: 게시판 테이블 CREATE TABLE IF NOT EXISTS BOARD_POST ( POST_SN SERIAL PRIMARY KEY, CATEGORY_CD VARCHAR(20) NOT NULL, TITLE VARCHAR(200) NOT NULL, CONTENT TEXT, AUTHOR_ID UUID NOT NULL, VIEW_CNT INTEGER NOT NULL DEFAULT 0, PINNED_YN CHAR(1) NOT NULL DEFAULT 'N', USE_YN CHAR(1) NOT NULL DEFAULT 'Y', REG_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), MDFCN_DTM TIMESTAMPTZ, CONSTRAINT FK_BOARD_AUTHOR FOREIGN KEY (AUTHOR_ID) REFERENCES auth.AUTH_USER(USER_ID), CONSTRAINT CK_BOARD_CATEGORY CHECK (CATEGORY_CD IN ('NOTICE','DATA','QNA','MANUAL')), CONSTRAINT CK_BOARD_PINNED CHECK (PINNED_YN IN ('Y','N')), CONSTRAINT CK_BOARD_USE CHECK (USE_YN IN ('Y','N')) ); COMMENT ON TABLE BOARD_POST IS '게시판 게시글'; COMMENT ON COLUMN BOARD_POST.CATEGORY_CD IS '카테고리: NOTICE=공지, DATA=자료실, QNA=Q&A, MANUAL=해경매뉴얼'; COMMENT ON COLUMN BOARD_POST.PINNED_YN IS '상단고정 여부'; COMMENT ON COLUMN BOARD_POST.USE_YN IS '사용여부 (N=논리삭제)'; CREATE INDEX IF NOT EXISTS IDX_BOARD_CATEGORY ON BOARD_POST(CATEGORY_CD); CREATE INDEX IF NOT EXISTS IDX_BOARD_AUTHOR ON BOARD_POST(AUTHOR_ID); CREATE INDEX IF NOT EXISTS IDX_BOARD_REG_DTM ON BOARD_POST(REG_DTM DESC); -- Step 2: 초기 데이터 (기존 프론트엔드 mockPosts 이전) -- admin 사용자 ID 조회 DO $$ DECLARE v_admin_id UUID; BEGIN SELECT USER_ID INTO v_admin_id FROM auth.AUTH_USER WHERE USER_ACNT = 'admin' LIMIT 1; IF v_admin_id IS NOT NULL THEN INSERT INTO BOARD_POST (CATEGORY_CD, TITLE, CONTENT, AUTHOR_ID, VIEW_CNT, PINNED_YN, REG_DTM) VALUES ('NOTICE', '시스템 업데이트 안내', '시스템 업데이트 관련 안내사항입니다.', v_admin_id, 245, 'Y', '2025-02-15'::timestamptz), ('NOTICE', '2025년 방제 교육 일정 안내', '2025년도 방제 교육 일정을 안내합니다.', v_admin_id, 189, 'Y', '2025-02-14'::timestamptz), ('DATA', '방제 매뉴얼 업데이트 (2025년 개정판)', '2025년 개정판 방제 매뉴얼입니다.', v_admin_id, 423, 'N', '2025-02-10'::timestamptz), ('QNA', 'HNS 대기확산 분석 결과 해석 문의', 'HNS 분석 결과 해석 방법을 문의합니다.', v_admin_id, 156, 'N', '2025-02-08'::timestamptz), ('DATA', '2024년 유류오염사고 통계 자료', '2024년도 유류오염사고 통계 자료를 공유합니다.', v_admin_id, 312, 'N', '2025-02-05'::timestamptz), ('QNA', '유출유 확산 예측 알고리즘 선택 기준', '확산 예측 시 알고리즘 선택 기준을 문의합니다.', v_admin_id, 267, 'N', '2025-02-03'::timestamptz), ('DATA', '해양오염 방제 장비 운용 가이드', '방제 장비 운용 가이드 문서입니다.', v_admin_id, 534, 'N', '2025-01-28'::timestamptz), ('QNA', 'SCAT 조사 방법 관련 질문', 'SCAT 현장 조사 방법에 대해 질문합니다.', v_admin_id, 198, 'N', '2025-01-25'::timestamptz), ('DATA', 'HNS 물질 안전보건자료 (MSDS) 모음', 'HNS 물질별 MSDS 자료 모음입니다.', v_admin_id, 645, 'N', '2025-01-20'::timestamptz), ('QNA', '항공촬영 드론 운용 시 주의사항', '드론 운용 시 주의할 점을 문의합니다.', v_admin_id, 221, 'N', '2025-01-15'::timestamptz) ON CONFLICT DO NOTHING; END IF; END $$; -- 검증 SELECT POST_SN, CATEGORY_CD, TITLE, VIEW_CNT, PINNED_YN FROM BOARD_POST ORDER BY POST_SN;