38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
import Joi from 'joi';
|
|
|
|
/**
|
|
* Validator for saving video progress
|
|
*/
|
|
export const SaveVideoProgressValidator = Joi.object({
|
|
video_progress_seconds: Joi.number().min(0).required().messages({
|
|
'any.required': 'Video progress seconds is required',
|
|
'number.min': 'Video progress must be at least 0'
|
|
}),
|
|
video_duration_seconds: Joi.number().min(0).optional().messages({
|
|
'number.min': 'Video duration must be at least 0'
|
|
})
|
|
});
|
|
|
|
/**
|
|
* Validator for quiz answer
|
|
*/
|
|
const QuizAnswerValidator = Joi.object({
|
|
question_id: Joi.number().integer().positive().required().messages({
|
|
'any.required': 'Question ID is required',
|
|
'number.positive': 'Question ID must be positive'
|
|
}),
|
|
choice_id: Joi.number().integer().positive().required().messages({
|
|
'any.required': 'Choice ID is required',
|
|
'number.positive': 'Choice ID must be positive'
|
|
})
|
|
});
|
|
|
|
/**
|
|
* Validator for submitting quiz answers
|
|
*/
|
|
export const SubmitQuizValidator = Joi.object({
|
|
answers: Joi.array().items(QuizAnswerValidator).min(1).required().messages({
|
|
'any.required': 'Answers are required',
|
|
'array.min': 'At least one answer is required'
|
|
})
|
|
});
|