Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

validation logic improvement and bug fixing #41

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"connect-mysql": "^4.0.0",
"connect-mysql2": "^2.2.6",
"cookie-parser": "^1.4.6",
"date-fns": "^4.1.0",
"dotenv": "^16.4.5",
"express": "^4.21.1",
"express-async-errors": "^3.1.1",
Expand Down
4 changes: 2 additions & 2 deletions src/controller/comment.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export const updateCommentPost = asyncHandler(
}

const commentData = new CommentDTO();
commentData.comment_text = updatedText;
commentData.parent_id = undefined;

// Update comment and save to database
comment.comment_text = updatedText;
Expand Down Expand Up @@ -92,7 +92,7 @@ export const createCommentPost = asyncHandler(
commentData.review_id = review_id;
commentData.user_id = user_id;
commentData.comment_text = reply;
commentData.parent_id = parent_id;
commentData.parent_id = parent_id ? parent_id : undefined;
commentData.course_id = course_id;

try {
Expand Down
2 changes: 0 additions & 2 deletions src/controller/course.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,6 @@ export const courseShowGet = asyncHandler(
filterData.sortOrder = sortOrder;
}

await validateOrReject(filterData);

try {
await validateOrReject(filterData);
const trans = {
Expand Down
6 changes: 3 additions & 3 deletions src/controller/enrollment.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ import asyncHandler from 'express-async-handler';
import { updateEnrollmentProgress, enrollUserInCourse, getEnrollment, markLessonAsDone, hasUserPurchasedCourse, getEnrollmentWithCourseAndUser } from '../service/enrollment.service';
import { getProfessorAndCourseCountByCourseId, getSectionsWithLessons, countEnrolledUsersInCourse, getCourseById, getProfessorByCourse } from '../service/course.service';
import { getAllCommentsByCourseId } from '../service/comment.service';
import { getUserById } from '@src/service/user.service';
import { getEnrollmentLesson } from '@src/service/enrollmentlesson.service';
import { getUserById } from 'src/service/user.service';
import { getEnrollmentLesson } from 'src/service/enrollmentlesson.service';
import { validateOrReject } from 'class-validator';
import { plainToInstance } from 'class-transformer';
import { GetUserCourseEnrollmentsDto, UpdateLessonProgressDto } from '@src/entity/dto/entrollment.dto';
import { GetUserCourseEnrollmentsDto, UpdateLessonProgressDto } from 'src/entity/dto/entrollment.dto';


export const getUserCourseEnrollments = asyncHandler(async (req: Request, res: Response) => {
Expand Down
22 changes: 18 additions & 4 deletions src/controller/lesson.controller.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { Request, Response } from 'express';
import asyncHandler from 'express-async-handler';
import { createLesson, deleteLesson, findLessonById, getAllLessons, saveLesson } from '../service/lession.service';
import { plainToInstance } from 'class-transformer';
import { LessonCreateDto, LessonUpdateDto } from '@src/entity/dto/lesson.dto';
import { LessonCreateDto, LessonUpdateDto } from 'src/entity/dto/lesson.dto';
import { validate } from 'class-validator';

// Get the list of lessons
Expand All @@ -16,7 +15,15 @@ export const lessonCreateGet = asyncHandler(async (req: Request, res: Response):
});

export const lessonCreatePost = asyncHandler(async (req: Request, res: Response): Promise<void> => {
const lessonData = plainToInstance(LessonCreateDto, req.body);
const lessonData = new LessonCreateDto()
lessonData.content = req.body.content
lessonData.description = req.body.description
lessonData.name = req.body.name
lessonData.progress = req.body.progress
lessonData.section_id = req.body.section_id
lessonData.time = req.body.time
lessonData.type = req.body.type

const errors = await validate(lessonData);

if (errors.length > 0) {
Expand Down Expand Up @@ -65,7 +72,14 @@ export const lessonUpdatePost = asyncHandler(async (req: Request, res: Response)
return res.status(404).render('error', { message: req.t('course.lesson_not_found') });
}

const lessonData = plainToInstance(LessonUpdateDto, req.body);
const lessonData = new LessonUpdateDto()
lessonData.content = req.body.content ? req.body.content : undefined
lessonData.description = req.body.description ? req.body.description : undefined
lessonData.name = req.body.name ? req.body.name : undefined
lessonData.progress = req.body.progress ? req.body.progress : undefined
lessonData.time = req.body.time ? req.body.time : undefined
lessonData.type = req.body.type ? req.body.type : undefined

const errors = await validate(lessonData);

if (errors.length > 0) {
Expand Down
4 changes: 2 additions & 2 deletions src/controller/payment.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import {
} from "../service/payment.service";
import { getCourseById } from "../service/course.service";
import { hasUserPurchasedCourse } from "../service/enrollment.service";
import { getItemByCourseId, removeFromCart } from "@src/service/cart.service";
import { ProcessPaymentDto, SubmitPaymentDto } from "@src/entity/dto/payment.dto";
import { getItemByCourseId, removeFromCart } from "src/service/cart.service";
import { ProcessPaymentDto, SubmitPaymentDto } from "src/entity/dto/payment.dto";
import { validateOrReject } from "class-validator";

export const processPayment = asyncHandler(
Expand Down
18 changes: 10 additions & 8 deletions src/controller/professor/professorCourse.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,12 @@ export const professorCreateCourse = async (req: Request, res: Response) => {
throw new Error(req.t('course.invalid_professor_id'));
}
const courseData = new CreateCourseDto();
courseData.average_rating = req.body.average_rating
courseData.category_id = req.body.category_id
courseData.average_rating = req.body.average_rating ? parseInt(req.body.average_rating) : 0
courseData.category_id = req.body.category_id ? parseInt(req.body.category_id) : 0
courseData.description = req.body.description
courseData.name = req.body.name
courseData.price = req.body.price
courseData.price = req.body.price ? parseInt(req.body.category_id) : 0
console.log(courseData)

await validateOrReject(courseData)

Expand All @@ -62,6 +63,7 @@ export const professorCreateCourse = async (req: Request, res: Response) => {
} catch (error) {
if (Array.isArray(error) && error[0].constraints) {
const validationErrors = error.map(err => Object.values(err.constraints)).flat();
console.log(validationErrors)
res.status(400).render('error', { message: req.t('course.update_error', { error: validationErrors.join(', ') }) });
} else {
res.status(400).render("error", { error: error.message });
Expand All @@ -84,11 +86,11 @@ export const professorUpdateCourse = async (req: Request, res: Response) => {
}

const courseData = new CreateCourseDto();
courseData.average_rating = req.body.average_rating
courseData.category_id = req.body.category_id
courseData.description = req.body.description
courseData.name = req.body.name
courseData.price = req.body.price
courseData.average_rating = req.body.average_rating ? parseInt(req.body.average_rating) : 0
courseData.category_id = req.body.category_id ? parseInt(req.body.category_id) : 0
courseData.description = req.body.description ? req.body.description : undefined
courseData.name = req.body.name ? req.body.name : undefined
courseData.price = req.body.price ? parseInt(req.body.price) : 0

await validateOrReject(courseData)

Expand Down
20 changes: 17 additions & 3 deletions src/controller/professor/professorLesson.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import asyncHandler from 'express-async-handler';
import { getLessonsBySectionIds, createLesson, updateLesson, deleteLesson } from 'src/service/lession.service';
import { getCoursesByUserId } from 'src/service/course.service';
import { getSectionsByCourseIds } from 'src/service/section.service';
import { LessonCreateDto } from 'src/entity/dto/lesson.dto';
import { plainToClass } from 'class-transformer';
import { LessonCreateDto, LessonUpdateDto } from 'src/entity/dto/lesson.dto';
import { validateOrReject } from 'class-validator';

export const professorLesonShowGet = asyncHandler(async (req: Request, res: Response) => {
Expand Down Expand Up @@ -41,7 +40,14 @@ export const professorLesonShowGet = asyncHandler(async (req: Request, res: Resp
});

export const professorCreateLesson = async (req: Request, res: Response) => {
const lessonData = plainToClass(LessonCreateDto, req.body)
const lessonData = new LessonCreateDto()
lessonData.content = req.body.content
lessonData.description = req.body.description
lessonData.name = req.body.name
lessonData.progress = req.body.progress ? parseInt(req.body.progress) : 0
lessonData.section_id = req.body.section_id ? parseInt(req.body.section_id) : 0
lessonData.time = req.body.time ? parseInt(req.body.time) : 0
lessonData.type = req.body.type
try {
await validateOrReject(lessonData);

Expand Down Expand Up @@ -89,6 +95,14 @@ export const professorUpdateLesson = async (req: Request, res: Response) => {
return;
}

const lessonData = new LessonUpdateDto()
lessonData.content = req.body.content ? req.body.content : undefined
lessonData.description = req.body.description ? req.body.description : undefined
lessonData.name = req.body.name ? req.body.name : undefined
lessonData.progress = req.body.progress ? parseInt(req.body.progress) : 0
lessonData.time = req.body.time ? parseInt(req.body.time) : 0
lessonData.type = req.body.type ? req.body.type : undefined

const updatedLesson = await updateLesson(lessonId, req.body);

if (!updatedLesson) {
Expand Down
13 changes: 9 additions & 4 deletions src/controller/professor/professorSection.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ export const professorCreateSection = async (req: Request, res: Response) => {

const sectionData = new CreateSectionDto();
sectionData.name = names[i];
sectionData.total_lesson = totalLessons[i];
sectionData.total_lesson = totalLessons[i] ? totalLessons[i] : undefined;
sectionData.course_id = courseId;
sectionData.total_time = totalTimes[i];
sectionData.total_time = totalTimes[i] ? totalTimes[i] : undefined;

const errors = await validate(sectionData);

Expand Down Expand Up @@ -61,8 +61,13 @@ export const professorUpdateSection = async (req: Request, res: Response) => {
return;
}

const sectionDto = plainToInstance(UpdateSectionDto, req.body);
const errors = await validate(sectionDto);
const sectionData = new UpdateSectionDto()
sectionData.id = sectionId
sectionData.name = req.body.name ? req.body.name : undefined
sectionData.total_lesson = req.body.total_lesson ? req.body.total_lesson : undefined
sectionData.total_time = req.body.total_time ? req.body.total_time : undefined

const errors = await validate(sectionData);

if (errors.length > 0) {
const messages = errors.map((err) => Object.values(err.constraints || {})).flat();
Expand Down
10 changes: 5 additions & 5 deletions src/controller/review.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ export const createReviewPost = asyncHandler(
}

const reviewDto = new CreateReviewDto();
reviewDto.user_id = user_id;
reviewDto.course_id = course_id;
reviewDto.rating = rating;
reviewDto.user_id = parseInt(user_id);
reviewDto.course_id = parseInt(course_id);
reviewDto.rating = parseInt(rating);

const commentDto = new CreateCommentDto();
commentDto.review_id = 0;
commentDto.user_id = user_id;
commentDto.parent_id = parent_id;
commentDto.user_id = parseInt(user_id);
commentDto.parent_id = parent_id ? parseInt(parent_id) : 0;
commentDto.comment = comment;

try {
Expand Down
Loading