fix: restore mobile report scrolling and published product edits
Independent Staging Quality Gate / validate (push) Has been cancelled
Independent Staging Quality Gate / publish (push) Has been cancelled

Report pages now scroll inside the chat shell lock, and admin product save forks a draft or retires a published plan instead of rejecting with a generic constraint error.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-08-18 17:28:22 +08:00
parent 3c9b0bb32b
commit f4a2ba86ae
13 changed files with 398 additions and 8 deletions
+9 -1
View File
@@ -37,7 +37,11 @@ const publishSchema = z.object({
action: z.literal("publish"),
id: z.string().uuid(),
}).strict();
const mutationSchema = z.discriminatedUnion("action", [saveSchema, publishSchema]);
const deleteSchema = z.object({
action: z.literal("delete"),
id: z.string().uuid(),
}).strict();
const mutationSchema = z.discriminatedUnion("action", [saveSchema, publishSchema, deleteSchema]);
type ProductRow = {
id: string; code: string; version: number; name: string; description: string;
@@ -92,6 +96,10 @@ export async function POST(request: Request) {
const rows = await queryAdminRows<{ id: string }>("select public.admin_publish_product($1,$2,$3,$4) id", [session.user.id, body.data.id, "admin_console_publish_product", rid]);
return NextResponse.json({ data: { id: rows[0]!.id, requestId: rid } });
}
if (body.data.action === "delete") {
const rows = await queryAdminRows<{ id: string }>("select public.admin_delete_product($1,$2,$3,$4) id", [session.user.id, body.data.id, "admin_console_delete_product", rid]);
return NextResponse.json({ data: { id: rows[0]!.id, requestId: rid } });
}
const value = body.data;
const rows = await queryAdminRows<{ id: string }>(`
select public.admin_save_product_draft($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14::jsonb,$15,$16) id