eletrotupi / tcc/ api/src/controllers/medicineRegimens.tsc8bab449d13fa00dadc0138ef8f83f18104eb593
3.2 KB | 114 lines Raw
1
import { Response, NextFunction } from 'express';
2
import { AuthenticatedRequest } from '@app/middleware/auth';
3
import { CreateMedicineRegimenSchema, UpdateMedicineRegimenSchema } from '@app/schemas';
4
import { ToggleMedicineRegimenSchema } from '@app/schemas/medicineRegimen.schema';
5
import { formatValidationError } from '@app/lib/errors/validationError';
6
import {
7
  getMedicineRegimensByUserId,
8
  getMedicineRegimenById,
9
  createMedicineRegimen,
10
  updateMedicineRegimen,
11
  deactivateMedicineRegimen,
12
  getTodayMedicineRegimens,
13
  toggleMedicineRegimen,
14
} from '@app/services/medicineRegimen.service';
15

16
export const MedicineRegimensController = {
17
  index: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
18
    try {
19
      const regimens = await getMedicineRegimensByUserId(Number(req.userId));
20

21
      return res.status(200).json({ regimens });
22
    } catch (err) {
23
      next(err);
24
    }
25
  },
26

27
  today: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
28
    try {
29
      const regimens = await getTodayMedicineRegimens(req.userId!);
30

31
      return res.status(200).json({ regimens });
32
    } catch (err) {
33
      next(err);
34
    }
35
  },
36

37
  show: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
38
    try {
39
      const regimen = await getMedicineRegimenById(req.userId!, Number(req.params.id));
40

41
      if (!regimen) return res.status(404).json({ error: 'Not found' });
42

43
      return res.status(200).json({ regimen });
44
    } catch (err) {
45
      next(err);
46
    }
47
  },
48

49
  create: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
50
    try {
51
      const parsed = CreateMedicineRegimenSchema.safeParse(req.body.regimen);
52

53
      if (!parsed.success) {
54
        return res.status(400).json(formatValidationError(parsed.error!));
55
      }
56

57
      const regimen = await createMedicineRegimen(req.userId!, parsed.data);
58

59
      return res.status(201).json({ regimen });
60
    } catch (err) {
61
      next(err);
62
    }
63
  },
64

65
  update: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
66
    try {
67
      const parsed = UpdateMedicineRegimenSchema.safeParse(req.body.regimen);
68

69
      if (!parsed.success) {
70
        return res.status(400).json(formatValidationError(parsed.error!));
71
      }
72

73
      const regimen = await updateMedicineRegimen(
74
        req.userId!,
75
        Number(req.params.id),
76
        parsed.data,
77
      );
78

79
      return res.status(200).json({ regimen });
80
    } catch (err) {
81
      next(err);
82
    }
83
  },
84

85
  toggle: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
86
    try {
87
      const parsed = ToggleMedicineRegimenSchema.safeParse(req.body);
88

89
      if (!parsed.success) {
90
        return res.status(400).json(formatValidationError(parsed.error!));
91
      }
92

93
      const regimen = await toggleMedicineRegimen(
94
        req.userId!,
95
        Number(req.params.id),
96
        parsed.data.active,
97
      );
98

99
      return res.status(200).json({ regimen });
100
    } catch (err) {
101
      next(err);
102
    }
103
  },
104

105
  destroy: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
106
    try {
107
      await deactivateMedicineRegimen(req.userId!, Number(req.params.id));
108

109
      return res.status(200).json({});
110
    } catch (err) {
111
      next(err);
112
    }
113
  },
114
};