Spaces:
Sleeping
Sleeping
File size: 1,550 Bytes
aa9892b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | -- λ¨λ§ β μ¬μ©μ λ§€ν (μ΄λ·°μ¦ μμ¬ κ²μΆ, 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 λΆκ°.
|