79 lines
2.8 KiB
SQL
79 lines
2.8 KiB
SQL
-- Create trade_history table to track all versions of a trade
|
|
CREATE TABLE IF NOT EXISTS public.trade_history (
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
trade_id uuid REFERENCES public.trades(id) ON DELETE CASCADE NOT NULL,
|
|
version integer NOT NULL,
|
|
editor_id uuid REFERENCES public.profiles(id) NOT NULL,
|
|
message text,
|
|
created_at timestamptz DEFAULT now(),
|
|
UNIQUE(trade_id, version)
|
|
);
|
|
|
|
-- Create trade_history_items table to store cards for each version
|
|
CREATE TABLE IF NOT EXISTS public.trade_history_items (
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
history_id uuid REFERENCES public.trade_history(id) ON DELETE CASCADE NOT NULL,
|
|
owner_id uuid REFERENCES public.profiles(id) NOT NULL,
|
|
card_id text NOT NULL,
|
|
quantity integer DEFAULT 1,
|
|
created_at timestamptz DEFAULT now()
|
|
);
|
|
|
|
-- Add version column to trades table to track current version
|
|
ALTER TABLE public.trades ADD COLUMN IF NOT EXISTS version integer DEFAULT 1;
|
|
|
|
-- Add editor_id to track who last edited the trade
|
|
ALTER TABLE public.trades ADD COLUMN IF NOT EXISTS editor_id uuid REFERENCES public.profiles(id);
|
|
|
|
-- Create indexes for better performance
|
|
CREATE INDEX IF NOT EXISTS idx_trade_history_trade_id ON public.trade_history(trade_id);
|
|
CREATE INDEX IF NOT EXISTS idx_trade_history_items_history_id ON public.trade_history_items(history_id);
|
|
|
|
-- Enable RLS
|
|
ALTER TABLE public.trade_history ENABLE ROW LEVEL SECURITY;
|
|
ALTER TABLE public.trade_history_items ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- RLS policies for trade_history
|
|
CREATE POLICY "Users can view history of their trades"
|
|
ON public.trade_history FOR SELECT
|
|
USING (
|
|
EXISTS (
|
|
SELECT 1 FROM public.trades
|
|
WHERE trades.id = trade_history.trade_id
|
|
AND (trades.sender_id = auth.uid() OR trades.receiver_id = auth.uid())
|
|
)
|
|
);
|
|
|
|
CREATE POLICY "Users can create history for their trades"
|
|
ON public.trade_history FOR INSERT
|
|
WITH CHECK (
|
|
EXISTS (
|
|
SELECT 1 FROM public.trades
|
|
WHERE trades.id = trade_history.trade_id
|
|
AND (trades.sender_id = auth.uid() OR trades.receiver_id = auth.uid())
|
|
)
|
|
);
|
|
|
|
-- RLS policies for trade_history_items
|
|
CREATE POLICY "Users can view history items of their trades"
|
|
ON public.trade_history_items FOR SELECT
|
|
USING (
|
|
EXISTS (
|
|
SELECT 1 FROM public.trade_history th
|
|
JOIN public.trades t ON t.id = th.trade_id
|
|
WHERE th.id = trade_history_items.history_id
|
|
AND (t.sender_id = auth.uid() OR t.receiver_id = auth.uid())
|
|
)
|
|
);
|
|
|
|
CREATE POLICY "Users can create history items for their trades"
|
|
ON public.trade_history_items FOR INSERT
|
|
WITH CHECK (
|
|
EXISTS (
|
|
SELECT 1 FROM public.trade_history th
|
|
JOIN public.trades t ON t.id = th.trade_id
|
|
WHERE th.id = trade_history_items.history_id
|
|
AND (t.sender_id = auth.uid() OR t.receiver_id = auth.uid())
|
|
)
|
|
);
|