Files
lumina-nextjs-template/.claude/skills/supabase-db/SKILL.md
2025-12-23 04:19:57 +01:00

2.5 KiB

name, description
name description
supabase-db Supabase PostgreSQL Datenbank Operationen. Nutze diesen Skill fuer CRUD Operationen, SQL Migrations, Tabellen erstellen, RLS Policies, Queries und TypeScript Types generieren. Aktiviert bei Begriffen wie "Datenbank", "Tabelle erstellen", "SQL", "Query", "Migration", "RLS", "Row Level Security", "select", "insert", "update", "delete".

Supabase PostgreSQL Datenbank Skill

Dieser Skill hilft bei allen Datenbank-Operationen mit Supabase.

Tabellen erstellen

Verwende immer dieses Pattern:

CREATE TABLE table_name (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  -- deine Spalten hier
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- RLS aktivieren
ALTER TABLE table_name ENABLE ROW LEVEL SECURITY;

-- Updated_at Trigger
CREATE TRIGGER table_name_updated_at
BEFORE UPDATE ON table_name
FOR EACH ROW EXECUTE FUNCTION update_updated_at();

CRUD Operationen

Select

const { data, error } = await supabase
  .from('table')
  .select('*')
  .eq('column', value)
  .order('created_at', { ascending: false });

Insert

const { data, error } = await supabase
  .from('table')
  .insert({ column: value })
  .select()
  .single();

Update

const { data, error } = await supabase
  .from('table')
  .update({ column: newValue })
  .eq('id', id)
  .select()
  .single();

Delete

const { error } = await supabase
  .from('table')
  .delete()
  .eq('id', id);

RLS Policies

-- Lesen: Jeder authentifizierte User
CREATE POLICY "Users can read own data"
ON table_name FOR SELECT
TO authenticated
USING (auth.uid() = user_id);

-- Schreiben: Nur eigene Daten
CREATE POLICY "Users can insert own data"
ON table_name FOR INSERT
TO authenticated
WITH CHECK (auth.uid() = user_id);

-- Update: Nur eigene Daten
CREATE POLICY "Users can update own data"
ON table_name FOR UPDATE
TO authenticated
USING (auth.uid() = user_id)
WITH CHECK (auth.uid() = user_id);

-- Delete: Nur eigene Daten
CREATE POLICY "Users can delete own data"
ON table_name FOR DELETE
TO authenticated
USING (auth.uid() = user_id);

TypeScript Types generieren

npx supabase gen types typescript --project-id PROJECT_ID > lib/database.types.ts

Best Practices

  1. Immer UUIDs als Primary Key
  2. Immer created_at/updated_at
  3. Immer RLS aktivieren
  4. Soft Deletes mit deleted_at
  5. Indexes fuer WHERE/ORDER BY Spalten