From 25a27d28d9e715afd98341720f1aaa7fff18d749 Mon Sep 17 00:00:00 2001 From: Igor Antonov Date: Mon, 20 May 2024 22:27:14 +0300 Subject: [PATCH] =?UTF-8?q?6.30.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20`login`=20=D0=B2=20`U?= =?UTF-8?q?serController`.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавим в контроллер `UserController` метод `login`. Он будет использоваться для авторизации пользователя в системе. Авторизацию мы реализуем позже, а пока опишем одну проверку (существует пользователь или нет) и вернём в качестве результата «Not implemented». При реализации нам потребуется DTO — `LoginUserDto`. Поэтому создадим новый класс для DTO по аналогии с ранее созданными. Для тестирования обработчика сразу добавим запрос в `user.http`. --- src/shared/modules/user/dto/login-user.dto.ts | 4 ++++ .../modules/user/login-user-request.type.ts | 6 +++++ src/shared/modules/user/user.controller.ts | 23 +++++++++++++++++++ src/shared/modules/user/user.http | 12 ++++++++++ 4 files changed, 45 insertions(+) create mode 100644 src/shared/modules/user/dto/login-user.dto.ts create mode 100644 src/shared/modules/user/login-user-request.type.ts diff --git a/src/shared/modules/user/dto/login-user.dto.ts b/src/shared/modules/user/dto/login-user.dto.ts new file mode 100644 index 0000000..338ed08 --- /dev/null +++ b/src/shared/modules/user/dto/login-user.dto.ts @@ -0,0 +1,4 @@ +export class LoginUserDto { + public email: string; + public password: string; +} diff --git a/src/shared/modules/user/login-user-request.type.ts b/src/shared/modules/user/login-user-request.type.ts new file mode 100644 index 0000000..bd76b18 --- /dev/null +++ b/src/shared/modules/user/login-user-request.type.ts @@ -0,0 +1,6 @@ +import { Request } from 'express'; + +import { RequestBody, RequestParams } from '../../libs/rest/index.js'; +import { LoginUserDto } from './dto/login-user.dto.js'; + +export type LoginUserRequest = Request; diff --git a/src/shared/modules/user/user.controller.ts b/src/shared/modules/user/user.controller.ts index 3a35797..f04acc6 100644 --- a/src/shared/modules/user/user.controller.ts +++ b/src/shared/modules/user/user.controller.ts @@ -10,6 +10,7 @@ import { UserService } from './user-service.interface.js'; import { Config, RestSchema } from '../../libs/config/index.js'; import { fillDTO } from '../../helpers/index.js'; import { UserRdo } from './rdo/user.rdo.js'; +import { LoginUserRequest } from './login-user-request.type.js'; @injectable() export class UserController extends BaseController { @@ -22,6 +23,7 @@ export class UserController extends BaseController { this.logger.info('Register routes for UserController…'); this.addRoute({ path: '/register', method: HttpMethod.Post, handler: this.create }); + this.addRoute({ path: '/login', method: HttpMethod.Post, handler: this.login }); } public async create( @@ -41,4 +43,25 @@ export class UserController extends BaseController { const result = await this.userService.create(body, this.configService.get('SALT')); this.created(res, fillDTO(UserRdo, result)); } + + public async login( + { body }: LoginUserRequest, + _res: Response, + ): Promise { + const existsUser = await this.userService.findByEmail(body.email); + + if (! existsUser) { + throw new HttpError( + StatusCodes.UNAUTHORIZED, + `User with email ${body.email} not found.`, + 'UserController', + ); + } + + throw new HttpError( + StatusCodes.NOT_IMPLEMENTED, + 'Not implemented', + 'UserController', + ); + } } diff --git a/src/shared/modules/user/user.http b/src/shared/modules/user/user.http index a79f683..0bbf4d6 100644 --- a/src/shared/modules/user/user.http +++ b/src/shared/modules/user/user.http @@ -13,3 +13,15 @@ Content-Type: application/json } ### + +## Авторизовать пользователя + +POST http://localhost:4000/users/login HTTP/1.1 +Content-Type: application/json + +{ + "email": "torans@overlook.net", + "password": "shining" +} + +###