feat(topology): добавить схему инфраструктуры на React Flow
Docker / build (push) Failing after 19s

Редактор схем с VPS-нодами, связями и персистом в SQLite по space.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Denozordec
2026-07-18 16:52:36 +07:00
co-authored by Cursor
parent c90b42c9c4
commit da818fe104
30 changed files with 2129 additions and 1 deletions
+56
View File
@@ -0,0 +1,56 @@
import { z } from 'zod'
export const topologyViewportSchema = z.object({
x: z.number(),
y: z.number(),
zoom: z.number(),
})
export const topologyDocumentSchema = z.object({
nodes: z.array(z.record(z.string(), z.unknown())),
edges: z.array(z.record(z.string(), z.unknown())),
viewport: topologyViewportSchema,
})
export type TopologyDocument = z.infer<typeof topologyDocumentSchema>
export const EMPTY_TOPOLOGY_DOCUMENT: TopologyDocument = {
nodes: [],
edges: [],
viewport: { x: 0, y: 0, zoom: 1 },
}
export const topologyDiagramSchema = z.object({
id: z.string(),
spaceId: z.string(),
name: z.string(),
document: topologyDocumentSchema,
locked: z.boolean(),
createdAt: z.string(),
updatedAt: z.string(),
})
export type TopologyDiagram = z.infer<typeof topologyDiagramSchema>
export const topologyDiagramListItemSchema = topologyDiagramSchema.omit({
document: true,
})
export type TopologyDiagramListItem = z.infer<typeof topologyDiagramListItemSchema>
export const topologyCreateSchema = z.object({
name: z.string().min(1, 'Укажите название схемы').max(120),
document: topologyDocumentSchema.optional(),
})
export type TopologyCreateInput = z.infer<typeof topologyCreateSchema>
export const topologyUpdateSchema = z.object({
name: z.string().min(1).max(120).optional(),
document: topologyDocumentSchema.optional(),
locked: z.boolean().optional(),
/** Client's last known updatedAt — 409 if stale */
expectedUpdatedAt: z.string().optional(),
})
export type TopologyUpdateInput = z.infer<typeof topologyUpdateSchema>
+1
View File
@@ -7,3 +7,4 @@ export * from './contracts/balance-ledger.js'
export * from './contracts/settings.js'
export * from './contracts/custom-fields.js'
export * from './contracts/project.js'
export * from './contracts/topology.js'