Initial Release: Lütte Planer mit Google-Login-Vorbereitung

- Login-System (Mock für Tests, Google OAuth vorbereitet)
- Reisen erstellen mit Emoji, Ziel und Datum
- Ablauf (Timeline), Packliste, Ideen, Notizen, Dokumente
- Team-System: Personen einladen per E-Mail + Einladungslinks
- Berechtigungen: Nur lesen / Bearbeiten / Admin
- E-Mail-Benachrichtigungen beim Einladen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-26 20:56:30 +02:00
co-authored by Claude Sonnet 4.6
commit bd8a322fc0
21 changed files with 1647 additions and 0 deletions
+103
View File
@@ -0,0 +1,103 @@
PRAGMA foreign_keys = ON;
PRAGMA journal_mode = WAL;
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
google_id TEXT UNIQUE,
email TEXT NOT NULL UNIQUE,
name TEXT NOT NULL,
avatar_url TEXT,
farbe TEXT DEFAULT '#2563eb',
created_at INTEGER DEFAULT (strftime('%s','now'))
);
CREATE TABLE IF NOT EXISTS reisen (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
ziel TEXT,
start_datum TEXT,
end_datum TEXT,
cover_emoji TEXT DEFAULT '✈️',
beschreibung TEXT,
created_by INTEGER REFERENCES users(id),
created_at INTEGER DEFAULT (strftime('%s','now'))
);
CREATE TABLE IF NOT EXISTS reise_zugriff (
id INTEGER PRIMARY KEY AUTOINCREMENT,
trip_id TEXT NOT NULL REFERENCES reisen(id) ON DELETE CASCADE,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
access TEXT NOT NULL DEFAULT 'see',
invited_by INTEGER REFERENCES users(id),
joined_at INTEGER DEFAULT (strftime('%s','now')),
UNIQUE(trip_id, user_id)
);
CREATE TABLE IF NOT EXISTS reise_einladungen (
id INTEGER PRIMARY KEY AUTOINCREMENT,
trip_id TEXT NOT NULL REFERENCES reisen(id) ON DELETE CASCADE,
email TEXT NOT NULL,
token TEXT NOT NULL UNIQUE,
access TEXT DEFAULT 'see',
invited_by INTEGER REFERENCES users(id),
created_at INTEGER DEFAULT (strftime('%s','now')),
used_at INTEGER
);
CREATE TABLE IF NOT EXISTS ablauf (
id INTEGER PRIMARY KEY AUTOINCREMENT,
trip_id TEXT NOT NULL REFERENCES reisen(id) ON DELETE CASCADE,
datum TEXT,
zeit TEXT,
titel TEXT NOT NULL,
beschreibung TEXT,
ort TEXT,
kategorie TEXT DEFAULT 'allgemein',
sort_order INTEGER DEFAULT 0,
created_by INTEGER REFERENCES users(id),
created_at INTEGER DEFAULT (strftime('%s','now'))
);
CREATE TABLE IF NOT EXISTS packliste (
id INTEGER PRIMARY KEY AUTOINCREMENT,
trip_id TEXT NOT NULL REFERENCES reisen(id) ON DELETE CASCADE,
name TEXT NOT NULL,
menge TEXT,
kat TEXT DEFAULT 'sonstiges',
packed INTEGER DEFAULT 0,
assigned_to INTEGER REFERENCES users(id),
created_by INTEGER REFERENCES users(id),
created_at INTEGER DEFAULT (strftime('%s','now'))
);
CREATE TABLE IF NOT EXISTS ideen (
id INTEGER PRIMARY KEY AUTOINCREMENT,
trip_id TEXT NOT NULL REFERENCES reisen(id) ON DELETE CASCADE,
titel TEXT NOT NULL,
beschreibung TEXT,
link TEXT,
status TEXT DEFAULT 'offen',
created_by INTEGER REFERENCES users(id),
created_at INTEGER DEFAULT (strftime('%s','now'))
);
CREATE TABLE IF NOT EXISTS notizen (
id INTEGER PRIMARY KEY AUTOINCREMENT,
trip_id TEXT NOT NULL REFERENCES reisen(id) ON DELETE CASCADE,
titel TEXT NOT NULL,
inhalt TEXT,
created_by INTEGER REFERENCES users(id),
updated_at INTEGER DEFAULT (strftime('%s','now')),
created_at INTEGER DEFAULT (strftime('%s','now'))
);
CREATE TABLE IF NOT EXISTS dokumente (
id INTEGER PRIMARY KEY AUTOINCREMENT,
trip_id TEXT NOT NULL REFERENCES reisen(id) ON DELETE CASCADE,
name TEXT NOT NULL,
dateiname TEXT NOT NULL,
mime_type TEXT,
groesse INTEGER,
created_by INTEGER REFERENCES users(id),
created_at INTEGER DEFAULT (strftime('%s','now'))
);