import { z } from "zod"; import { bucketSchema } from "@/schema/public/asset/asset.schema"; import { featuresSchema } from "@/schema/public/components/features/features.schema"; import { publishedAssetObjectSchema } from "@/schema/published/components/assetObject/assetObject.schema"; const quizObjectSchema = z .object({ quiz: z.object({ pdf: bucketSchema.nullish() }).nullish(), quiz_answers: z.object({ pdf: bucketSchema.nullish() }).nullish(), }) .nullish(); const lessonAssetQuizSchema = z.object({ quiz_uid: z.string(), quiz_object: quizObjectSchema, updated_at: z.string(), }); const assetBaseSchema = z.object({ asset_uid: z.string(), asset_object: publishedAssetObjectSchema.nullish(), created_at: z.string(), updated_at: z.string(), }); const assetSlidedeckSchema = assetBaseSchema.extend({ asset_type: z.literal("slidedeck"), }); const assetWorksheetSchema = assetBaseSchema.extend({ asset_type: z.literal("worksheet"), }); const assetWorksheetAnswersSchema = assetBaseSchema.extend({ asset_type: z.literal("worksheet_answers"), }); const assetSupplementarySchema = assetBaseSchema.extend({ asset_type: z.literal("supplementary_resource"), }); const assetLessonGuideSchema = assetBaseSchema.extend({ asset_type: z.literal("lesson_guide"), url: z.string(), }); const tpcDownloadableFileSchema = z.object({ asset_id: z.number().nullable(), media_object: z.object({ display_name: z.string() }).loose(), }); export const lessonAssetsSchema = z.object({ lesson_id: z.number(), slug: z.string(), features: featuresSchema.nullish(), quiz_exit: lessonAssetQuizSchema.nullish(), quiz_starter: lessonAssetQuizSchema.nullish(), asset_slidedeck: assetSlidedeckSchema.nullish(), asset_worksheet: assetWorksheetSchema.nullish(), asset_worksheet_answers: assetWorksheetAnswersSchema.nullish(), asset_supplementary_asset: assetSupplementarySchema.nullish(), asset_lesson_guide: assetLessonGuideSchema.nullish(), tpc_downloadablefiles: z.array(tpcDownloadableFileSchema).nullish(), }); export type LessonAssets = z.infer;