eletrotupi / tcc/ api/src/schemas/careAction.schema.tsc901c35af9c84b6a29e5185545ced1129f33b8f4
1.3 KB | 51 lines Raw
1
import { z } from 'zod';
2
import {
3
  CareActionType,
4
  AppointmentType,
5
  ActivityType,
6
  MedicinePeriodicity,
7
} from '@prisma/client';
8

9
const MedicineInlineSchema = z.object({
10
  name: z.string().min(1),
11
  dosage: z.string().min(1),
12
  periodicity: z.nativeEnum(MedicinePeriodicity),
13
  scheduledAt: z.array(z.string()).optional().default([]),
14
});
15

16
export const CreateCareActionSchema = z.object({
17
  type: z.nativeEnum(CareActionType),
18
  moment: z.coerce.date(),
19
  triggerId: z.number().int().positive().optional(),
20
  moodId: z.number().int().positive().optional(),
21

22
  // MEDICINE fields
23
  regimenId: z.number().int().positive().optional(),
24
  medicine: MedicineInlineSchema.optional(),
25

26
  // APPOINTMENT fields
27
  appointment: z
28
    .object({
29
      type: z.nativeEnum(AppointmentType),
30
      duration: z.number().int().positive(),
31
      note: z.string().optional(),
32
    })
33
    .optional(),
34

35
  // ACTIVITY fields
36
  activity: z
37
    .object({
38
      type: z.nativeEnum(ActivityType),
39
      duration: z.number().int().positive().optional(),
40
    })
41
    .optional(),
42
});
43

44
export type CreateCareActionInput = z.infer<typeof CreateCareActionSchema>;
45

46
export const PatchCareActionSchema = z.object({
47
  triggerId: z.number().int().positive().optional(),
48
  moodId: z.number().int().positive().optional(),
49
}).strict();
50

51
export type PatchCareActionInput = z.infer<typeof PatchCareActionSchema>;