feat: fetch courses params

This commit is contained in:
Sergey Yarkov 2021-10-12 21:20:40 +03:00
parent c2b43d7ba2
commit 1a86fda94b
3 changed files with 19 additions and 8 deletions

View File

@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/naming-convention */
/** /**
* Datatypes * Datatypes
*/ */
@ -46,15 +47,22 @@ export default class CourseRepository {
* @returns List of courses * @returns List of courses
*/ */
public async getAll(params?: FetchCoursesValidator['schema']['props']): Promise<Course[]> { public async getAll(params?: FetchCoursesValidator['schema']['props']): Promise<Course[]> {
const { status = CourseStatusEnum.PUBLISHED } = params || {}; const { status = CourseStatusEnum.PUBLISHED, category_id } = params || {};
const courses = await this.Course.query() const query = this.Course.query();
.preload('teacher')
query.where('status', status);
if (category_id) {
query.andWhereHas('category', q => q.where('id', category_id));
}
const courses = await query
.preload('category') .preload('category')
.preload('lessons')
.preload('students')
.preload('image') .preload('image')
.where('status', status); .withCount('students')
.withCount('likes')
.withCount('lessons');
return courses; return courses;
} }
@ -183,7 +191,7 @@ export default class CourseRepository {
bg_image_id: data.bg_image_id, bg_image_id: data.bg_image_id,
title: data.title, title: data.title,
description: data.description, description: data.description,
status: CourseStatusEnum.DRAFT, // make course DRAFT before adding lessons status: data.status,
teacher_id: data.teacher_id, teacher_id: data.teacher_id,
category_id: data.category_id, category_id: data.category_id,
}); });

View File

@ -1,5 +1,6 @@
import { schema, rules } from '@ioc:Adonis/Core/Validator'; import { schema, rules } from '@ioc:Adonis/Core/Validator';
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'; import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext';
import CourseStatusEnum from 'App/Datatypes/Enums/CourseStatusEnum';
export default class CreateCourseValidator { export default class CreateCourseValidator {
constructor(protected ctx: HttpContextContract) {} constructor(protected ctx: HttpContextContract) {}
@ -10,6 +11,7 @@ export default class CreateCourseValidator {
bg_image_id: schema.number.optional([rules.exists({ table: 'images', column: 'id' })]), bg_image_id: schema.number.optional([rules.exists({ table: 'images', column: 'id' })]),
teacher_id: schema.string({}, [rules.exists({ table: 'users', column: 'id' })]), teacher_id: schema.string({}, [rules.exists({ table: 'users', column: 'id' })]),
category_id: schema.string({}, [rules.exists({ table: 'categories', column: 'id' })]), category_id: schema.string({}, [rules.exists({ table: 'categories', column: 'id' })]),
status: schema.enum(Object.values(CourseStatusEnum)),
}); });
public messages = {}; public messages = {};

View File

@ -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 { HttpContextContract } from '@ioc:Adonis/Core/HttpContext';
import CourseStatusEnum from 'App/Datatypes/Enums/CourseStatusEnum'; import CourseStatusEnum from 'App/Datatypes/Enums/CourseStatusEnum';
@ -7,6 +7,7 @@ export default class FetchCoursesValidator {
public schema = schema.create({ public schema = schema.create({
status: schema.enum.optional(Object.values(CourseStatusEnum)), status: schema.enum.optional(Object.values(CourseStatusEnum)),
category_id: schema.string.optional({}, [rules.exists({ table: 'categories', column: 'id' })]),
}); });
public messages = {}; public messages = {};