Some checks failed
ci / ci (22, ubuntu-latest) (push) Failing after 25m52s
Made-with: Cursor
111 lines
3.5 KiB
PL/PgSQL
111 lines
3.5 KiB
PL/PgSQL
-- CampGear Supabase Schema
|
|
-- Run this in Supabase SQL Editor
|
|
|
|
-- Enable UUID extension
|
|
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
|
|
|
-- ENUM types
|
|
CREATE TYPE equipment_category AS ENUM (
|
|
'tent', 'sleeping', 'cooking', 'lighting', 'clothing',
|
|
'backpack', 'furniture', 'safety', 'electronics', 'other'
|
|
);
|
|
|
|
CREATE TYPE sale_status AS ENUM ('listing', 'reserved', 'sold', 'cancelled');
|
|
CREATE TYPE sale_platform AS ENUM ('danggeun', 'bunjang', 'joonggo', 'naver', 'other');
|
|
|
|
-- purchases table
|
|
CREATE TABLE purchases (
|
|
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
|
|
user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE NOT NULL,
|
|
name TEXT NOT NULL,
|
|
category equipment_category NOT NULL,
|
|
brand TEXT,
|
|
price INTEGER NOT NULL DEFAULT 0,
|
|
purchase_date DATE NOT NULL,
|
|
store TEXT,
|
|
warranty_until DATE,
|
|
notes TEXT,
|
|
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
);
|
|
|
|
-- used_sales table
|
|
CREATE TABLE used_sales (
|
|
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
|
|
user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE NOT NULL,
|
|
purchase_id UUID REFERENCES purchases(id) ON DELETE SET NULL,
|
|
item_name TEXT NOT NULL,
|
|
sale_price INTEGER NOT NULL DEFAULT 0,
|
|
final_price INTEGER,
|
|
platform sale_platform NOT NULL,
|
|
status sale_status NOT NULL DEFAULT 'listing',
|
|
notes TEXT,
|
|
listed_at DATE NOT NULL,
|
|
sold_at DATE,
|
|
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
);
|
|
|
|
-- ai_conversations table
|
|
CREATE TABLE ai_conversations (
|
|
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
|
|
user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE NOT NULL,
|
|
title TEXT NOT NULL DEFAULT '새 대화',
|
|
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
);
|
|
|
|
-- ai_messages table
|
|
CREATE TABLE ai_messages (
|
|
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
|
|
conversation_id UUID REFERENCES ai_conversations(id) ON DELETE CASCADE NOT NULL,
|
|
role TEXT NOT NULL CHECK (role IN ('user', 'assistant')),
|
|
content TEXT NOT NULL,
|
|
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
);
|
|
|
|
-- updated_at trigger function
|
|
CREATE OR REPLACE FUNCTION update_updated_at()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = NOW();
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
-- Apply triggers
|
|
CREATE TRIGGER purchases_updated_at BEFORE UPDATE ON purchases
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|
|
|
|
CREATE TRIGGER used_sales_updated_at BEFORE UPDATE ON used_sales
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|
|
|
|
CREATE TRIGGER ai_conversations_updated_at BEFORE UPDATE ON ai_conversations
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|
|
|
|
-- Row Level Security
|
|
ALTER TABLE purchases ENABLE ROW LEVEL SECURITY;
|
|
ALTER TABLE used_sales ENABLE ROW LEVEL SECURITY;
|
|
ALTER TABLE ai_conversations ENABLE ROW LEVEL SECURITY;
|
|
ALTER TABLE ai_messages ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- RLS Policies: purchases
|
|
CREATE POLICY "Users can manage own purchases" ON purchases
|
|
FOR ALL USING (auth.uid() = user_id);
|
|
|
|
-- RLS Policies: used_sales
|
|
CREATE POLICY "Users can manage own used_sales" ON used_sales
|
|
FOR ALL USING (auth.uid() = user_id);
|
|
|
|
-- RLS Policies: ai_conversations
|
|
CREATE POLICY "Users can manage own conversations" ON ai_conversations
|
|
FOR ALL USING (auth.uid() = user_id);
|
|
|
|
-- RLS Policies: ai_messages (via conversation ownership)
|
|
CREATE POLICY "Users can manage messages in own conversations" ON ai_messages
|
|
FOR ALL USING (
|
|
conversation_id IN (
|
|
SELECT id FROM ai_conversations WHERE user_id = auth.uid()
|
|
)
|
|
);
|