eletrotupi / tcc/ api/src/controllers/triggers.tsb4ed0dbe37bd3128e040c3ce7d1ed9784bba4951
3.4 KB | 123 lines Raw
1
import { Request, Response, NextFunction } from 'express';
2
import { AuthenticatedRequest } from '@app/middleware/auth';
3
import {
4
  createTrigger,
5
  getTriggersByUserId,
6
  destroyTriggerById,
7
  getTriggerById,
8
  updateTriggerById
9
} from '@app/services/trigger.service';
10
import {
11
  linkTriggerToMood,
12
  unlinkTriggerFromMood,
13
} from '@app/services/triggerMoodLink.service';
14

15
import {
16
  CreateTriggerSchema,
17
  UpdateTriggerSchema,
18
  LinkMoodSchema,
19
} from '@app/schemas'
20
import { formatValidationError } from '@app/lib/errors/validationError'
21

22
export const TriggersController = {
23
  create: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
24
    try {
25
      const parsed = CreateTriggerSchema.safeParse(req.body.trigger);
26

27
      if (!parsed.success) {
28
        return res.status(400).json(formatValidationError(parsed.error!));
29
      }
30

31
      const trigger = await createTrigger(req.userId!, parsed.data);
32

33
      return res.status(201).json({ trigger });
34
    } catch (err) {
35
      next(err);
36
    }
37
  },
38

39
  index: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
40
    try {
41
      const result = await getTriggersByUserId(Number(req.userId), {
42
        limit: req.query.limit ? Number(req.query.limit) : undefined,
43
        page:  req.query.page  ? Number(req.query.page)  : undefined,
44
        from:  req.query.from  as string | undefined,
45
        to:    req.query.to    as string | undefined,
46
      });
47

48
      return res.status(200).json(
49
        result
50
      )
51
    } catch (err) {
52
      next(err);
53
    }
54
  },
55

56
  destroy: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
57
    try {
58
      const result = await destroyTriggerById(req.userId!, Number(req.params.id!));
59

60
      return res.status(200).json({})
61
    } catch (err) {
62
      next(err);
63
    }
64
  },
65

66
  show: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
67
    try {
68
      const trigger = await getTriggerById(Number(req.userId!), Number(req.params.id!));
69

70
      return res.status(200).json(trigger)
71
    } catch (err) {
72
      next(err);
73
    }
74
  },
75

76
  update: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
77
    try {
78
      const parsed = UpdateTriggerSchema.safeParse(req.body.trigger);
79

80
      if (!parsed.success) {
81
        return res.status(400).json(formatValidationError(parsed.error!));
82
      }
83

84
      const trigger = await updateTriggerById(req.userId!, Number(req.params.id!), parsed.data);
85

86
      return res.status(200).json({ trigger });
87
    } catch (err) {
88
      next(err);
89
    }
90
  },
91

92
  linkMood: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
93
    try {
94
      const parsed = LinkMoodSchema.safeParse(req.body);
95

96
      if (!parsed.success) {
97
        return res.status(400).json(formatValidationError(parsed.error!));
98
      }
99

100
      const triggerId = Number(req.params.triggerId);
101
      const { moodId, perceivedImpact } = parsed.data;
102

103
      const link = await linkTriggerToMood(triggerId, moodId, perceivedImpact);
104

105
      return res.status(201).json({ link });
106
    } catch (err) {
107
      next(err);
108
    }
109
  },
110

111
  unlinkMood: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
112
    try {
113
      const triggerId = Number(req.params.triggerId);
114
      const moodId = Number(req.params.moodId);
115

116
      await unlinkTriggerFromMood(triggerId, moodId);
117

118
      return res.status(200).json({});
119
    } catch (err) {
120
      next(err);
121
    }
122
  },
123
};