fix(admin): remove manual reasons and repair code creation
Independent Staging Quality Gate / validate (push) Has been cancelled
Independent Staging Quality Gate / publish (push) Has been cancelled

This commit is contained in:
Jesse_Chen
2026-08-16 16:49:05 +08:00
parent 9df43e8112
commit c712787ec2
24 changed files with 180 additions and 206 deletions
+3 -10
View File
@@ -12,14 +12,10 @@ import {
export const runtime = "nodejs";
const paramsSchema = z.object({ id: z.string().uuid() });
const revokeCodeSchema = z.object({
reason: z.string().trim().min(1).max(500),
});
const updateCodeSchema = z
.object({
note: z.string().trim().max(500).nullable().optional(),
expiresAt: z.string().datetime({ offset: true }).nullable().optional(),
reason: z.string().trim().min(1).max(500),
})
.refine((value) => "note" in value || "expiresAt" in value, {
message: "至少提供一个可修改字段",
@@ -52,7 +48,7 @@ export async function PATCH(
p_note: body.note ?? null,
p_set_expires_at: "expiresAt" in body,
p_expires_at: body.expiresAt ?? null,
p_reason: body.reason,
p_reason: "admin_console_update_redemption_code",
},
);
return NextResponse.json({ data: rows[0] });
@@ -71,15 +67,12 @@ export async function DELETE(
"billing.adjustments.write",
);
const parsed = paramsSchema.safeParse(await context.params);
const parsedBody = revokeCodeSchema.safeParse(
await request.json().catch(() => null),
);
if (!parsed.success || !parsedBody.success) return invalidQueryResponse();
if (!parsed.success) return invalidQueryResponse();
const rows = await runCodeRpc(
"admin_revoke_redemption_code",
session,
requestId(request),
{ p_code_id: parsed.data.id, p_reason: parsedBody.data.reason },
{ p_code_id: parsed.data.id, p_reason: "admin_console_revoke_redemption_code" },
);
return NextResponse.json({ data: rows[0] });
} catch (error) {
+1 -2
View File
@@ -28,7 +28,6 @@ const createCodesSchema = z.object({
count: z.number().int().min(1).max(100),
expiresAt: z.string().datetime({ offset: true }).nullable().optional(),
note: z.string().trim().max(500).nullable().optional(),
reason: z.string().trim().min(1).max(500),
});
type CodeRow = {
@@ -147,7 +146,7 @@ export async function POST(request: Request) {
"admin_create_redemption_codes",
session,
operationRequestId,
{ p_codes: records, p_reason: parsed.data.reason },
{ p_codes: records, p_reason: "admin_console_create_redemption_codes" },
);
const byMask = new Map<string, RedemptionCodeRecord>(
stored.map((record) => [record.mask, record]),