mirror of
https://github.com/sergeyyarkov/educt-server.git
synced 2026-10-11 10:19:20 +03:00
feat: get likes count from course
This commit is contained in:
parent
8233d136f3
commit
1bfb7ad111
@ -198,6 +198,20 @@ export default class CoursesController extends BaseController {
|
|||||||
return this.sendResponse(ctx, result.data, result.message, result.status);
|
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
|
* Set like on course by authorized user
|
||||||
* PUT /courses/:id/likes
|
* PUT /courses/:id/likes
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* Datatypes
|
* Datatypes
|
||||||
*/
|
*/
|
||||||
|
import Database from '@ioc:Adonis/Lucid/Database';
|
||||||
import CourseStatusEnum from 'App/Datatypes/Enums/CourseStatusEnum';
|
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';
|
import UpdateCourseValidator from 'App/Validators/Course/UpdateCourseValidator';
|
||||||
|
|
||||||
export default class CourseRepository {
|
export default class CourseRepository {
|
||||||
|
private Database: typeof Database;
|
||||||
|
|
||||||
private Course: typeof Course;
|
private Course: typeof Course;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
this.Database = Database;
|
||||||
this.Course = Course;
|
this.Course = Course;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,6 +72,17 @@ export default class CourseRepository {
|
|||||||
return course;
|
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
|
* Get teacher of course
|
||||||
*
|
*
|
||||||
|
|||||||
@ -559,7 +559,6 @@ export default class CourseService {
|
|||||||
|
|
||||||
public async setCourseStatus(id: string | number, status: CourseStatusEnum): Promise<IResponse> {
|
public async setCourseStatus(id: string | number, status: CourseStatusEnum): Promise<IResponse> {
|
||||||
const data = await this.courseRepository.setStatus(id, status);
|
const data = await this.courseRepository.setStatus(id, status);
|
||||||
console.log(data);
|
|
||||||
|
|
||||||
if (!data) {
|
if (!data) {
|
||||||
return {
|
return {
|
||||||
@ -580,6 +579,17 @@ export default class CourseService {
|
|||||||
data: {},
|
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);
|
new Ioc().make(CourseService);
|
||||||
|
|||||||
@ -49,9 +49,8 @@ export const LessonFactory = Factory.define(Lesson, ({ faker }) => {
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
export const CategoryFactory = Factory.define(Category, ({ faker }) => {
|
export const CategoryFactory = Factory.define(Category, ({ faker }) => {
|
||||||
const title = faker.lorem.word(6);
|
|
||||||
return {
|
return {
|
||||||
title: `${title[0].toUpperCase()}${title.slice(1)}`,
|
title: `Category #${faker.datatype.number(200)}`,
|
||||||
description: faker.lorem.sentence(5),
|
description: faker.lorem.sentence(5),
|
||||||
};
|
};
|
||||||
}).build();
|
}).build();
|
||||||
|
|||||||
@ -34,6 +34,10 @@ Route.group(() => {
|
|||||||
.middleware('role:admin,teacher')
|
.middleware('role:admin,teacher')
|
||||||
.as('courses.detach-student');
|
.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')
|
Route.put('/:id/likes', 'Api/v1/CoursesController.setLike')
|
||||||
.middleware('role:admin,teacher,student')
|
.middleware('role:admin,teacher,student')
|
||||||
.as('courses.set-like');
|
.as('courses.set-like');
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user