Skip to content
Visibility internal Owner _ Approver _ Created _ Updated _

UploadQuizSchema.ts



FieldValue
TypeTypeScript
SourceProduct/Projects/Domain_Quiz/Schemas/UploadQuizSchema.ts
ParentProduct
GitHubProduct/Projects/Domain_Quiz/Schemas/UploadQuizSchema.ts

This page is auto-generated. Edit the source to change the content.



import { z } from 'zod';

export const UploadQuizQuestionTypeSchema = z.enum([
  'scale',
  'boolean',
  'multiple_choice',
  'freeform',
]);

export const UploadQuizAnswerSchema = z.object({
  label: z.string(),
  value: z.string(),
  score: z.number().gte(0).lte(10),
});

export const UploadQuizQuestionSchema = z.object({
  handle: z.string().min(3).max(32),
  type: UploadQuizQuestionTypeSchema,
  question: z.string(),
  maxScore: z.number().gte(1).lte(10),
  weight: z.number().gte(0).lte(5),
  answers: z.array(UploadQuizAnswerSchema).optional(),
  filterQuestion: z.string().min(3).max(32).optional(),
  filterValues: z.array(z.string()).default([]),
  autoFill: z.string().optional(),
  evalHint: z.string().optional(),
});

export const UploadQuizSectionSchema = z.object({
  handle: z.string().min(3).max(32),
  name: z.string(),
  questions: z.array(UploadQuizQuestionSchema),
});

export const UploadQuizSchema = z.object({
  name: z.string().min(1).max(100),
  slug: z.string().regex(new RegExp('^[0-9a-z_]{3,60}$')),
  group: z.string().min(3).max(10),
  handle: z.string().min(3).max(17),
  version: z.number().default(1),
  date: z.string().regex(new RegExp('^([1-3][0-9]{3})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$')),
  image: z.string().optional(),
  icon: z.string().optional(),
  description: z.string(),
  instructions: z.string(),
  randomizeAnswers: z.boolean().default(false),
  analysisBotHandle: z.string(),
  sections: z.array(UploadQuizSectionSchema),
});

export type UploadQuiz = z.infer<typeof UploadQuizSchema>;