import type { ColumnType } from "kysely"; import type { Database } from "@/lib/supabase/types"; // Die Tabellenform für Kysely, abgeleitet aus der bestehenden // Schemabeschreibung — nicht daneben gestellt. // // Zwei Beschreibungen desselben Schemas driften auseinander, und die eine // hier ist bereits gegen die Migrationen abgesichert: `npm run types:check` // vergleicht lib/supabase/types.ts Spalte für Spalte mit // supabase/migrations/*.sql und schlägt in der CI fehl, wenn etwas fehlt. // Diese Ableitung erbt diese Absicherung. // // Die Datei heisst noch lib/supabase/types.ts, weil sie aus der Zeit stammt, // als PostgREST der Zugriffsweg war. Sie beschreibt reines PostgreSQL und // wird beim Entfernen der Supabase-Pakete lediglich umbenannt. type Tables = Database["public"]["Tables"]; /** * Row/Insert/Update einer Tabelle in Kyselys ColumnType-Form. * * Kysely braucht die drei Richtungen getrennt: was beim Lesen herauskommt, * was beim Einfügen erlaubt ist (Spalten mit Vorgabewert dürfen fehlen) und * was beim Aktualisieren erlaubt ist. */ type Columns = { [K in keyof Tables[T]["Row"]]: K extends keyof Tables[T]["Insert"] ? ColumnType< Tables[T]["Row"][K], Tables[T]["Insert"][K], K extends keyof Tables[T]["Update"] ? Tables[T]["Update"][K] : never > : // Spalten, die es nur beim Lesen gibt (von Triggern gesetzt). ColumnType; }; export type DB = { [T in keyof Tables]: Columns }; /** Die Tabelle, die auth.users ablöst. Noch nicht in der Alt-Beschreibung. */ export type AppUsersTable = { id: ColumnType; external_id: string; email: string; full_name: ColumnType; created_at: ColumnType; last_seen_at: ColumnType; }; export type Schema = DB & { app_users: AppUsersTable };