import { z } from "zod"; import zodToCamelCase from "zod-to-camel-case"; import { _stateSchema, _cohortSchema, timestampsSchema, newState, publishedState, } from "@/schema/public/components/base/base.schema"; import { safeString } from "@/schema/public/components/base/safe-string.schema"; import { keyLearningPointsSchema } from "@/schema/public/components/keyLearningPoints/keyLearningPoints.schema"; import { keywordsSchema } from "@/schema/public/components/keywords/keywords.schema"; import { equipmentAndResourcesSchema } from "@/schema/public/components/equipmentAndResources/equipmentAndResources.schema"; import { lessonOutlineSchema } from "@/schema/public/components/lessonOutline/lessonOutline.schema"; import { mediaClipsRecordSchema } from "@/schema/public/components/mediaClips/mediaClips.schema"; import { additionalFileObjectSchema } from "@/schema/public/components/additionalFiles/additionalFiles.schema"; import { featuresSchema } from "@/schema/public/components/features/features.schema"; import { misconceptionsAndCommonMistakesSchema } from "@/schema/public/components/misconceptionsAndCommonMistakes/misconceptionsAndCommonMistakes.schema"; import { teacherTipsSchema } from "@/schema/public/components/teacherTips/teacherTips.schema"; export const lessonSchema = timestampsSchema.extend({ lesson_id: z.number(), lesson_uid: z.string(), slug: z.string(), title: safeString, description: safeString, pupil_lesson_outcome: safeString, phonics_outcome: safeString.nullable(), key_learning_points: z.array(keyLearningPointsSchema).nullable(), equipment_and_resources: z.array(equipmentAndResourcesSchema).nullable(), content_guidance_details: z .array(z.object({ details: z.string() })) .nullable(), content_guidance: z.array(z.number()).nullable(), copyright_content: z .array( z.object({ copyright_info: z.string(), }), ) .nullable(), supervision_level: z.string().nullable(), thirdpartycontent_list: z.array(z.number()).nullable(), misconceptions_and_common_mistakes: z .array(misconceptionsAndCommonMistakesSchema) .nullable(), keywords: z.array(keywordsSchema).nullable(), video_id: z.number().nullable(), sign_language_video_id: z.number().nullable(), quiz_id_starter: z.number().nullable(), quiz_id_exit: z.number().nullable(), teacher_tips: z.array(teacherTipsSchema).nullable(), asset_id_slidedeck: z.number().nullable(), asset_id_worksheet: z.number().nullable(), asset_id_worksheet_answers: z.number().nullable(), asset_id_supplementary_asset: z.number().nullable(), asset_id_lesson_guide: z.number().nullable(), expiration_date: z.string().nullable(), lesson_outline: z.array(lessonOutlineSchema).nullish(), media_clips: mediaClipsRecordSchema.nullish(), deprecated_fields: z.record(z.string(), z.unknown()).nullable(), _state: _stateSchema, _cohort: _cohortSchema, _deleted: z.boolean(), _release_id: z.number().nullable(), teacher_details: z.array(z.object({})).nullable(), attribution: z.array(z.object({})).nullable(), tags: z.array(z.number()).nullable(), tpc_media_list: z.array(z.number()).nullable(), tpc_works_list: z.array(z.number()).nullable(), tpc_downloadablefiles_list: z.array(z.number()).nullable(), tpc_quizimages_list: z.array(z.number()).nullable(), features: featuresSchema.nullable(), new_vocabulary_list: z.array(z.object({})).nullable(), revisited_vocabulary_list: z.array(z.object({})).nullable(), downloadable_files: z.array(additionalFileObjectSchema).nullable(), lesson_release_date: z.string().nullish(), }); export type Lesson = z.infer; export const lessonNewSchema = lessonSchema .pick({ lesson_id: true, lesson_uid: true, phonics_outcome: true, title: true, key_learning_points: true, equipment_and_resources: true, content_guidance_details: true, content_guidance: true, copyright_content: true, supervision_level: true, thirdpartycontent_list: true, misconceptions_and_common_mistakes: true, keywords: true, video_id: true, sign_language_video_id: true, teacher_tips: true, quiz_id_starter: true, quiz_id_exit: true, asset_id_slidedeck: true, asset_id_worksheet: true, asset_id_worksheet_answers: true, asset_id_supplementary_asset: true, asset_id_lesson_guide: true, expiration_date: true, lesson_outline: true, media_clips: true, deprecated_fields: true, _cohort: true, _deleted: true, _release_id: true, teacher_details: true, attribution: true, tags: true, tpc_media_list: true, tpc_works_list: true, tpc_downloadablefiles_list: true, tpc_quizimages_list: true, features: true, new_vocabulary_list: true, revisited_vocabulary_list: true, downloadable_files: true, lesson_release_date: true, }) .extend({ _state: newState, pupil_lesson_outcome: safeString.nullish(), description: safeString.nullish(), }); export const lessonPublishedSchema = lessonSchema.extend({ _state: publishedState, }); export type LessonNew = z.infer; export type LessonPublished = z.infer; export const lessonSchemaCamel = zodToCamelCase(lessonSchema); export type LessonCamel = z.infer; export const lessonNewSchemaCamel = zodToCamelCase(lessonNewSchema); export type LessonNewCamel = z.infer; export const lessonPublishedSchemaCamel = zodToCamelCase(lessonPublishedSchema); export type LessonPublishedCamel = z.infer; // Backwards compatibility exports /** * @deprecated Use lessonSchema instead. */ export const lessonData = lessonSchema; export const lessonDataSchema = lessonSchema; export type LessonData = Lesson;