fix(ui): защищать оптимизацию OSPF и подтверждение результата

This commit is contained in:
Denozordec committed 2026-09-30 17:46:56 +07:00
1 parent 4254904c3a
commit baa43b7ad4
8 files changed
+193 -42

No files matched your search

+7
View File
@@ -15,3 +15,10 @@ export const ospfCatalogSchema = z.object({
})
export const ospfServersSchema = vxlanServersSchema
export type OspfCatalog = z.infer<typeof ospfCatalogSchema>
export const ospfOptimizeSchema = z.object({
serverId: z.number().int().positive(), serverName: z.string(), pingWeight: z.number().int().min(0).max(100),
optimizedCount: z.number().int().nonnegative(),
applied: z.array(z.object({ interface: z.string().min(1), from: z.number().int().min(1).max(65535), to: z.number().int().min(1).max(65535) })),
interfaces: z.array(z.object({ id: z.string().trim().min(1), interface: z.string(), currentCost: z.number().int().min(1).max(65535), optimalCost: z.number().int().min(1).max(65535), score: z.number().finite(), pingMs: z.number().finite().nonnegative(), dlMbps: z.number().finite().nonnegative(), ulMbps: z.number().finite().nonnegative() })),
}).refine(data => data.optimizedCount === data.applied.length && new Set(data.interfaces.map(row => row.id)).size === data.interfaces.length && new Set(data.applied.map(row => row.interface)).size === data.applied.length && data.applied.every(row => data.interfaces.some(iface => iface.interface === row.interface && iface.currentCost === row.from && iface.optimalCost === row.to)))