82 lines
2.5 KiB
PL/PgSQL
82 lines
2.5 KiB
PL/PgSQL
-- Koleksiyonlar tablosu
|
||
CREATE TABLE IF NOT EXISTS collections (
|
||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
|
||
name TEXT NOT NULL,
|
||
description TEXT,
|
||
icon TEXT,
|
||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||
);
|
||
|
||
-- Kaydedilen yerler tablosu
|
||
CREATE TABLE IF NOT EXISTS bookmarks (
|
||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
|
||
place_id UUID REFERENCES places(id) ON DELETE CASCADE,
|
||
collection_id UUID REFERENCES collections(id) ON DELETE SET NULL,
|
||
notes TEXT,
|
||
is_favorite BOOLEAN DEFAULT false,
|
||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||
UNIQUE(user_id, place_id)
|
||
);
|
||
|
||
-- RLS politikaları - Collections
|
||
ALTER TABLE collections ENABLE ROW LEVEL SECURITY;
|
||
|
||
CREATE POLICY "Kullanıcılar kendi koleksiyonlarını görebilir"
|
||
ON collections FOR SELECT
|
||
USING (auth.uid() = user_id);
|
||
|
||
CREATE POLICY "Kullanıcılar kendi koleksiyonlarını oluşturabilir"
|
||
ON collections FOR INSERT
|
||
WITH CHECK (auth.uid() = user_id);
|
||
|
||
CREATE POLICY "Kullanıcılar kendi koleksiyonlarını güncelleyebilir"
|
||
ON collections FOR UPDATE
|
||
USING (auth.uid() = user_id);
|
||
|
||
CREATE POLICY "Kullanıcılar kendi koleksiyonlarını silebilir"
|
||
ON collections FOR DELETE
|
||
USING (auth.uid() = user_id);
|
||
|
||
-- RLS politikaları - Bookmarks
|
||
ALTER TABLE bookmarks ENABLE ROW LEVEL SECURITY;
|
||
|
||
CREATE POLICY "Kullanıcılar kendi kayıtlarını görebilir"
|
||
ON bookmarks FOR SELECT
|
||
USING (auth.uid() = user_id);
|
||
|
||
CREATE POLICY "Kullanıcılar yer kaydedebilir"
|
||
ON bookmarks FOR INSERT
|
||
WITH CHECK (auth.uid() = user_id);
|
||
|
||
CREATE POLICY "Kullanıcılar kendi kayıtlarını güncelleyebilir"
|
||
ON bookmarks FOR UPDATE
|
||
USING (auth.uid() = user_id);
|
||
|
||
CREATE POLICY "Kullanıcılar kendi kayıtlarını silebilir"
|
||
ON bookmarks FOR DELETE
|
||
USING (auth.uid() = user_id);
|
||
|
||
-- Updated_at trigger
|
||
CREATE TRIGGER on_collection_updated
|
||
BEFORE UPDATE ON collections
|
||
FOR EACH ROW EXECUTE FUNCTION public.handle_updated_at();
|
||
|
||
-- Her kullanıcı için varsayılan koleksiyonlar oluştur (trigger)
|
||
CREATE OR REPLACE FUNCTION create_default_collections()
|
||
RETURNS TRIGGER AS $$
|
||
BEGIN
|
||
INSERT INTO collections (user_id, name, icon) VALUES
|
||
(NEW.id, 'Tüm Kaydedilenler', 'bookmark'),
|
||
(NEW.id, 'Favoriler', 'heart'),
|
||
(NEW.id, 'Görmek İstediklerim', 'eye');
|
||
RETURN NEW;
|
||
END;
|
||
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
||
|
||
CREATE TRIGGER on_user_created_create_collections
|
||
AFTER INSERT ON profiles
|
||
FOR EACH ROW EXECUTE FUNCTION create_default_collections();
|