Spaces:
Sleeping
Sleeping
Download backend/sql/046_gift_products.sql from stylevoice/talk: direct link, hf CLI and curl.
- Browser
- Download file 2.98 kB
-
https://huggingface.co/spaces/stylevoice/talk/resolve/main/backend/sql/046_gift_products.sql
- Command line
-
hf download hf://spaces/stylevoice/talk/backend/sql/046_gift_products.sql
-
curl -L -o 046_gift_products.sql https://huggingface.co/spaces/stylevoice/talk/resolve/main/backend/sql/046_gift_products.sql
2.98 kB
| -- ์นดํ ์์ฑ ์ ๋ฌผ์ฟ ํฐ MVP โ gift_products (2026-05-28, P1a Phase A) | |
| -- | |
| -- ์นดํ๋ณ ์ฟ ํฐ ์ํ (์๋ฉ๋ฆฌ์นด๋ ธ 1์, ์ผ์ดํฌ 1์กฐ๊ฐ ๋ฑ). | |
| -- ์์ฒญ์: doc/runbook/req_cafe_gift_mvp.md ยง1 | |
| -- ์ค๊ณ: doc/runbook/cafe_gift_p1a.md ยง2 sql/046 | |
| -- | |
| -- ํต์ฌ: | |
| -- - cafe_id FK + CASCADE (์นดํ ์ญ์ ์ ์ํ๋ ์ ๋ฆฌ) | |
| -- - image_path โ Supabase Storage 'cafe-products' ๋ฒํท (12h signed URL) | |
| -- - active=false ๋ฉด ๋น๋ก๊ทธ์ธ ๊ตฌ๋งค ํ์ด์ง์ ์ ๋ณด์ (RLS + ๋ฐฑ์๋ ์ด์ค) | |
| -- - sort_order ์ฌ์ฅ์ด ์ง์ ์์ ๋ณ๊ฒฝ | |
| -- | |
| -- โ ํ๊ท ๊ฐ๋: ์ ๊ท ํ ์ด๋ธ, ๊ธฐ์กด CHECK ์ํฅ 0. | |
| CREATE TABLE IF NOT EXISTS public.gift_products ( | |
| id UUID PRIMARY KEY DEFAULT gen_random_uuid(), | |
| cafe_id UUID NOT NULL REFERENCES public.cafe_merchants(id) ON DELETE CASCADE, | |
| name TEXT NOT NULL, -- '์๋ฉ๋ฆฌ์นด๋ ธ 1์' | |
| description TEXT, -- ๋ถ๊ฐ ์ค๋ช (์ต์ ) | |
| price_krw INT NOT NULL CHECK (price_krw > 0), -- ์ ๋จ์ (KRW ์ ์) | |
| image_path TEXT, -- Storage 'cafe-products' ๋ฒํท path | |
| active BOOLEAN NOT NULL DEFAULT TRUE, | |
| sort_order INT NOT NULL DEFAULT 0, | |
| created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), | |
| updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() | |
| ); | |
| CREATE INDEX IF NOT EXISTS idx_gift_products_cafe_active | |
| ON public.gift_products (cafe_id, active, sort_order); | |
| ALTER TABLE public.gift_products ENABLE ROW LEVEL SECURITY; | |
| -- ์ฌ์ฅ: ๋ณธ์ธ ์นดํ ์ํ ALL (cafe_merchants owner ๊ฒ์ฆ) | |
| DROP POLICY IF EXISTS gift_products_owner ON public.gift_products; | |
| CREATE POLICY gift_products_owner ON public.gift_products | |
| FOR ALL | |
| USING (cafe_id IN ( | |
| SELECT id FROM public.cafe_merchants WHERE owner_user_id = auth.uid() | |
| )) | |
| WITH CHECK (cafe_id IN ( | |
| SELECT id FROM public.cafe_merchants WHERE owner_user_id = auth.uid() | |
| )); | |
| -- ๊ณต๊ฐ: active=true ๋ง SELECT (anon ๊ฐ๋ฅ, ๊ตฌ๋งค ํ์ด์ง์ฉ) | |
| DROP POLICY IF EXISTS gift_products_public_read ON public.gift_products; | |
| CREATE POLICY gift_products_public_read ON public.gift_products | |
| FOR SELECT | |
| USING (active = TRUE); | |
| CREATE OR REPLACE FUNCTION public._gift_products_touch_updated_at() | |
| RETURNS TRIGGER AS $$ | |
| BEGIN | |
| NEW.updated_at = NOW(); | |
| RETURN NEW; | |
| END; | |
| $$ LANGUAGE plpgsql; | |
| DROP TRIGGER IF EXISTS gift_products_touch_updated_at ON public.gift_products; | |
| CREATE TRIGGER gift_products_touch_updated_at | |
| BEFORE UPDATE ON public.gift_products | |
| FOR EACH ROW EXECUTE FUNCTION public._gift_products_touch_updated_at(); | |
| COMMENT ON TABLE public.gift_products IS | |
| '์นดํ ์ ๋ฌผ ์ํ ์นดํ๋ก๊ทธ. active=false ๋น๊ณต๊ฐ. ์ด๋ฏธ์ง๋ Storage cafe-products ๋ฒํท.'; | |
| COMMENT ON COLUMN public.gift_products.price_krw IS | |
| 'KRW ์ ์. ๋ฐฑ์๋์์ gift_orders.amount_krw ๋ก ๋ณต์ฌ (๊ฐ๊ฒฉ ๋ณ๊ฒฝ ํ์ ์ฃผ๋ฌธ ์ํฅ 0).'; | |