File size: 2,257 Bytes
22f0230
a6fbb8d
1628025
433085e
260547f
433085e
f39e411
36d3d2c
a6fbb8d
02fcdf7
1628025
22f0230
 
ac9dbd5
 
1628025
433085e
f39e411
 
 
 
 
 
1628025
 
a6fbb8d
22f0230
1628025
22f0230
1628025
 
 
 
 
 
 
 
a6fbb8d
22f0230
a6fbb8d
22f0230
1628025
 
 
 
 
 
 
22f0230
1628025
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a6fbb8d
22f0230
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
68
69
70
71
72
73
74
import { UsersService } from "../services/users.service";
import { jwtHelper } from "../../../../helpers/jwt.helper";
import { BaseController } from "../../../../lib/controllers/controller.base";
import { bodyValidator } from "../../../../helpers/validation.helper";
import { userRegisterValidation } from "../../../common/users/validation/user-register.validation";
import { loginValidation } from "../validation/user.Validation";
import { asyncHandler } from "../../../../helpers/async-handler";
import { Prefix } from "../../../../lib/decorators/prefix.decorator";

@Prefix("/user/auth")
export class AuthController extends BaseController {
  private usersService = new UsersService();

  setRoutes(): void {
    this.router.post(
      "/register",
      bodyValidator(userRegisterValidation),
      asyncHandler(this.register)
    );
    this.router.post(
      "/login",
      bodyValidator(loginValidation),
      asyncHandler(this.login)
    );
  }

  register = async (req, res) => {
    try {
      let result = await this.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,
      });
    }
  };

  login = async (req, res) => {
    try {
      const { email, password } = req.body;
      let result: {
        success: boolean;
        code: number;
        record?: any;
        message?: string;
      } = await this.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,
      });
    }
  };
}