metis-desk/modules/resources/src/common/inventory.ts

44 lines
1.6 KiB
TypeScript

import { z } from "zod/v4";
import {
ResourceInputSchema,
ResourceSpecificationSchema,
ResourceValueSchema,
} from "../api/domain/resource-values";
export type { ResourceCharacteristic, ResourceInput } from "../api/domain/resource-values";
export { ResourceInputSchema, ResourceSpecificationSchema, ResourceValueSchema };
export const InventoryParamsSchema = z.strictObject({ companyId: z.uuid() });
export const ResourceParamsSchema = InventoryParamsSchema.extend({ id: z.uuid() });
export const SaveResourceRequestSchema = z.strictObject({ values: ResourceInputSchema });
export const ResourceRevisionSchema = z.strictObject({
id: z.uuid(),
values: ResourceInputSchema,
actorId: z.uuid(),
actorName: z.string().min(1),
recordedAt: z.iso.datetime(),
});
export const ResourceSchema = z.strictObject({
id: z.uuid(),
companyId: z.uuid(),
specification: ResourceSpecificationSchema,
values: ResourceInputSchema,
history: z.array(ResourceRevisionSchema).min(1),
});
export const ResourceReferenceSchema = z.strictObject({
id: z.uuid(),
kind: z.enum(["account", "system", "environment", "resource_type"]),
name: z.string(),
active: z.boolean(),
systemId: z.uuid().nullable(),
});
export type ResourceReferenceDTO = z.infer<typeof ResourceReferenceSchema>;
export const InventoryResponseSchema = z.strictObject({
resources: z.array(ResourceSchema),
references: z.array(ResourceReferenceSchema).optional(),
});
export const ResourceResponseSchema = z.strictObject({ resource: ResourceSchema });
export type ResourceDTO = z.infer<typeof ResourceSchema>;
export type ResourceResponseDTO = z.infer<typeof ResourceResponseSchema>;