-- Better Auth tables (copied from working monorepo) -- Using auth_ prefix and snake_case columns CREATE TYPE "public"."auth_user_roles" AS ENUM('user', 'admin'); CREATE TABLE "auth_accounts" ( "id" text PRIMARY KEY NOT NULL, "user_id" text NOT NULL, "provider_id" text NOT NULL, "account_id" text NOT NULL, "password" text, "access_token" text, "refresh_token" text, "id_token" text, "access_token_expires_at" timestamp with time zone, "refresh_token_expires_at" timestamp with time zone, "scope" text, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "updated_at" timestamp with time zone DEFAULT now() NOT NULL ); ALTER TABLE "auth_accounts" ENABLE ROW LEVEL SECURITY; CREATE TABLE "auth_jwks" ( "id" text PRIMARY KEY NOT NULL, "public_key" text NOT NULL, "private_key" text NOT NULL, "created_at" timestamp with time zone DEFAULT now() NOT NULL ); ALTER TABLE "auth_jwks" ENABLE ROW LEVEL SECURITY; CREATE TABLE "auth_sessions" ( "id" text PRIMARY KEY NOT NULL, "user_id" text NOT NULL, "expires_at" timestamp with time zone, "token" text NOT NULL, "ip_address" text, "user_agent" text, "impersonated_by" text, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "updated_at" timestamp with time zone DEFAULT now() NOT NULL ); ALTER TABLE "auth_sessions" ENABLE ROW LEVEL SECURITY; CREATE TABLE "auth_users" ( "id" text PRIMARY KEY NOT NULL, "email" text NOT NULL, "email_verified" boolean DEFAULT false NOT NULL, "name" text NOT NULL, "image" text, "role" "auth_user_roles" DEFAULT 'user' NOT NULL, "banned" boolean DEFAULT false NOT NULL, "ban_reason" text, "ban_expires" timestamp with time zone, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "updated_at" timestamp with time zone DEFAULT now() NOT NULL ); ALTER TABLE "auth_users" ENABLE ROW LEVEL SECURITY; CREATE TABLE "auth_verifications" ( "id" text PRIMARY KEY NOT NULL, "value" text NOT NULL, "identifier" text NOT NULL, "expires_at" timestamp with time zone, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "updated_at" timestamp with time zone DEFAULT now() NOT NULL ); ALTER TABLE "auth_verifications" ENABLE ROW LEVEL SECURITY; ALTER TABLE "auth_accounts" ADD CONSTRAINT "auth_accounts_user_id_auth_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."auth_users"("id") ON DELETE cascade ON UPDATE no action; ALTER TABLE "auth_sessions" ADD CONSTRAINT "auth_sessions_user_id_auth_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."auth_users"("id") ON DELETE cascade ON UPDATE no action; ALTER TABLE "auth_sessions" ADD CONSTRAINT "auth_sessions_impersonated_by_auth_users_id_fk" FOREIGN KEY ("impersonated_by") REFERENCES "public"."auth_users"("id") ON DELETE set null ON UPDATE no action; CREATE UNIQUE INDEX "email_unique_index" ON "auth_users" USING btree (lower("email"));