refactor: update user http request type & validator

This commit is contained in:
Sergey Yarkov 2021-09-25 21:52:33 +03:00
parent 4c406ed4a4
commit cded256d0f
4 changed files with 14 additions and 10 deletions

View File

@ -1,5 +1,3 @@
/* eslint-disable @typescript-eslint/naming-convention */
import Hash from '@ioc:Adonis/Core/Hash'; import Hash from '@ioc:Adonis/Core/Hash';
/** /**
@ -64,6 +62,7 @@ export default class UserRepository {
* @returns Array of users * @returns Array of users
*/ */
public async getAll(params?: any) { public async getAll(params?: any) {
// eslint-disable-next-line @typescript-eslint/naming-convention
const { search, email, login, first_name, last_name, role, page = 1, limit = 10 }: any = params || {}; const { search, email, login, first_name, last_name, role, page = 1, limit = 10 }: any = params || {};
const query = this.User.query(); const query = this.User.query();
@ -109,8 +108,8 @@ export default class UserRepository {
*/ */
public async create(data: CreateUserValidator['schema']['props']): Promise<User> { public async create(data: CreateUserValidator['schema']['props']): Promise<User> {
const user = await this.User.create({ const user = await this.User.create({
first_name: data.first_name, first_name: data.first_name.charAt(0).toUpperCase() + data.first_name.substr(1),
last_name: data.last_name, last_name: data.last_name.charAt(0).toUpperCase() + data.last_name.substr(1),
login: data.login, login: data.login,
email: data.email, email: data.email,
password: data.password, password: data.password,

View File

@ -44,5 +44,8 @@ export default class CreateUserValidator {
* } * }
* *
*/ */
public messages = {}; public messages = {
'login.unique': '"Login" filed is already in use.',
'email.unique': '"Email" field is already in use.',
};
} }

View File

@ -5,12 +5,14 @@ export default class UpdateUserValidator {
constructor(protected ctx: HttpContextContract) {} constructor(protected ctx: HttpContextContract) {}
public schema = schema.create({ public schema = schema.create({
first_name: schema.string(), first_name: schema.string.optional(),
last_name: schema.string(), last_name: schema.string.optional(),
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(), password: schema.string.optional(),
}); });
public messages = {}; public messages = {
'email.unique': 'Email is not available.',
};
} }

View File

@ -4,7 +4,7 @@ Route.group(() => {
Route.get('/', 'Api/v1/UsersController.list').middleware('role:admin,teacher,student').as('users.list'); Route.get('/', 'Api/v1/UsersController.list').middleware('role:admin,teacher,student').as('users.list');
Route.post('/', 'Api/v1/UsersController.create').middleware('role:admin,teacher').as('users.create'); Route.post('/', 'Api/v1/UsersController.create').middleware('role:admin,teacher').as('users.create');
Route.get('/:id', 'Api/v1/UsersController.show').middleware('role:admin,teacher,student').as('users.show'); Route.get('/:id', 'Api/v1/UsersController.show').middleware('role:admin,teacher,student').as('users.show');
Route.put('/:id', 'Api/v1/UsersController.update').middleware('role:admin').as('users.update'); Route.patch('/:id', 'Api/v1/UsersController.update').middleware('role:admin,teacher').as('users.update');
Route.delete('/:id', 'Api/v1/UsersController.delete').middleware('role:admin,teacher').as('users.delete'); Route.delete('/:id', 'Api/v1/UsersController.delete').middleware('role:admin,teacher').as('users.delete');
Route.post('/:id/attach-roles', 'Api/v1/UsersController.attachRoles') Route.post('/:id/attach-roles', 'Api/v1/UsersController.attachRoles')
.middleware('role:admin,teacher') .middleware('role:admin,teacher')