File size: 2,064 Bytes
2003362
a6fbb8d
1628025
 
433085e
 
 
a6fbb8d
02fcdf7
1628025
ac9dbd5
 
1628025
433085e
ac9dbd5
1628025
ac9dbd5
1628025
a6fbb8d
ac9dbd5
1628025
 
 
 
 
 
 
 
 
 
a6fbb8d
1628025
a6fbb8d
ac9dbd5
1628025
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a6fbb8d
1628025
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import { usersService } from "../services/users.service";
import { jwtHelper } from "../../../../helpers/jwt.helper";
import { BaseController } from "../../../../lib/controllers/controller.base";
import { Prefix } from "../../../common/decorators/prefix.decorator";
import { bodyValidator } from "../../../../helpers/validation.helper";
import { userRegisterValidation } from "../../../common/users/validation/user.baseValidation";
import { loginValidation } from "../validation/user.Validation";

@Prefix("/user/auth")
export class AuthController extends BaseController {
  setRoutes(): void {
    this.router.post(
      "/register",
      bodyValidator(userRegisterValidation),
      this.register
    );
    this.router.post("/login", bodyValidator(loginValidation), this.login);
  }

  async register(req, res) {
    try {
      let result = await usersService.create(req.body);
      return res.status(result.code).json(result);
    } catch (err) {
      console.log(`err.message`, err.message);
      return res.status(500).json({
        success: false,
        code: 500,
        error: err.message,
      });
    }
  }

  async login(req, res) {
    try {
      const { email, password } = req.body;
      let result: {
        success: boolean;
        code: number;
        record?: any;
        message?: string;
      } = await usersService.comparePassword(email, password);
      if (!result.success) return res.status(result.code).json(result);
      let payload = {
        _id: result.record?._id,
        name: result.record?.name,
        email: result.record?.email,
        number: result.record?.number,
        role: result.record?.role,
      };
      const token = jwtHelper.generateToken(payload);
      return res.status(result.code).json({
        success: result.success,
        token,
        code: result.code,
        record: result.record,
      });
    } catch (err) {
      console.log(`err.message`, err.message);
      return res.status(500).json({
        success: false,
        message: err.message,
      });
    }
  }
}