eletrotupi / tcc/ api/src/controllers/medicineRegimens.tsca6234de503f574e5e6cd3a52e58f2d5b6c253f2
3.1 KB | 113 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 {
6
  getMedicineRegimensByUserId,
7
  getMedicineRegimenById,
8
  createMedicineRegimen,
9
  updateMedicineRegimen,
10
  deactivateMedicineRegimen,
11
  getTodayMedicineRegimens,
12
  toggleMedicineRegimen,
13
} from '@app/services/medicineRegimen.service';
14

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

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

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

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

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

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

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

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

52
      if (!parsed.success) {
53
        return res.status(400).json({ errors: parsed.error!.issues });
54
      }
55

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

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

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

68
      if (!parsed.success) {
69
        return res.status(400).json({ errors: parsed.error!.issues });
70
      }
71

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

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

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

88
      if (!parsed.success) {
89
        return res.status(400).json({ errors: parsed.error!.issues });
90
      }
91

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

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

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

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