mirror of
https://github.com/sergeyyarkov/educt-server.git
synced 2026-10-11 10:19:20 +03:00
feat: students count for course
This commit is contained in:
parent
7e24c913a0
commit
d96a54351e
@ -181,6 +181,16 @@ export default class CoursesController extends BaseController {
|
||||
|
||||
return this.sendResponse(ctx, result.data, result.message, result.status);
|
||||
}
|
||||
|
||||
public async studentsCount(ctx: HttpContextContract) {
|
||||
const result = await this.courseService.fetchStudentsCount(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);
|
||||
}
|
||||
}
|
||||
|
||||
new Ioc().make(CoursesController);
|
||||
|
||||
@ -86,7 +86,7 @@ export default class CourseRepository {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get students of cours
|
||||
* Get students of course
|
||||
*
|
||||
* @param id Course id
|
||||
* @returns List of users or null
|
||||
@ -96,6 +96,18 @@ export default class CourseRepository {
|
||||
return course && course.students;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get count of students
|
||||
*
|
||||
* @param id Course if
|
||||
* @returns Students count
|
||||
*/
|
||||
public async getStudentsCount(id: string | number): Promise<{ count: any } | null> {
|
||||
const course = await this.Course.query().where('id', id).withCount('students').first();
|
||||
|
||||
return course && ({ count: course.$extras.students_count } ?? null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create course
|
||||
*
|
||||
|
||||
@ -196,6 +196,35 @@ export default class CourseService {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch students count by course id
|
||||
*
|
||||
* @param id Course id
|
||||
* @returns Response
|
||||
*/
|
||||
public async fetchStudentsCount(id: string | number): Promise<IResponse> {
|
||||
const data = await this.courseRepository.getStudentsCount(id);
|
||||
|
||||
if (!data) {
|
||||
return {
|
||||
success: false,
|
||||
status: StatusCodeEnum.NOT_FOUND,
|
||||
message: 'Course not found.',
|
||||
data: {},
|
||||
error: {
|
||||
code: 'E_NOT_FOUND',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
status: StatusCodeEnum.OK,
|
||||
message: 'Fetched students count.',
|
||||
data,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Create course
|
||||
*
|
||||
|
||||
@ -22,6 +22,10 @@ Route.group(() => {
|
||||
.middleware('role:admin,teacher,student')
|
||||
.as('courses.show-students');
|
||||
|
||||
Route.get('/:id/students/count', 'Api/v1/CoursesController.studentsCount')
|
||||
.middleware('role:admin,teacher,student')
|
||||
.as('courses.students-count');
|
||||
|
||||
Route.post('/:id/attach-student', 'Api/v1/CoursesController.attachStudent')
|
||||
.middleware('role:admin,teacher')
|
||||
.as('courses.attach-student');
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
import Route from '@ioc:Adonis/Core/Route';
|
||||
|
||||
Route.group(() => {
|
||||
Route.get('/', () => `Educt Backend API.`).as('index');
|
||||
Route.get('/', () => `Backend API.`).as('index');
|
||||
|
||||
/**
|
||||
*
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user