eletrotupi / tcc/ api/src/controllers/users.ts090c04dfa3141e1224b12a76d3c2aaee605a1e88
1.7 KB | 72 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 { email, password, firstName, lastName } = req.body;
47

48
      const user = await findUserById(Number(id));
49

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

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

62
      const updated = await findUserById(Number(id))
63

64
      // TODO: Drop encrypted password & token here
65
      return res.status(200).json({
66
        user: updated
67
      })
68
    } catch (err) {
69
      next(err);
70
    }
71
  }
72
};