feat: introduce Joi validation schemas and integrate them across various controllers for categories, lessons, courses, chapters, announcements, and admin course approvals.
This commit is contained in:
parent
c5aa195b13
commit
b56f604890
14 changed files with 553 additions and 28 deletions
38
Backend/src/validators/CoursesStudent.validator.ts
Normal file
38
Backend/src/validators/CoursesStudent.validator.ts
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
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'
|
||||
})
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue