feat: updating user role

This commit is contained in:
Sergey Yarkov 2021-11-05 22:35:52 +03:00
parent ae6798ce62
commit 00c2db0697
3 changed files with 33 additions and 8 deletions

View File

@ -4,6 +4,7 @@ import Hash from '@ioc:Adonis/Core/Hash';
* Models
*/
import User from 'App/Models/User';
import Role from 'App/Models/Role';
/**
* Validators
@ -14,8 +15,11 @@ import UpdateUserValidator from 'App/Validators/User/UpdateUserValidator';
export default class UserRepository {
private User: typeof User;
private Role: typeof Role;
constructor() {
this.User = User;
this.Role = Role;
}
/**
@ -130,9 +134,32 @@ export default class UserRepository {
*/
public async update(id: number | string, data: UpdateUserValidator['schema']['props']): Promise<User | null> {
const user = await this.User.query().preload('contacts').preload('roles').where('id', id).first();
const { role: roleSlug, ...updatedFields } = data;
if (user) {
await user.merge(data).save();
/**
* Update fields
*/
user.merge(updatedFields);
/**
* Attach new single role
*/
if (roleSlug) {
const role = await this.Role.query().where('slug', roleSlug).first();
if (role) {
await user.related('roles').detach();
await user.related('roles').attach([role.id]);
await user.load('roles');
}
}
/**
* Save updated user in database
*/
await user.save();
return user;
}

View File

@ -16,7 +16,6 @@ import RoleHelper from 'App/Helpers/RoleHelper';
import CourseRepository from 'App/Repositories/CourseRepository';
import UserRepository from 'App/Repositories/UserRepository';
import CategoryRepository from 'App/Repositories/CategoryRepository';
import ImageRepository from 'App/Repositories/ImageRepository';
/**
* Validators
@ -33,18 +32,14 @@ export default class CourseService {
private categoryRepository: CategoryRepository;
private imageRepository: ImageRepository;
constructor(
courseRepository: CourseRepository,
userRepository: UserRepository,
categoryRepository: CategoryRepository,
imageRepository: ImageRepository
categoryRepository: CategoryRepository
) {
this.courseRepository = courseRepository;
this.userRepository = userRepository;
this.categoryRepository = categoryRepository;
this.imageRepository = imageRepository;
}
/**

View File

@ -1,5 +1,6 @@
import { schema, rules } from '@ioc:Adonis/Core/Validator';
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext';
import RoleEnum from 'App/Datatypes/Enums/RoleEnum';
export default class UpdateUserValidator {
constructor(protected ctx: HttpContextContract) {}
@ -10,9 +11,11 @@ export default class UpdateUserValidator {
login: schema.string.optional({}, [rules.unique({ table: 'users', column: 'login' })]),
email: schema.string.optional({}, [rules.email(), rules.unique({ table: 'users', column: 'email' })]),
password: schema.string.optional(),
role: schema.enum.optional(Object.values(RoleEnum)),
});
public messages = {
'email.unique': 'Email is not available.',
'login.unique': '"Login" filed is already in use.',
'email.unique': '"Email" field is already in use.',
};
}