Spaces:
Sleeping
Sleeping
File size: 2,568 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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | -- ํฌ๋ ๋ง ์์คํ
ํ
์ด๋ธ (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);
|