-- ============================================================================
-- V99 — F-C5 대기열·취소표 알림 (관람객 인앱 알림함)
-- 담당: kintex-visitor(VIS) · 작성: 2026-07-23
-- ----------------------------------------------------------------------------
-- 목적: 세션/미팅 대기 등록 후 취소표 발생 시 대기자 승격 알림을 인앱 알림함에 적재.
--   (외부 채널 발송은 별도 — 여기서는 관람객 대면 인앱 알림 저장/조회.)
-- 원칙: tenant_id='KINTEX' 고정. 본인(user_id) 알림만 조회. 전부 멱등.
-- ============================================================================
CREATE TABLE IF NOT EXISTS visitor_notification (
    tenant_id   varchar(32)  NOT NULL DEFAULT 'KINTEX',
    id          varchar(64)  NOT NULL,
    user_id     varchar(64)  NOT NULL,
    kind        varchar(32)  NOT NULL DEFAULT 'INFO',   -- WAITLIST_PROMOTED/RSVP/MEMBERSHIP/INFO
    title       varchar(160) NOT NULL,
    body        varchar(400),
    ref_type    varchar(32),                            -- SESSION/EVENT/…
    ref_id      varchar(64),
    is_read     boolean      NOT NULL DEFAULT false,
    created_at  timestamptz  NOT NULL DEFAULT now(),
    CONSTRAINT pk_visitor_notification PRIMARY KEY (tenant_id, id)
);
CREATE INDEX IF NOT EXISTS ix_visitor_notification_user ON visitor_notification (tenant_id, user_id, is_read, created_at DESC);

-- 데모 알림 1건(멱등) — app_user 존재 시에만.
INSERT INTO visitor_notification (tenant_id, id, user_id, kind, title, body, ref_type, ref_id)
SELECT 'KINTEX','vn-admin-1','admin-d80a2603','RSVP','세션 신청이 확정되었습니다','현장 안전·시공 규정 브리핑 좌석이 확정되었습니다.','SESSION','sess-safe'
WHERE EXISTS (SELECT 1 FROM app_user u WHERE u.id = 'admin-d80a2603')
ON CONFLICT (tenant_id, id) DO NOTHING;
