server be & fe

This commit is contained in:
azykov@mail.ru
2026-09-29 13:50:01 +03:00
commit 657009bd6c
56 changed files with 6162 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
import { z } from 'zod';
import { CODE_TYPES } from './codeTypes.js';
import { ROLES } from './models.js';
export const colorSchema = z.string().regex(/^#[0-9a-fA-F]{6}$/, 'Color must be #RRGGBB');
export const cardFieldsSchema = z.object({
name: z.string().trim().min(1, 'Name is required').max(200),
color: colorSchema,
code: z.string().min(1, 'Code is required').max(4000),
codeType: z.enum(CODE_TYPES),
});
export type CardFields = z.infer<typeof cardFieldsSchema>;
export const cardPatchSchema = cardFieldsSchema.partial().extend({
deleted: z.boolean().optional(),
});
export type CardPatch = z.infer<typeof cardPatchSchema>;
export const emailSchema = z.string().trim().toLowerCase().pipe(z.email());
export const groupInputSchema = z.object({
name: z.string().trim().min(1, 'Name is required').max(100),
});
export const userCreateSchema = z.object({
email: emailSchema,
role: z.enum(ROLES).default('user'),
groupId: z.string().optional(),
});
export const userPatchSchema = z.object({
role: z.enum(ROLES).optional(),
groupId: z.string().optional(),
});
export const keyCreateSchema = z.object({
label: z.string().trim().max(100).optional(),
});
export const currentGroupSchema = z.object({
groupId: z.string().min(1),
});