CREATE TABLE IF NOT EXISTS "admin_audit_log" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "admin_user_id" text NOT NULL, "action" text NOT NULL, "target_user_id" text, "details" jsonb, "created_at" timestamp DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "credit_transaction" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "user_id" text NOT NULL, "amount" integer NOT NULL, "type" text NOT NULL, "description" text, "tokens_used" integer, "created_at" timestamp DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "platform_config" ( "key" text PRIMARY KEY NOT NULL, "value" text NOT NULL, "updated_at" timestamp DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "user_credit" ( "user_id" text PRIMARY KEY NOT NULL, "token_balance" integer DEFAULT 0 NOT NULL, "lifetime_tokens_used" integer DEFAULT 0 NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp DEFAULT now() NOT NULL ); --> statement-breakpoint ALTER TABLE "answer" ADD COLUMN IF NOT EXISTS "partial_score" integer;--> statement-breakpoint ALTER TABLE "generation_job" ADD COLUMN IF NOT EXISTS "input_json" jsonb;--> statement-breakpoint ALTER TABLE "question" ADD COLUMN IF NOT EXISTS "is_case_sensitive" boolean DEFAULT false NOT NULL;--> statement-breakpoint ALTER TABLE "question" ADD COLUMN IF NOT EXISTS "is_featured" boolean DEFAULT false NOT NULL;--> statement-breakpoint ALTER TABLE "user" ADD COLUMN IF NOT EXISTS "role" text DEFAULT 'user' NOT NULL;--> statement-breakpoint ALTER TABLE "user" ADD COLUMN IF NOT EXISTS "suspended" boolean DEFAULT false NOT NULL;--> statement-breakpoint DO $$ BEGIN ALTER TABLE "admin_audit_log" ADD CONSTRAINT "admin_audit_log_admin_user_id_user_id_fk" FOREIGN KEY ("admin_user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "admin_audit_log" ADD CONSTRAINT "admin_audit_log_target_user_id_user_id_fk" FOREIGN KEY ("target_user_id") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "credit_transaction" ADD CONSTRAINT "credit_transaction_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "user_credit" ADD CONSTRAINT "user_credit_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint CREATE INDEX IF NOT EXISTS "adminAuditLog_adminUserId_idx" ON "admin_audit_log" USING btree ("admin_user_id");--> statement-breakpoint CREATE INDEX IF NOT EXISTS "adminAuditLog_action_idx" ON "admin_audit_log" USING btree ("action");--> statement-breakpoint CREATE INDEX IF NOT EXISTS "creditTransaction_userId_idx" ON "credit_transaction" USING btree ("user_id");--> statement-breakpoint CREATE INDEX IF NOT EXISTS "userCredit_userId_idx" ON "user_credit" USING btree ("user_id");