mirror of
https://github.com/sergeyyarkov/educt-server.git
synced 2026-10-11 10:19:20 +03:00
feat: updating user role
This commit is contained in:
parent
ae6798ce62
commit
00c2db0697
@ -4,6 +4,7 @@ import Hash from '@ioc:Adonis/Core/Hash';
|
|||||||
* Models
|
* Models
|
||||||
*/
|
*/
|
||||||
import User from 'App/Models/User';
|
import User from 'App/Models/User';
|
||||||
|
import Role from 'App/Models/Role';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validators
|
* Validators
|
||||||
@ -14,8 +15,11 @@ import UpdateUserValidator from 'App/Validators/User/UpdateUserValidator';
|
|||||||
export default class UserRepository {
|
export default class UserRepository {
|
||||||
private User: typeof User;
|
private User: typeof User;
|
||||||
|
|
||||||
|
private Role: typeof Role;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.User = User;
|
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> {
|
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 user = await this.User.query().preload('contacts').preload('roles').where('id', id).first();
|
||||||
|
const { role: roleSlug, ...updatedFields } = data;
|
||||||
|
|
||||||
if (user) {
|
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;
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,6 @@ import RoleHelper from 'App/Helpers/RoleHelper';
|
|||||||
import CourseRepository from 'App/Repositories/CourseRepository';
|
import CourseRepository from 'App/Repositories/CourseRepository';
|
||||||
import UserRepository from 'App/Repositories/UserRepository';
|
import UserRepository from 'App/Repositories/UserRepository';
|
||||||
import CategoryRepository from 'App/Repositories/CategoryRepository';
|
import CategoryRepository from 'App/Repositories/CategoryRepository';
|
||||||
import ImageRepository from 'App/Repositories/ImageRepository';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validators
|
* Validators
|
||||||
@ -33,18 +32,14 @@ export default class CourseService {
|
|||||||
|
|
||||||
private categoryRepository: CategoryRepository;
|
private categoryRepository: CategoryRepository;
|
||||||
|
|
||||||
private imageRepository: ImageRepository;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
courseRepository: CourseRepository,
|
courseRepository: CourseRepository,
|
||||||
userRepository: UserRepository,
|
userRepository: UserRepository,
|
||||||
categoryRepository: CategoryRepository,
|
categoryRepository: CategoryRepository
|
||||||
imageRepository: ImageRepository
|
|
||||||
) {
|
) {
|
||||||
this.courseRepository = courseRepository;
|
this.courseRepository = courseRepository;
|
||||||
this.userRepository = userRepository;
|
this.userRepository = userRepository;
|
||||||
this.categoryRepository = categoryRepository;
|
this.categoryRepository = categoryRepository;
|
||||||
this.imageRepository = imageRepository;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import { schema, rules } from '@ioc:Adonis/Core/Validator';
|
import { schema, rules } from '@ioc:Adonis/Core/Validator';
|
||||||
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext';
|
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext';
|
||||||
|
import RoleEnum from 'App/Datatypes/Enums/RoleEnum';
|
||||||
|
|
||||||
export default class UpdateUserValidator {
|
export default class UpdateUserValidator {
|
||||||
constructor(protected ctx: HttpContextContract) {}
|
constructor(protected ctx: HttpContextContract) {}
|
||||||
@ -10,9 +11,11 @@ export default class UpdateUserValidator {
|
|||||||
login: schema.string.optional({}, [rules.unique({ table: 'users', column: 'login' })]),
|
login: schema.string.optional({}, [rules.unique({ table: 'users', column: 'login' })]),
|
||||||
email: schema.string.optional({}, [rules.email(), rules.unique({ table: 'users', column: 'email' })]),
|
email: schema.string.optional({}, [rules.email(), rules.unique({ table: 'users', column: 'email' })]),
|
||||||
password: schema.string.optional(),
|
password: schema.string.optional(),
|
||||||
|
role: schema.enum.optional(Object.values(RoleEnum)),
|
||||||
});
|
});
|
||||||
|
|
||||||
public messages = {
|
public messages = {
|
||||||
'email.unique': 'Email is not available.',
|
'login.unique': '"Login" filed is already in use.',
|
||||||
|
'email.unique': '"Email" field is already in use.',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user