Files
pwa/backend/src/modules/assignments/assignments.schemas.ts
T
ar.badieiandCursor c6243caa35 Add read-only Noya admin panel with assignments and UX polish.
Ship admin auth, user overview, assessments, chats, assignment filters/export, security hardening, and a separate desktop admin shell with clearer assessment answers.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 08:00:24 +03:30

40 lines
1.4 KiB
TypeScript

import { z } from 'zod';
export const assignmentListFilterSchema = z.object({
filter: z.enum(['active', 'pending_report', 'completed', 'all']).optional().default('all'),
});
/** Soft experience note — does not complete the assignment by itself. */
export const assignmentReportBodySchema = z.object({
reportText: z.string().trim().min(3).max(5000),
reportStatus: z.enum(['completed', 'in_progress', 'difficult', 'not_started']),
});
export const assignmentEntryBodySchema = z.object({
entryDate: z
.string()
.regex(/^\d{4}-\d{2}-\d{2}$/, 'entryDate must be YYYY-MM-DD')
.optional(),
dayStatus: z.enum(['done', 'skipped', 'difficult']).optional().default('done'),
responseData: z.record(z.unknown()),
note: z.string().trim().max(2000).optional().nullable(),
});
export const assignmentEntryPatchSchema = z.object({
dayStatus: z.enum(['done', 'skipped', 'difficult']).optional(),
responseData: z.record(z.unknown()).optional(),
note: z.string().trim().max(2000).optional().nullable(),
});
export const assignmentStartSchema = z.object({}).optional();
export const assignmentCompleteSchema = z.object({
completionNote: z.string().trim().max(2000).optional().nullable(),
});
export const assignmentDraftSchema = z.object({
draftData: z.record(z.unknown()),
/** When true, required fields must be valid and the assignment is marked COMPLETED. */
completeIfValid: z.boolean().optional().default(false),
});