mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-18 21:01:23 +02:00
- Restructure chat as apps/mobile, apps/web, apps/landing, backend - Add NestJS backend for secure Azure OpenAI API calls - Remove exposed API key from mobile app (security fix) - Add shared chat-types package - Create SvelteKit web app scaffold - Create Astro landing page scaffold - Update pnpm workspace configuration - Add project-level CLAUDE.md documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
188 lines
4.8 KiB
Markdown
188 lines
4.8 KiB
Markdown
# Supabase-Integration und Datenbank-Verwaltung
|
|
|
|
Diese Dokumentation beschreibt die Integration von Supabase in die Chat-Anwendung und erklärt die Verwendung der bereitgestellten Skripte zur Datenbankverwaltung.
|
|
|
|
## Inhaltsverzeichnis
|
|
|
|
1. [Übersicht](#übersicht)
|
|
2. [Datenbankstruktur](#datenbankstruktur)
|
|
3. [Einrichtung](#einrichtung)
|
|
4. [Skripte zur Datenbankverwaltung](#skripte-zur-datenbankverwaltung)
|
|
5. [Fehlerbehebung](#fehlerbehebung)
|
|
6. [Häufig gestellte Fragen](#häufig-gestellte-fragen)
|
|
|
|
## Übersicht
|
|
|
|
Die Chat-Anwendung verwendet Supabase als Backend-Dienst für:
|
|
- Benutzerauthentifizierung
|
|
- Datenspeicherung (Konversationen, Nachrichten, Modelle)
|
|
- Echtzeit-Updates
|
|
|
|
## Datenbankstruktur
|
|
|
|
Die Anwendung verwendet folgende Tabellen in Supabase:
|
|
|
|
| Tabelle | Beschreibung | Wichtige Felder |
|
|
|---------|--------------|-----------------|
|
|
| users | Benutzerinformationen | id, email, name, created_at, updated_at |
|
|
| conversations | Gespeicherte Konversationen | id, user_id, model_id, template_id, conversation_mode, created_at, updated_at |
|
|
| messages | Nachrichten innerhalb von Konversationen | id, conversation_id, sender, message_text, created_at, updated_at |
|
|
| models | Verfügbare LLM-Modelle | id, name, description, parameters, created_at, updated_at |
|
|
| templates | Konversationsvorlagen | id, name, description, mode_type, initial_questions, created_at, updated_at |
|
|
|
|
## Einrichtung
|
|
|
|
### Voraussetzungen
|
|
|
|
1. Ein Supabase-Konto und -Projekt
|
|
2. Node.js und npm installiert
|
|
3. Die Umgebungsvariablen in der `.env`-Datei konfiguriert:
|
|
|
|
```
|
|
EXPO_PUBLIC_SUPABASE_URL=https://deine-projekt-id.supabase.co
|
|
EXPO_PUBLIC_SUPABASE_ANON_KEY=dein-anon-key
|
|
```
|
|
|
|
### Ersteinrichtung
|
|
|
|
Um die Supabase-Datenbank für die Anwendung einzurichten:
|
|
|
|
1. Führe das Setup-Skript aus:
|
|
|
|
```bash
|
|
npm run supabase:setup
|
|
```
|
|
|
|
Dieses Skript:
|
|
- Erstellt die notwendigen Funktionen in der Datenbank
|
|
- Richtet die Tabellen ein, falls sie noch nicht existieren
|
|
- Fügt die Standard-Modelle mit korrekten UUIDs ein
|
|
|
|
## Skripte zur Datenbankverwaltung
|
|
|
|
Die Anwendung bietet mehrere Skripte zur Verwaltung der Supabase-Datenbank:
|
|
|
|
### 1. Supabase-Setup (`npm run supabase:setup`)
|
|
|
|
Richtet die Supabase-Datenbank ein, erstellt notwendige Funktionen und aktualisiert die Modelle.
|
|
|
|
```bash
|
|
npm run supabase:setup
|
|
```
|
|
|
|
### 2. Modell-Update (`npm run supabase:update-models`)
|
|
|
|
Aktualisiert die Modelle in der Datenbank mit den korrekten UUIDs.
|
|
|
|
```bash
|
|
npm run supabase:update-models
|
|
```
|
|
|
|
### 3. Interaktive Supabase-CLI (`npm run supabase:cli`)
|
|
|
|
Ein interaktives Kommandozeilen-Tool zur Verwaltung der Datenbank.
|
|
|
|
```bash
|
|
npm run supabase:cli
|
|
```
|
|
|
|
Mit diesem Tool kannst du:
|
|
- SQL-Abfragen direkt ausführen
|
|
- SQL-Dateien ausführen
|
|
- Tabellenlisten anzeigen
|
|
- Tabellenstrukturen anzeigen
|
|
|
|
#### Beispiel-Befehle in der CLI
|
|
|
|
**Tabellenliste anzeigen:**
|
|
```
|
|
3 [Tabellenliste anzeigen]
|
|
```
|
|
|
|
**Tabellenstruktur anzeigen:**
|
|
```
|
|
4 [Tabellenstruktur anzeigen]
|
|
conversations
|
|
```
|
|
|
|
**SQL-Abfrage ausführen:**
|
|
```
|
|
1 [SQL-Abfrage ausführen]
|
|
SELECT * FROM models LIMIT 5;
|
|
```
|
|
|
|
## Fehlerbehebung
|
|
|
|
### Problem: UUID-Fehler bei der Erstellung von Konversationen
|
|
|
|
**Symptom:** Fehler "invalid input syntax for type uuid" beim Erstellen einer Konversation.
|
|
|
|
**Lösung:**
|
|
1. Führe das Modell-Update-Skript aus, um die Modell-IDs zu korrigieren:
|
|
```bash
|
|
npm run supabase:update-models
|
|
```
|
|
|
|
2. Überprüfe, ob die Modell-IDs im Frontend mit denen in der Datenbank übereinstimmen:
|
|
```bash
|
|
npm run supabase:cli
|
|
```
|
|
Dann wähle Option 1 und führe aus:
|
|
```sql
|
|
SELECT id, name FROM models;
|
|
```
|
|
|
|
### Problem: Authentifizierungsfehler
|
|
|
|
**Symptom:** 400 Bad Request bei der Anmeldung.
|
|
|
|
**Lösung:**
|
|
1. Überprüfe, ob der Benutzer in der Auth-Tabelle existiert:
|
|
```bash
|
|
npm run supabase:cli
|
|
```
|
|
Dann wähle Option 1 und führe aus:
|
|
```sql
|
|
SELECT * FROM auth.users WHERE email = 'deine-email@beispiel.de';
|
|
```
|
|
|
|
2. Verwende die Magic Link-Anmeldung als Alternative.
|
|
|
|
## Häufig gestellte Fragen
|
|
|
|
### Wie füge ich ein neues Modell hinzu?
|
|
|
|
1. Füge das Modell zur `FALLBACK_MODELS`-Liste in `app/api/models+api.ts` hinzu
|
|
2. Führe das Modell-Update-Skript aus:
|
|
```bash
|
|
npm run supabase:update-models
|
|
```
|
|
|
|
### Wie kann ich die Datenbankstruktur ändern?
|
|
|
|
1. Erstelle eine SQL-Datei mit den gewünschten Änderungen
|
|
2. Führe die Datei mit der Supabase-CLI aus:
|
|
```bash
|
|
npm run supabase:cli
|
|
```
|
|
Dann wähle Option 2 und gib den Pfad zur SQL-Datei ein.
|
|
|
|
### Wie kann ich die Datenbank zurücksetzen?
|
|
|
|
1. Verwende die Supabase-CLI:
|
|
```bash
|
|
npm run supabase:cli
|
|
```
|
|
2. Wähle Option 1 und führe folgende Befehle aus:
|
|
```sql
|
|
DELETE FROM messages;
|
|
DELETE FROM conversations;
|
|
```
|
|
3. Führe das Modell-Update-Skript aus, um die Standard-Modelle wiederherzustellen:
|
|
```bash
|
|
npm run supabase:update-models
|
|
```
|
|
|
|
---
|
|
|
|
Diese Dokumentation wird kontinuierlich aktualisiert. Bei Fragen oder Problemen, bitte erstelle ein Issue im Repository oder kontaktiere das Entwicklungsteam.
|