/
qwars
/
bpm-web-forms.web.app
Обзор
Документация
Войти
/
qwars
/
bpm-web-forms.web.app
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
shared/process.schema.ts
124 строки
5 KB
Alexandr Selunin
WIP :: Локализация ZOD
06 авг 2026, 11:51
06 авг 2026, 11:51
142a077
Код
Авторство
О чём код?
import { z } from "zod"; import { ProcessStatusSchema, StepStatusSchema } from "./enums"; import { i18nRegistry } from "./i18n-registry"; export const ProcessStepSchema = z .object({ uuid: z .uuid() .describe("Уникальный идентификатор шага") .meta({ id: "ProcessStepUUID", format: "uuid" }), processUUID: z .uuid() .describe("UUID родительского процесса") .meta({ id: "ProcessStepProcessUUID", format: "uuid" }), stepOrder: z .int() .describe("Порядковый номер шага в процессе") .meta({ id: "ProcessStepOrder", minimum: 1, example: 1 }), entityUUID: z .uuid() .describe("Какая форма заполняется на этом шаге") .meta({ id: "ProcessStepEntityUUID", format: "uuid" }), status: StepStatusSchema.default("PENDING") .describe("Статус выполнения шага") .meta({ id: "ProcessStepStatus", example: "PENDING" }), data: z .unknown() .nullable() .optional() .describe( "JSON с ответами пользователя на этом шаге (динамические данные)", ) .meta({ id: "ProcessStepData", format: "json" }), completedAt: z.coerce .date() .nullable() .optional() .describe("Дата фактического завершения шага") .meta({ id: "ProcessStepCompletedAt", format: "date-time" }), }) .describe("Отдельный шаг внутри процесса (Runtime)") .meta({ id: "ProcessStep", title: "Шаг процесса", description: "Отдельный шаг внутри процесса (Runtime)", }) .register(i18nRegistry, { ru: "Отдельный шаг внутри процесса (Runtime)", en: "Individual step within a process (Runtime)", }); export const ProcessSchema = z .object({ uuid: z .uuid() .describe("Уникальный идентификатор процесса") .meta({ id: "ProcessUUID", format: "uuid" }), definitionUUID: z .uuid() .describe("Ссылка на ProcessDefinition") .meta({ id: "ProcessDefinitionUUID", format: "uuid" }), groupUUID: z .uuid() .describe("Контекст группы, в которой запущен процесс") .meta({ id: "ProcessGroupUUID", format: "uuid" }), creatorUUID: z .uuid() .describe("UUID пользователя, запустившего процесс") .meta({ id: "ProcessCreatorUUID", format: "uuid" }), status: ProcessStatusSchema.default("DRAFT") .describe("Текущий статус процесса") .meta({ id: "ProcessStatus", example: "DRAFT" }), createdAt: z.coerce .date() .describe("Дата создания") .meta({ id: "ProcessCreatedAt", format: "date-time" }), updatedAt: z.coerce .date() .describe("Дата последнего изменения") .meta({ id: "ProcessUpdatedAt", format: "date-time" }), finishedAt: z.coerce .date() .nullable() .optional() .describe("Дата завершения (если статус COMPLETED/CANCELED)") .meta({ id: "ProcessFinishedAt", format: "date-time" }), }) .describe("Конкретный экземпляр заполняемого бизнес-процесса (Workflow)") .meta({ id: "Process", title: "Процесс", description: "Конкретный экземпляр заполняемого бизнес-процесса (Workflow)", }) .register(i18nRegistry, { ru: "Конкретный экземпляр заполняемого бизнес-процесса (Workflow)", en: "Concrete instance of a business process (Workflow)", }); export type Process = z.infer<typeof ProcessSchema>; export type ProcessStep = z.infer<typeof ProcessStepSchema>; export const CreateProcessSchema = ProcessSchema.omit({ uuid: true, createdAt: true, updatedAt: true, finishedAt: true, }).meta({ id: "CreateProcess", title: "Создание процесса", description: "DTO для запуска нового экземпляра бизнес-процесса", }); export type CreateProcess = z.infer<typeof CreateProcessSchema>; export const UpdateProcessStatusSchema = ProcessSchema.pick({ status: true, finishedAt: true, }) .partial() .meta({ id: "UpdateProcessStatus", title: "Изменение статуса процесса", description: "DTO для изменения статуса процесса", }); export type UpdateProcessStatus = z.infer<typeof UpdateProcessStatusSchema>;