72 lines
2.5 KiB
SQL
72 lines
2.5 KiB
SQL
-- =====================================================================
|
|
-- 0000 — Basis-Schema (employees + admin_users)
|
|
-- =====================================================================
|
|
-- Die ursprünglichen Kern-Tabellen wurden früher direkt in Supabase Studio
|
|
-- angelegt und waren NICHT als Migration erfasst — die folgenden
|
|
-- Migrationen (0001 ff.) setzen sie voraus und erweitern sie nur additiv
|
|
-- (alle per `add column if not exists`). Auf einer komplett leeren DB fehlten
|
|
-- sie dadurch, womit `bundle-migrations` allein keine frische Instanz
|
|
-- bootstrappen konnte.
|
|
--
|
|
-- Diese Migration schließt die Lücke. Sie ist bewusst `if not exists`:
|
|
-- auf bestehenden Instanzen (Prod/Demo) ein No-Op, auf leeren DBs legt sie
|
|
-- die Basis. Spaltenstand entspricht dem aktuellen, generierten Typ
|
|
-- (lib/database.types.ts) — alle späteren Migrationen sind additiv und
|
|
-- bleiben damit No-Ops auf diesen Spalten.
|
|
|
|
create table if not exists public.employees (
|
|
id uuid primary key default gen_random_uuid(),
|
|
slug text not null unique,
|
|
academic_title text,
|
|
qualification text,
|
|
qualification_en text,
|
|
first_name text not null,
|
|
last_name text not null,
|
|
position text not null,
|
|
position_en text,
|
|
company text not null,
|
|
org_unit_id uuid,
|
|
address text,
|
|
street text,
|
|
postal_code text,
|
|
city text,
|
|
email text not null,
|
|
phone_office text not null,
|
|
phone_mobile text,
|
|
website text,
|
|
linkedin_url text,
|
|
xing_url text,
|
|
calendar_url text,
|
|
photo_url text,
|
|
show_mobile boolean not null default false,
|
|
show_linkedin boolean not null default false,
|
|
show_xing boolean not null default false,
|
|
active boolean not null default true,
|
|
calendar_embed boolean not null default false,
|
|
successor_employee_id uuid,
|
|
successor_note text,
|
|
location_id uuid,
|
|
person_id uuid,
|
|
trusted_token text,
|
|
trusted_token_expires_at timestamptz,
|
|
trusted_token_created_at timestamptz,
|
|
trusted_reveal text[] not null default '{}',
|
|
created_at timestamptz not null default now(),
|
|
updated_at timestamptz not null default now()
|
|
);
|
|
|
|
create table if not exists public.admin_users (
|
|
id uuid primary key default gen_random_uuid(),
|
|
email text not null unique,
|
|
password_hash text not null,
|
|
created_at timestamptz not null default now(),
|
|
name text,
|
|
role text not null default 'admin',
|
|
invited_by uuid,
|
|
last_login_at timestamptz,
|
|
totp_secret text,
|
|
totp_enabled boolean not null default false,
|
|
totp_backup_codes text[] not null default '{}',
|
|
totp_enabled_at timestamptz
|
|
);
|