From cded256d0f1702de8d161dffb48e1391a9e1db24 Mon Sep 17 00:00:00 2001 From: Sergey Yarkov Date: Sat, 25 Sep 2021 21:52:33 +0300 Subject: [PATCH] refactor: update user http request type & validator --- app/Repositories/UserRepository.ts | 7 +++---- app/Validators/User/CreateUserValidator.ts | 5 ++++- app/Validators/User/UpdateUserValidator.ts | 10 ++++++---- routes/apis/v1/users.ts | 2 +- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/app/Repositories/UserRepository.ts b/app/Repositories/UserRepository.ts index 8cadd04..52ee451 100644 --- a/app/Repositories/UserRepository.ts +++ b/app/Repositories/UserRepository.ts @@ -1,5 +1,3 @@ -/* eslint-disable @typescript-eslint/naming-convention */ - import Hash from '@ioc:Adonis/Core/Hash'; /** @@ -64,6 +62,7 @@ export default class UserRepository { * @returns Array of users */ 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 query = this.User.query(); @@ -109,8 +108,8 @@ export default class UserRepository { */ public async create(data: CreateUserValidator['schema']['props']): Promise { const user = await this.User.create({ - first_name: data.first_name, - last_name: data.last_name, + first_name: data.first_name.charAt(0).toUpperCase() + data.first_name.substr(1), + last_name: data.last_name.charAt(0).toUpperCase() + data.last_name.substr(1), login: data.login, email: data.email, password: data.password, diff --git a/app/Validators/User/CreateUserValidator.ts b/app/Validators/User/CreateUserValidator.ts index 3b7c1dc..b859057 100644 --- a/app/Validators/User/CreateUserValidator.ts +++ b/app/Validators/User/CreateUserValidator.ts @@ -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.', + }; } diff --git a/app/Validators/User/UpdateUserValidator.ts b/app/Validators/User/UpdateUserValidator.ts index 9e18ab9..38e8df7 100644 --- a/app/Validators/User/UpdateUserValidator.ts +++ b/app/Validators/User/UpdateUserValidator.ts @@ -5,12 +5,14 @@ export default class UpdateUserValidator { constructor(protected ctx: HttpContextContract) {} public schema = schema.create({ - first_name: schema.string(), - last_name: schema.string(), + first_name: schema.string.optional(), + last_name: schema.string.optional(), 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(), + password: schema.string.optional(), }); - public messages = {}; + public messages = { + 'email.unique': 'Email is not available.', + }; } diff --git a/routes/apis/v1/users.ts b/routes/apis/v1/users.ts index 263e623..41b392e 100644 --- a/routes/apis/v1/users.ts +++ b/routes/apis/v1/users.ts @@ -4,7 +4,7 @@ Route.group(() => { 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.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.post('/:id/attach-roles', 'Api/v1/UsersController.attachRoles') .middleware('role:admin,teacher')