From 0410d94ff9d96a6e320bec8513c16920222e9b11 Mon Sep 17 00:00:00 2001
From: Nabilsenko <96882497+Nabilsenko@users.noreply.github.com>
Date: Tue, 13 Dec 2022 14:06:00 +0100
Subject: [PATCH] feat: added login to people

---
 src/config/index.ts             |  2 +-
 src/people/dao/people.dao.ts    |  9 +++++++++
 src/people/people.controller.ts | 10 ++++++++++
 src/people/people.service.ts    |  3 +++
 4 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/src/config/index.ts b/src/config/index.ts
index 3bf48c8..59e24a6 100644
--- a/src/config/index.ts
+++ b/src/config/index.ts
@@ -1,4 +1,4 @@
-import * as _config from './config.json';
+import * as _config from './config.template.json';
 import { IConfig } from './config.model';
 
 const config = _config as IConfig;
diff --git a/src/people/dao/people.dao.ts b/src/people/dao/people.dao.ts
index 39dc137..61f707a 100644
--- a/src/people/dao/people.dao.ts
+++ b/src/people/dao/people.dao.ts
@@ -17,6 +17,15 @@ export class PeopleDao {
     private readonly _peopleModel: Model<People>,
   ) {}
 
+  login = (email: string, password: string): Promise<People | void> =>
+    new Promise((resolve, reject) => {
+      this._peopleModel.findOne({email : email, passwordHash : password}, (err, value) => {
+        if (err) reject(err.message);
+        if (!value) reject(new NotFoundException('Email or password is incorrect!'));
+        resolve(value);
+      });
+    });
+
   find = (): Promise<People[]> =>
     new Promise((resolve, reject) => {
       this._peopleModel.find({}, {}, {}, (err, value) => {
diff --git a/src/people/people.controller.ts b/src/people/people.controller.ts
index 8d40c28..4b382b4 100644
--- a/src/people/people.controller.ts
+++ b/src/people/people.controller.ts
@@ -16,11 +16,21 @@ import { HttpInterceptor } from '../interceptors/http.interceptor';
 import { PeopleEntity } from './entities/people.entity';
 import { PeopleService } from './people.service';
 
+ interface Login {
+  email: string;
+  password: string;
+}
+
 @Controller('people')
 @UseInterceptors(HttpInterceptor)
 export class PeopleController {
   constructor(private readonly _peopleService: PeopleService) {}
 
+  @Post('/login')
+  login(@Body() login: Login): Promise<PeopleEntity | void> {
+    return this._peopleService.login(login.email, login.password);
+  }
+  
   @Get()
   findAll(): Promise<PeopleEntity[] | void> {
     return this._peopleService.findAll();
diff --git a/src/people/people.service.ts b/src/people/people.service.ts
index e97344a..5ea05b6 100644
--- a/src/people/people.service.ts
+++ b/src/people/people.service.ts
@@ -8,6 +8,9 @@ import { PeopleEntity } from './entities/people.entity';
 export class PeopleService {
   constructor(private readonly _peopleDao: PeopleDao) {}
 
+  login = (email: string, password: string): Promise<PeopleEntity | void> =>
+    this._peopleDao.login(email, password);
+
   findAll = (): Promise<PeopleEntity[] | void> => this._peopleDao.find();
 
   findOne = (id: string): Promise<PeopleEntity | void> =>
-- 
GitLab