mirror of
https://github.com/R0m1k3/CollectFlow.git
synced 2026-10-11 17:26:32 +02:00
52 lines
1.7 KiB
TypeScript
52 lines
1.7 KiB
TypeScript
"use server";
|
|
|
|
import { db } from "@/db";
|
|
import { sessionSnapshots } from "@/db/schema";
|
|
import { z } from "zod";
|
|
|
|
const SaveSnapshotSchema = z.object({
|
|
codeFournisseur: z.string(),
|
|
nomFournisseur: z.string().optional(),
|
|
magasin: z.string(),
|
|
label: z.string().optional(),
|
|
changes: z.record(z.string(), z.object({
|
|
before: z.string().nullable(),
|
|
after: z.string(),
|
|
})),
|
|
summary: z.object({
|
|
totalRows: z.number(),
|
|
totalCa: z.number(),
|
|
totalMarge: z.number(),
|
|
tauxMargeGlobal: z.number(),
|
|
}).optional(),
|
|
});
|
|
|
|
export async function saveSnapshot(raw: unknown) {
|
|
const parsed = SaveSnapshotSchema.safeParse(raw);
|
|
if (!parsed.success) {
|
|
console.error("Snapshot validation failed:", parsed.error.format());
|
|
return { success: false, error: "Validation failed: " + parsed.error.issues.map((i: any) => i.message).join(", ") };
|
|
}
|
|
|
|
const { codeFournisseur, nomFournisseur, magasin, label, changes, summary } = parsed.data;
|
|
|
|
try {
|
|
const [created] = await db
|
|
.insert(sessionSnapshots)
|
|
.values({
|
|
codeFournisseur,
|
|
nomFournisseur: nomFournisseur ?? null,
|
|
magasin,
|
|
label: label ?? `Snapshot — ${new Date().toLocaleDateString("fr-FR")}`,
|
|
changes,
|
|
summaryJson: summary ?? null,
|
|
})
|
|
.returning({ id: sessionSnapshots.id });
|
|
|
|
return { success: true, snapshotId: created?.id };
|
|
} catch (err) {
|
|
console.error("Snapshot DB insertion error:", err);
|
|
return { success: false, error: "Database error during insertion" };
|
|
}
|
|
}
|