feat: get likes count from course

This commit is contained in:
Sergey Yarkov 2021-08-13 23:54:09 +03:00
parent 8233d136f3
commit 1bfb7ad111
5 changed files with 45 additions and 3 deletions

View File

@ -198,6 +198,20 @@ export default class CoursesController extends BaseController {
return this.sendResponse(ctx, result.data, result.message, result.status);
}
/**
* Get likes count of course
* GET /courses/:id/likes
*/
public async showLikes(ctx: HttpContextContract) {
const result = await this.courseService.fetchCourseLikesCount(ctx.params.id);
if (!result.success && result.error) {
throw new Exception(result.message, result.status, result.error.code);
}
return this.sendResponse(ctx, result.data, result.message, result.status);
}
/**
* Set like on course by authorized user
* PUT /courses/:id/likes

View File

@ -1,6 +1,7 @@
/**
* Datatypes
*/
import Database from '@ioc:Adonis/Lucid/Database';
import CourseStatusEnum from 'App/Datatypes/Enums/CourseStatusEnum';
/**
@ -18,9 +19,12 @@ import CreateCourseValidator from 'App/Validators/Course/CreateCourseValidator';
import UpdateCourseValidator from 'App/Validators/Course/UpdateCourseValidator';
export default class CourseRepository {
private Database: typeof Database;
private Course: typeof Course;
constructor() {
this.Database = Database;
this.Course = Course;
}
@ -68,6 +72,17 @@ export default class CourseRepository {
return course;
}
/**
* Get likes count of course by id
*
* @param id Course id
* @returns Likes count
*/
public async getLikesCount(id: string | number): Promise<any> {
const likes = await this.Database.query().from('courses_likes').where('course_id', id).count('* as count');
return likes[0].count;
}
/**
* Get teacher of course
*

View File

@ -559,7 +559,6 @@ export default class CourseService {
public async setCourseStatus(id: string | number, status: CourseStatusEnum): Promise<IResponse> {
const data = await this.courseRepository.setStatus(id, status);
console.log(data);
if (!data) {
return {
@ -580,6 +579,17 @@ export default class CourseService {
data: {},
};
}
public async fetchCourseLikesCount(id: string | number): Promise<IResponse> {
const count = await this.courseRepository.getLikesCount(id);
return {
success: true,
status: StatusCodeEnum.OK,
message: 'Fetched course likes count.',
data: { count },
};
}
}
new Ioc().make(CourseService);

View File

@ -49,9 +49,8 @@ export const LessonFactory = Factory.define(Lesson, ({ faker }) => {
.build();
export const CategoryFactory = Factory.define(Category, ({ faker }) => {
const title = faker.lorem.word(6);
return {
title: `${title[0].toUpperCase()}${title.slice(1)}`,
title: `Category #${faker.datatype.number(200)}`,
description: faker.lorem.sentence(5),
};
}).build();

View File

@ -34,6 +34,10 @@ Route.group(() => {
.middleware('role:admin,teacher')
.as('courses.detach-student');
Route.get('/:id/likes', 'Api/v1/CoursesController.showLikes')
.middleware('role:admin,teacher,student')
.as('courses.show-likes');
Route.put('/:id/likes', 'Api/v1/CoursesController.setLike')
.middleware('role:admin,teacher,student')
.as('courses.set-like');