eletrotupi / tcc/ api/src/controllers/users.ts85d0e3103a3d31cb1f0649b97146ef256c944fdf
1.9 KB | 80 lines Raw
1
import { Request, Response, NextFunction } from 'express';
2
import {
3
  createUser,
4
  findUserById,
5
  findUserByEmail,
6
  updateUser,
7
  generateToken
8
} from '@app/models/user';
9

10
import {
11
  validateRequiredFields
12
} from '@app/utils/validators'
13

14
export const UsersController = {
15
  create: async (req: Request, res: Response, next: NextFunction) => {
16
    try {
17
      const { email, password, firstName, lastName } = req.body;
18

19
      // Validate required fields
20
      const requiredValidation = validateRequiredFields(req.body, [
21
        'email', 'password', 'firstName'
22
      ]);
23

24
      if (!requiredValidation.valid) {
25
        return res.status(400).json({
26
          error: "Campos faltantes",
27
          missing: requiredValidation.missing
28
        });
29
      }
30

31
      const user = await createUser(
32
        email, firstName, lastName, password
33
      );
34

35
      const jwtToken = generateToken(user.id, user.email);
36

37
      res.status(201).json({ token: jwtToken });
38
    } catch (err) {
39
      next(err);
40
    }
41
  },
42

43
  update: async (req: Request, res: Response, next: NextFunction) => {
44
    try {
45
      const { id } = req.params
46
      const { user: userParams } = req.body;
47

48
      if (userParams) {
49
        const { email, password, firstName, lastName } = userParams;
50

51
        const user = await findUserById(Number(id));
52

53
        if (!user) {
54
          return res.status(404).json({
55
            error: "Usuário não encontrado"
56
          })
57
        }
58

59
        if (email || password || firstName || lastName) {
60
          const response = await updateUser(user, {
61
            email, firstName, lastName, password
62
          })
63

64
          const updated = await findUserById(Number(id))
65

66
          // TODO: Drop encrypted password & token here
67
          return res.status(200).json({
68
            user: updated
69
          })
70
        } else {
71
          return res.status(200).json({
72
            user
73
          })
74
        }
75
      }
76
    } catch (err) {
77
      next(err);
78
    }
79
  }
80
};