41 lines
1.4 KiB
Plaintext
41 lines
1.4 KiB
Plaintext
-- Query Supabase untuk Tabel Ulasan (Reviews) Posyandu
|
|
|
|
-- 0. Aktifkan Ekstensi UUID (Jika belum aktif)
|
|
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
|
|
|
-- 1. Buat Tabel posyandu_reviews
|
|
CREATE TABLE IF NOT EXISTS posyandu_reviews (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
posyandu_id UUID REFERENCES detail_posyandu(id) ON DELETE CASCADE,
|
|
user_id UUID REFERENCES akun_balita(id) ON DELETE CASCADE,
|
|
rating INTEGER NOT NULL CHECK (rating >= 1 AND rating <= 5),
|
|
comment TEXT NOT NULL,
|
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
-- 2. Aktifkan Row Level Security (RLS)
|
|
ALTER TABLE posyandu_reviews ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- 3. Kebijakan RLS (Policies)
|
|
|
|
-- Kebijakan: Semua orang dapat melihat ulasan
|
|
CREATE POLICY "Anyone can view reviews"
|
|
ON posyandu_reviews FOR SELECT
|
|
USING (true);
|
|
|
|
-- Kebijakan: User terautentikasi dapat mengirim ulasan (untuk akun_balita)
|
|
CREATE POLICY "Authenticated users can insert reviews"
|
|
ON posyandu_reviews FOR INSERT
|
|
TO authenticated
|
|
WITH CHECK (auth.uid() = user_id);
|
|
|
|
-- Kebijakan: User dapat menghapus ulasan mereka sendiri
|
|
CREATE POLICY "Users can delete their own reviews"
|
|
ON posyandu_reviews FOR DELETE
|
|
TO authenticated
|
|
USING (auth.uid() = user_id);
|
|
|
|
-- 4. Indeks untuk Performa
|
|
CREATE INDEX IF NOT EXISTS idx_posyandu_reviews_posyandu_id ON posyandu_reviews(posyandu_id);
|
|
CREATE INDEX IF NOT EXISTS idx_posyandu_reviews_user_id ON posyandu_reviews(user_id);
|