Skip to content
Loafacto 문서/참고 문서/web-ui 문서/11. supabase-banners-table.sql

11. supabase-banners-table.sql

원본 파일: 'C:\Repository\loafacto-hub\docs\web-ui\11. supabase-banners-table.sql'

sql
-- =============================================================================
-- 배너/팝업(banner_slots) 테이블 — 점검 배너, 이벤트 배너, 전체 공지 팝업
-- user_roles 적용 후 Supabase SQL Editor에서 실행하세요.
-- =============================================================================

CREATE TABLE IF NOT EXISTS public.banner_slots (
  slot_type text PRIMARY KEY CHECK (slot_type IN ('maintenance', 'event', 'notice_popup')),
  enabled boolean NOT NULL DEFAULT false,
  title text NOT NULL DEFAULT '',
  message text NOT NULL DEFAULT '',
  link text,
  start_at timestamptz,
  end_at timestamptz,
  updated_at timestamptz
);

COMMENT ON TABLE public.banner_slots IS '배너/팝업 슬롯 3종: 점검 안내(maintenance), 이벤트 배너(event), 전체 공지 팝업(notice_popup).';

-- 초기 행 3개
INSERT INTO public.banner_slots (slot_type, enabled, title, message, link, updated_at) VALUES
  ('maintenance', false, '점검 안내', '일시적인 점검 중입니다. 잠시 후 다시 이용해 주세요.', null, now()),
  ('event', false, '이벤트', '진행 중인 이벤트를 확인하세요.', '', now()),
  ('notice_popup', false, '공지', '', null, now())
ON CONFLICT (slot_type) DO NOTHING;

-- RLS
ALTER TABLE public.banner_slots ENABLE ROW LEVEL SECURITY;

-- SELECT: 누구나 조회 (메인 화면에서 비로그인 포함 노출용)
CREATE POLICY "Anyone can read banner_slots"
ON public.banner_slots FOR SELECT
TO public
USING (true);

-- UPDATE: 관리자만 수정
CREATE POLICY "Only admins can update banner_slots"
ON public.banner_slots FOR UPDATE
TO authenticated
USING (
  EXISTS (
    SELECT 1 FROM public.user_roles r
    WHERE r.user_id = auth.uid() AND r.role IN ('super_admin', 'operator')
  )
)
WITH CHECK (
  EXISTS (
    SELECT 1 FROM public.user_roles r
    WHERE r.user_id = auth.uid() AND r.role IN ('super_admin', 'operator')
  )
);

GRANT SELECT ON public.banner_slots TO anon;
GRANT SELECT ON public.banner_slots TO authenticated;
GRANT UPDATE ON public.banner_slots TO authenticated;