Appearance
21. supabase-ai-request-logs.sql
원본 파일: 'C:\Repository\loafacto-hub\docs\web-ui\21. supabase-ai-request-logs.sql'
sql
-- ============================================================
-- AI 요청 로그 테이블 (ai_request_logs)
-- AdminAI > Usage & Performance 통계 집계용
-- ============================================================
-- 1. 테이블 생성
-- ============================================================
CREATE TABLE IF NOT EXISTS public.ai_request_logs (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
feature_id text, -- 기능 ID (챗봇 라우트 :id)
model text NOT NULL, -- LLM 모델명 (e.g. gpt-4o-mini)
provider text NOT NULL, -- 공급자 (openai / ollama)
input_tokens integer, -- 프롬프트 토큰 수
output_tokens integer, -- 완성 토큰 수
total_tokens integer, -- 합계 토큰 수
duration_ms integer, -- 전체 처리 시간 (ms)
ttft_ms integer, -- Time To First Token (ms)
rag_used boolean DEFAULT false, -- RAG 사용 여부
status text NOT NULL DEFAULT 'success', -- 'success' | 'error'
error_message text, -- 에러 발생 시 메시지
created_at timestamptz DEFAULT now() NOT NULL
);
-- 2. 인덱스
-- ============================================================
CREATE INDEX IF NOT EXISTS ai_request_logs_created_at_idx
ON public.ai_request_logs (created_at DESC);
CREATE INDEX IF NOT EXISTS ai_request_logs_feature_id_idx
ON public.ai_request_logs (feature_id);
CREATE INDEX IF NOT EXISTS ai_request_logs_status_idx
ON public.ai_request_logs (status);
-- 3. RLS 활성화
-- ============================================================
ALTER TABLE public.ai_request_logs ENABLE ROW LEVEL SECURITY;
-- 4. 정책 정의
-- ============================================================
-- super_admin, operator 만 조회 가능 (백엔드 service_role은 RLS 우회하여 INSERT)
DROP POLICY IF EXISTS "admin_read_ai_logs" ON public.ai_request_logs;
CREATE POLICY "admin_read_ai_logs" ON public.ai_request_logs
FOR SELECT USING (
EXISTS (
SELECT 1 FROM public.user_roles
WHERE user_id = auth.uid()
AND role IN ('super_admin', 'operator')
)
);
-- ============================================================
-- 참고:
-- INSERT는 백엔드 service_role 키로만 수행되므로 별도 INSERT 정책 불필요.
-- 백엔드 .env에 SUPABASE_SERVICE_KEY (service_role) 설정 필요.
-- ============================================================