Initial commit from template
This commit is contained in:
84
.claude/skills/supabase-db/templates/migration.sql
Normal file
84
.claude/skills/supabase-db/templates/migration.sql
Normal file
@@ -0,0 +1,84 @@
|
||||
-- Migration: {{MIGRATION_NAME}}
|
||||
-- Created: {{DATE}}
|
||||
|
||||
-- ===========================================
|
||||
-- Tabelle erstellen
|
||||
-- ===========================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS {{TABLE_NAME}} (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
|
||||
-- Deine Spalten hier
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
|
||||
-- Foreign Keys (optional)
|
||||
user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
|
||||
|
||||
-- Timestamps
|
||||
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
||||
);
|
||||
|
||||
-- ===========================================
|
||||
-- Row Level Security
|
||||
-- ===========================================
|
||||
|
||||
ALTER TABLE {{TABLE_NAME}} ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- Select Policy
|
||||
CREATE POLICY "{{TABLE_NAME}}_select_policy"
|
||||
ON {{TABLE_NAME}} FOR SELECT
|
||||
TO authenticated
|
||||
USING (auth.uid() = user_id);
|
||||
|
||||
-- Insert Policy
|
||||
CREATE POLICY "{{TABLE_NAME}}_insert_policy"
|
||||
ON {{TABLE_NAME}} FOR INSERT
|
||||
TO authenticated
|
||||
WITH CHECK (auth.uid() = user_id);
|
||||
|
||||
-- Update Policy
|
||||
CREATE POLICY "{{TABLE_NAME}}_update_policy"
|
||||
ON {{TABLE_NAME}} FOR UPDATE
|
||||
TO authenticated
|
||||
USING (auth.uid() = user_id)
|
||||
WITH CHECK (auth.uid() = user_id);
|
||||
|
||||
-- Delete Policy
|
||||
CREATE POLICY "{{TABLE_NAME}}_delete_policy"
|
||||
ON {{TABLE_NAME}} FOR DELETE
|
||||
TO authenticated
|
||||
USING (auth.uid() = user_id);
|
||||
|
||||
-- ===========================================
|
||||
-- Indexes
|
||||
-- ===========================================
|
||||
|
||||
CREATE INDEX IF NOT EXISTS {{TABLE_NAME}}_user_id_idx ON {{TABLE_NAME}}(user_id);
|
||||
CREATE INDEX IF NOT EXISTS {{TABLE_NAME}}_created_at_idx ON {{TABLE_NAME}}(created_at DESC);
|
||||
|
||||
-- ===========================================
|
||||
-- Updated_at Trigger
|
||||
-- ===========================================
|
||||
|
||||
-- Funktion (nur einmal pro DB noetig)
|
||||
CREATE OR REPLACE FUNCTION update_updated_at()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.updated_at = NOW();
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Trigger
|
||||
CREATE TRIGGER {{TABLE_NAME}}_updated_at
|
||||
BEFORE UPDATE ON {{TABLE_NAME}}
|
||||
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|
||||
|
||||
-- ===========================================
|
||||
-- Grants (optional)
|
||||
-- ===========================================
|
||||
|
||||
-- GRANT SELECT, INSERT, UPDATE, DELETE ON {{TABLE_NAME}} TO authenticated;
|
||||
-- GRANT SELECT ON {{TABLE_NAME}} TO anon;
|
||||
Reference in New Issue
Block a user