feat: add db:seed command to package.json and update README.md for seeding reference data. Enhance job status handling in generation logic to support completed_partial status, improving error reporting and user feedback. Introduce new utility functions for job outcome resolution and non-retryable error detection, along with corresponding tests. Update database migration scripts to include new tables and fields for improved data management.
ef46e44 | 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"); | |