CREATE TABLE IF NOT EXISTS "PaymentOrder" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "userId" uuid NOT NULL REFERENCES "User"("id") ON DELETE cascade, "provider" varchar(32) NOT NULL DEFAULT 'dulupay', "outTradeNo" varchar(128) NOT NULL, "tradeNo" varchar(128), "packageId" varchar(64), "points" integer NOT NULL DEFAULT 0, "amountCents" integer NOT NULL DEFAULT 0, "currency" varchar(8) NOT NULL DEFAULT 'CNY', "payType" varchar(32), "status" varchar(32) NOT NULL DEFAULT 'pending', "paymentUrl" text, "rawCallback" jsonb, "errorMessage" text, "paidAt" timestamp, "createdAt" timestamp NOT NULL DEFAULT now(), "updatedAt" timestamp NOT NULL DEFAULT now(), CONSTRAINT "PaymentOrder_status_check" CHECK ("status" IN ('pending', 'paid', 'failed', 'closed')), CONSTRAINT "PaymentOrder_out_trade_no_unique" UNIQUE("outTradeNo") ); CREATE INDEX IF NOT EXISTS "payment_order_user_created_idx" ON "PaymentOrder" ("userId", "createdAt" DESC); CREATE INDEX IF NOT EXISTS "payment_order_out_trade_idx" ON "PaymentOrder" ("outTradeNo"); CREATE INDEX IF NOT EXISTS "payment_order_trade_no_idx" ON "PaymentOrder" ("tradeNo");