talk / backend /sql /019_device_user_links.sql
user
Deploy StyleVoiceChat backend
aa9892b
Raw History Blame Contribute Delete
1.55 kB
-- 단말 ↔ μ‚¬μš©μž λ§€ν•‘ (μ–΄λ·°μ¦ˆ μ˜μ‹¬ κ²€μΆœ, 2026-05-06).
--
-- λ°°κ²½: device_daily_usage 의 last_user_id λŠ” λ§ˆμ§€λ§‰ 1개 κ³„μ •λ§Œ μ €μž₯ν•˜μ—¬
-- 동일 λ‹¨λ§μ˜ 닀쀑 계정 μ‚¬μš© 좔적이 μ•ˆ 됨. 별도 λ§€ν•‘ ν…Œμ΄λΈ”λ‘œ (단말,
-- μ‚¬μš©μž) unique 쑰합을 λˆ„μ  β†’ admin ν™”λ©΄μ—μ„œ "이 단말이 N개 κ³„μ •μœΌλ‘œ
-- 접속" 톡계 κ°€λŠ₯.
--
-- μ •μ±…:
-- - PK = (client_ip, device_fp, user_id) 3 컬럼 unique
-- - upsert μ‹œ last_seen_at κ°±μ‹ , total_credits_used λˆ„μ 
-- - admin λͺ¨λ‹ˆν„°λ§μš© β€” 일반 μ‚¬μš©μž 영ν–₯ μ—†μŒ
CREATE TABLE IF NOT EXISTS public.device_user_links (
client_ip TEXT NOT NULL,
device_fp TEXT NOT NULL,
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
first_seen_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
last_seen_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
total_credits_used INTEGER NOT NULL DEFAULT 0,
PRIMARY KEY (client_ip, device_fp, user_id)
);
-- 단말별 μ‚¬μš©μž 수 μ§‘κ³„μš©
CREATE INDEX IF NOT EXISTS idx_device_user_links_device
ON public.device_user_links (client_ip, device_fp);
-- μ‚¬μš©μžλ³„ 단말 수 μ§‘κ³„μš© (μ—­λ°©ν–₯)
CREATE INDEX IF NOT EXISTS idx_device_user_links_user
ON public.device_user_links (user_id);
-- 졜근 ν™œλ™ μ •λ ¬μš©
CREATE INDEX IF NOT EXISTS idx_device_user_links_seen
ON public.device_user_links (last_seen_at DESC);
ALTER TABLE public.device_user_links ENABLE ROW LEVEL SECURITY;
-- μ •μ±… λ―Έμ„€μ • = μ„œλΉ„μŠ€ 둀만 톡과. μ‚¬μš©μž 직접 SELECT λΆˆκ°€.