From 1a86fda94b73dd674a9e9fe14a238a4f1f75a699 Mon Sep 17 00:00:00 2001 From: Sergey Yarkov Date: Tue, 12 Oct 2021 21:20:40 +0300 Subject: [PATCH] feat: fetch courses params --- app/Repositories/CourseRepository.ts | 22 +++++++++++++------ .../Course/CreateCourseValidator.ts | 2 ++ .../Course/FetchCoursesValidator.ts | 3 ++- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/app/Repositories/CourseRepository.ts b/app/Repositories/CourseRepository.ts index af37c93..3b9efed 100644 --- a/app/Repositories/CourseRepository.ts +++ b/app/Repositories/CourseRepository.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ /** * Datatypes */ @@ -46,15 +47,22 @@ export default class CourseRepository { * @returns List of courses */ public async getAll(params?: FetchCoursesValidator['schema']['props']): Promise { - const { status = CourseStatusEnum.PUBLISHED } = params || {}; + const { status = CourseStatusEnum.PUBLISHED, category_id } = params || {}; - const courses = await this.Course.query() - .preload('teacher') + const query = this.Course.query(); + + query.where('status', status); + + if (category_id) { + query.andWhereHas('category', q => q.where('id', category_id)); + } + + const courses = await query .preload('category') - .preload('lessons') - .preload('students') .preload('image') - .where('status', status); + .withCount('students') + .withCount('likes') + .withCount('lessons'); return courses; } @@ -183,7 +191,7 @@ export default class CourseRepository { bg_image_id: data.bg_image_id, title: data.title, description: data.description, - status: CourseStatusEnum.DRAFT, // make course DRAFT before adding lessons + status: data.status, teacher_id: data.teacher_id, category_id: data.category_id, }); diff --git a/app/Validators/Course/CreateCourseValidator.ts b/app/Validators/Course/CreateCourseValidator.ts index 6c7c14c..f90cc56 100644 --- a/app/Validators/Course/CreateCourseValidator.ts +++ b/app/Validators/Course/CreateCourseValidator.ts @@ -1,5 +1,6 @@ import { schema, rules } from '@ioc:Adonis/Core/Validator'; import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'; +import CourseStatusEnum from 'App/Datatypes/Enums/CourseStatusEnum'; export default class CreateCourseValidator { constructor(protected ctx: HttpContextContract) {} @@ -10,6 +11,7 @@ export default class CreateCourseValidator { bg_image_id: schema.number.optional([rules.exists({ table: 'images', column: 'id' })]), teacher_id: schema.string({}, [rules.exists({ table: 'users', column: 'id' })]), category_id: schema.string({}, [rules.exists({ table: 'categories', column: 'id' })]), + status: schema.enum(Object.values(CourseStatusEnum)), }); public messages = {}; diff --git a/app/Validators/Course/FetchCoursesValidator.ts b/app/Validators/Course/FetchCoursesValidator.ts index 046c052..aa12618 100644 --- a/app/Validators/Course/FetchCoursesValidator.ts +++ b/app/Validators/Course/FetchCoursesValidator.ts @@ -1,4 +1,4 @@ -import { schema } from '@ioc:Adonis/Core/Validator'; +import { schema, rules } from '@ioc:Adonis/Core/Validator'; import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'; import CourseStatusEnum from 'App/Datatypes/Enums/CourseStatusEnum'; @@ -7,6 +7,7 @@ export default class FetchCoursesValidator { public schema = schema.create({ status: schema.enum.optional(Object.values(CourseStatusEnum)), + category_id: schema.string.optional({}, [rules.exists({ table: 'categories', column: 'id' })]), }); public messages = {};