95 lines
3.5 KiB
SQL
95 lines
3.5 KiB
SQL
-- Migrate from custom app_user/session to Better Auth.
|
|
-- Drop tables with FKs to app_user, drop app_user, recreate with better-auth schema.
|
|
|
|
-- Drop tables that reference app_user
|
|
DROP TABLE IF EXISTS client_member;
|
|
DROP TABLE IF EXISTS session;
|
|
DROP TABLE IF EXISTS audit_log;
|
|
DROP TABLE IF EXISTS app_user;
|
|
|
|
-- Better Auth core tables
|
|
CREATE TABLE IF NOT EXISTS "user" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL UNIQUE,
|
|
"email_verified" INTEGER NOT NULL,
|
|
"image" TEXT,
|
|
"created_at" TEXT NOT NULL,
|
|
"updated_at" TEXT NOT NULL,
|
|
"role" TEXT NOT NULL DEFAULT 'client' CHECK ("role" IN ('admin', 'client', 'owner')),
|
|
"locale" TEXT NOT NULL DEFAULT 'de'
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS "session" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"expires_at" TEXT NOT NULL,
|
|
"token" TEXT NOT NULL UNIQUE,
|
|
"created_at" TEXT NOT NULL,
|
|
"updated_at" TEXT NOT NULL,
|
|
"ip_address" TEXT,
|
|
"user_agent" TEXT,
|
|
"user_id" TEXT NOT NULL REFERENCES "user" ("id") ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS "account" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"account_id" TEXT NOT NULL,
|
|
"provider_id" TEXT NOT NULL,
|
|
"user_id" TEXT NOT NULL REFERENCES "user" ("id") ON DELETE CASCADE,
|
|
"access_token" TEXT,
|
|
"refresh_token" TEXT,
|
|
"id_token" TEXT,
|
|
"access_token_expires_at" TEXT,
|
|
"refresh_token_expires_at" TEXT,
|
|
"scope" TEXT,
|
|
"password" TEXT,
|
|
"created_at" TEXT NOT NULL,
|
|
"updated_at" TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS "verification" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"identifier" TEXT NOT NULL,
|
|
"value" TEXT NOT NULL,
|
|
"expires_at" TEXT NOT NULL,
|
|
"created_at" TEXT NOT NULL,
|
|
"updated_at" TEXT NOT NULL
|
|
);
|
|
|
|
-- Booking-client cookie sessions (kept separate from better-auth sessions)
|
|
CREATE TABLE IF NOT EXISTS booking_session (
|
|
session_id TEXT PRIMARY KEY,
|
|
user_id TEXT NOT NULL REFERENCES "user" ("id") ON DELETE CASCADE,
|
|
expires_at TEXT NOT NULL,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
-- Recreate client_member referencing user(id)
|
|
CREATE TABLE IF NOT EXISTS client_member (
|
|
client_id TEXT NOT NULL REFERENCES client(client_id),
|
|
user_id TEXT NOT NULL REFERENCES "user" ("id"),
|
|
role TEXT NOT NULL DEFAULT 'organiser' CHECK (role IN ('organiser', 'colleague')),
|
|
PRIMARY KEY (client_id, user_id)
|
|
);
|
|
|
|
-- Recreate audit_log referencing user(id)
|
|
CREATE TABLE IF NOT EXISTS audit_log (
|
|
audit_id TEXT PRIMARY KEY,
|
|
venue_id TEXT NOT NULL REFERENCES venue(venue_id),
|
|
user_id TEXT REFERENCES "user" ("id"),
|
|
entity TEXT NOT NULL,
|
|
entity_id TEXT NOT NULL,
|
|
field TEXT,
|
|
before_value TEXT,
|
|
after_value TEXT,
|
|
action TEXT NOT NULL CHECK (action IN ('create', 'update', 'delete')),
|
|
at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS session_user_id_idx ON "session" ("user_id");
|
|
CREATE INDEX IF NOT EXISTS account_user_id_idx ON "account" ("user_id");
|
|
CREATE INDEX IF NOT EXISTS verification_identifier_idx ON "verification" ("identifier");
|
|
CREATE INDEX IF NOT EXISTS booking_session_user_idx ON booking_session (user_id);
|
|
CREATE INDEX IF NOT EXISTS booking_session_expires_idx ON booking_session (expires_at);
|
|
CREATE INDEX IF NOT EXISTS audit_log_entity_idx ON audit_log (entity, entity_id);
|