talk / backend /sql /001_credits.sql
user
Deploy StyleVoiceChat backend
aa9892b
Raw History Blame Contribute Delete
2.57 kB
-- ํฌ๋ ˆ๋”ง ์‹œ์Šคํ…œ ํ…Œ์ด๋ธ” (Supabase SQL Editor์—์„œ ์‹คํ–‰)
-- 1. ์‚ฌ์šฉ์ž ํฌ๋ ˆ๋”ง ์ž”์•ก
CREATE TABLE IF NOT EXISTS public.user_credits (
user_id UUID PRIMARY KEY REFERENCES auth.users(id) ON DELETE CASCADE,
balance INTEGER NOT NULL DEFAULT 100,
total_earned INTEGER NOT NULL DEFAULT 100,
total_spent INTEGER NOT NULL DEFAULT 0,
daily_reset_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- RLS: ๋ณธ์ธ๋งŒ ์กฐํšŒ, service_role๋งŒ ์ˆ˜์ •
ALTER TABLE public.user_credits ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users can read own credits" ON public.user_credits
FOR SELECT USING (auth.uid() = user_id);
-- 2. ํฌ๋ ˆ๋”ง ๋ณ€๋™ ๋กœ๊ทธ
CREATE TABLE IF NOT EXISTS public.credit_logs (
id BIGSERIAL PRIMARY KEY,
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
amount INTEGER NOT NULL, -- ์–‘์ˆ˜=์ถฉ์ „, ์Œ์ˆ˜=์ฐจ๊ฐ
reason TEXT NOT NULL DEFAULT '',
detail JSONB NOT NULL DEFAULT '{}',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
ALTER TABLE public.credit_logs ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users can read own logs" ON public.credit_logs
FOR SELECT USING (auth.uid() = user_id);
CREATE INDEX IF NOT EXISTS idx_credit_logs_user ON public.credit_logs(user_id, created_at DESC);
-- 3. ์ฟ ํฐ ํ…Œ์ด๋ธ”
CREATE TABLE IF NOT EXISTS public.coupons (
id BIGSERIAL PRIMARY KEY,
code TEXT NOT NULL UNIQUE,
credit_amount INTEGER NOT NULL DEFAULT 10000,
max_uses INTEGER NOT NULL DEFAULT 1,
used_count INTEGER NOT NULL DEFAULT 0,
active BOOLEAN NOT NULL DEFAULT TRUE,
expires_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
ALTER TABLE public.coupons ENABLE ROW LEVEL SECURITY;
-- ์ฟ ํฐ์€ service_role๋กœ๋งŒ ๊ด€๋ฆฌ
-- 4. ์ฟ ํฐ ์‚ฌ์šฉ ์ด๋ ฅ
CREATE TABLE IF NOT EXISTS public.coupon_redemptions (
id BIGSERIAL PRIMARY KEY,
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
coupon_id BIGINT NOT NULL REFERENCES public.coupons(id),
credit_amount INTEGER NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE(user_id, coupon_id) -- 1์ธ 1ํšŒ ์‚ฌ์šฉ
);
ALTER TABLE public.coupon_redemptions ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users can read own redemptions" ON public.coupon_redemptions
FOR SELECT USING (auth.uid() = user_id);
-- 5. ํ…Œ์ŠคํŠธ ์ฟ ํฐ ์‚ฝ์ž… (ํ•„์š”์‹œ)
-- INSERT INTO public.coupons (code, credit_amount, max_uses) VALUES ('WELCOME2026', 10000, 100);