eletrotupi / tcc/ api/src/controllers/triggers.ts120e1cdf02f34255474a21f7c49f6bc0025e3779
3.3 KB | 126 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

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

26
      if (!parsed.success) {
27
        return res.status(400).json({
28
          errors: parsed.error!.issues
29
        });
30
      }
31

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

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

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

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

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

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

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

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

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

81
      if (!parsed.success) {
82
        return res.status(400).json({
83
          errors: parsed.error!.issues
84
        });
85
      }
86

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

89
      return res.status(200).json({ trigger });
90
    } catch (err) {
91
      next(err);
92
    }
93
  },
94

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

99
      if (!parsed.success) {
100
        return res.status(400).json({ errors: parsed.error!.issues });
101
      }
102

103
      const triggerId = Number(req.params.triggerId);
104
      const { moodId, perceivedImpact } = parsed.data;
105

106
      const link = await linkTriggerToMood(triggerId, moodId, perceivedImpact);
107

108
      return res.status(201).json({ link });
109
    } catch (err) {
110
      next(err);
111
    }
112
  },
113

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

119
      await unlinkTriggerFromMood(triggerId, moodId);
120

121
      return res.status(200).json({});
122
    } catch (err) {
123
      next(err);
124
    }
125
  },
126
};