From 30fb10b3380eb9c9e684122998e2947717b69e1f Mon Sep 17 00:00:00 2001 From: Sergey Yarkov Date: Thu, 9 Jun 2022 19:02:35 +0300 Subject: [PATCH] feat: added new users to seeder --- app/Services/CourseService.ts | 36 ++++++++++++++++++++++++++++++++--- app/Services/UserService.ts | 4 ++-- database/seeders/User.ts | 31 +++++++++++++++++++++++++++--- 3 files changed, 63 insertions(+), 8 deletions(-) diff --git a/app/Services/CourseService.ts b/app/Services/CourseService.ts index 35b0efa..03fc59b 100644 --- a/app/Services/CourseService.ts +++ b/app/Services/CourseService.ts @@ -345,7 +345,7 @@ export default class CourseService { * @returns Response */ public async updateCourse(id: string | number, data: UpdateCourseValidator['schema']['props']): Promise { - const course = await this.courseRepository.update(id, data); + const course = await this.courseRepository.getById(id); if (!course) { return { @@ -359,9 +359,39 @@ export default class CourseService { }; } - // if (data.teacher_id) { + if (data.teacher_id) { + const teacher = await this.userRepository.getById(data.teacher_id); - // } + if (!teacher) { + return { + success: false, + status: HttpStatusEnum.NOT_FOUND, + message: 'Teacher not found.', + data: {}, + error: { + code: 'E_NOT_FOUND', + }, + }; + } + + await teacher.load('roles'); + + const isTeacher = RoleHelper.userContainRoles(teacher.roles, [RoleEnum.TEACHER]); + + if (!isTeacher) { + return { + success: false, + status: HttpStatusEnum.BAD_REQUEST, + message: 'Author is not a teacher.', + data: {}, + error: { + code: 'E_BAD_REQUEST', + }, + }; + } + } + + await this.courseRepository.update(id, data); return { success: true, diff --git a/app/Services/UserService.ts b/app/Services/UserService.ts index 432a828..fb9641e 100644 --- a/app/Services/UserService.ts +++ b/app/Services/UserService.ts @@ -169,7 +169,7 @@ export default class UserService { } await ctx.bouncer.with('RolePolicy').authorize('manage', user.roles.map(r => r.slug) as [RoleEnum]); - await this.userRepository.update(id, data); + const updated = await this.userRepository.update(id, data); /** * Update user role @@ -187,7 +187,7 @@ export default class UserService { success: true, status: HttpStatusEnum.OK, message: 'User updated.', - data: user, + data: updated || {}, }; } diff --git a/database/seeders/User.ts b/database/seeders/User.ts index 07d19d2..21fec2b 100644 --- a/database/seeders/User.ts +++ b/database/seeders/User.ts @@ -11,23 +11,48 @@ export default class UserSeeder extends BaseSeeder { */ const roles = { admin: await Role.findByOrFail('slug', 'admin'), + teacher: await Role.findByOrFail('slug', 'teacher'), student: await Role.findByOrFail('slug', 'student'), }; /** * Administrator */ - const userAdmin = await User.create({ + const administrator = await User.create({ first_name: 'John', last_name: 'Doe', login: 'admin', password: '123456', email: 'administrator@example.com', }); - await userAdmin.related('roles').attach([roles.admin.id]); + await administrator.related('roles').attach([roles.admin.id]); /** - * Students + * Teacher + */ + const teacher = await User.create({ + first_name: 'Hanna', + last_name: 'Liv', + login: 'teacher', + password: '123456', + email: 'teacher@example.com', + }); + await teacher.related('roles').attach([roles.teacher.id]); + + /** + * Student + */ + const student = await User.create({ + first_name: 'Ylfa', + last_name: 'Erna', + login: 'student', + password: '123456', + email: 'student@example.com', + }); + await student.related('roles').attach([roles.student.id]); + + /** + * Student list */ await StudentFactory.with('contacts').createMany(20); }