eletrotupi / tcc/ api/src/services/export/table.descriptors.ts1230d1819bd28727595923820528cbb25d702eb8
6.2 KB | 185 lines Raw
1
import {
2
  Activity,
3
  Appointment,
4
  CareAction,
5
  MedicineLog,
6
  MedicineRegimen,
7
  Mood,
8
  MoodComponent,
9
  SleepRecord,
10
  Trigger,
11
  TriggerMoodLink,
12
  User,
13
} from "@prisma/client";
14

15
import {
16
  activityCategoryLabel,
17
  appointmentTypeLabel,
18
  baseMoodLabel,
19
  careActionTypeLabel,
20
  intensityLabel,
21
  medicinePeriodicityLabel,
22
  moodComponentLabel,
23
  triggerTypeLabel,
24
} from "@app/services/export/label.map";
25
import { CsvTable } from "@app/services/export/types";
26

27
const booleanLabel = (value: boolean): string => (value ? "Sim" : "Não");
28

29
// Sleep records carry a day-granular date, so they drop the time and offset.
30
const dateOnly = (value: Date): string => value.toISOString().slice(0, 10);
31

32
export const profileTable: CsvTable<User> = {
33
  filename: "profile.csv",
34
  columns: [
35
    { header: "id", value: (user) => user.id },
36
    { header: "Nome", value: (user) => user.firstName },
37
    { header: "Sobrenome", value: (user) => user.lastName },
38
    { header: "Email", value: (user) => user.email },
39
    { header: "Ativo", value: (user) => booleanLabel(user.active) },
40
    {
41
      header: "Notificações",
42
      value: (user) => booleanLabel(user.notificationsEnabled),
43
    },
44
    { header: "Lembrete diário", value: (user) => user.dailyReminderTime },
45
    { header: "Criado em", value: (user) => user.createdAt },
46
    { header: "Atualizado em", value: (user) => user.updatedAt },
47
  ],
48
};
49

50
export const moodTable: CsvTable<Mood> = {
51
  filename: "moods.csv",
52
  columns: [
53
    { header: "id", value: (mood) => mood.id },
54
    { header: "Humor", value: (mood) => baseMoodLabel[mood.selectedMood] },
55
    { header: "Ansiedade", value: (mood) => mood.anxietyLevel },
56
    { header: "Estresse", value: (mood) => mood.stressLevel },
57
    { header: "Energia", value: (mood) => mood.energyLevel },
58
    { header: "Momento", value: (mood) => mood.moment },
59
    { header: "Anotação", value: (mood) => mood.annotation },
60
  ],
61
};
62

63
export const moodComponentTable: CsvTable<MoodComponent> = {
64
  filename: "mood_components.csv",
65
  columns: [
66
    { header: "id", value: (component) => component.id },
67
    { header: "mood_id", value: (component) => component.moodId },
68
    {
69
      header: "Sentimento",
70
      value: (component) => moodComponentLabel[component.component],
71
    },
72
    {
73
      header: "Intensidade",
74
      value: (component) => intensityLabel[component.intensity],
75
    },
76
  ],
77
};
78

79
export const sleepRecordTable: CsvTable<SleepRecord> = {
80
  filename: "sleep_records.csv",
81
  columns: [
82
    { header: "id", value: (record) => record.id },
83
    { header: "Data", value: (record) => dateOnly(record.date) },
84
    { header: "Média", value: (record) => record.average },
85
    { header: "Anotações", value: (record) => record.annotations },
86
    { header: "Criado em", value: (record) => record.createdAt },
87
    { header: "Atualizado em", value: (record) => record.updatedAt },
88
  ],
89
};
90

91
export const triggerTable: CsvTable<Trigger> = {
92
  filename: "triggers.csv",
93
  columns: [
94
    { header: "id", value: (trigger) => trigger.id },
95
    {
96
      header: "Categoria",
97
      value: (trigger) => triggerTypeLabel[trigger.category],
98
    },
99
    { header: "Momento", value: (trigger) => trigger.moment },
100
    { header: "Comentário", value: (trigger) => trigger.comment },
101
    { header: "Criado em", value: (trigger) => trigger.createdAt },
102
    { header: "Atualizado em", value: (trigger) => trigger.updatedAt },
103
  ],
104
};
105

106
export const triggerMoodLinkTable: CsvTable<TriggerMoodLink> = {
107
  filename: "trigger_mood_links.csv",
108
  columns: [
109
    { header: "id", value: (link) => link.id },
110
    { header: "trigger_id", value: (link) => link.triggerId },
111
    { header: "mood_id", value: (link) => link.moodId },
112
    { header: "Impacto percebido", value: (link) => link.perceivedImpact },
113
    { header: "Vinculado em", value: (link) => link.linkedAt },
114
  ],
115
};
116

117
export const careActionTable: CsvTable<CareAction> = {
118
  filename: "care_actions.csv",
119
  columns: [
120
    { header: "id", value: (action) => action.id },
121
    { header: "Tipo", value: (action) => careActionTypeLabel[action.type] },
122
    { header: "Momento", value: (action) => action.moment },
123
    { header: "trigger_id", value: (action) => action.triggerId },
124
    { header: "mood_id", value: (action) => action.moodId },
125
    { header: "Criado em", value: (action) => action.createdAt },
126
    { header: "Atualizado em", value: (action) => action.updatedAt },
127
  ],
128
};
129

130
export const medicineLogTable: CsvTable<MedicineLog> = {
131
  filename: "medicine_logs.csv",
132
  columns: [
133
    { header: "id", value: (log) => log.id },
134
    { header: "care_action_id", value: (log) => log.careActionId },
135
    { header: "regimen_id", value: (log) => log.regimenId },
136
    { header: "Tomado em", value: (log) => log.takenAt },
137
  ],
138
};
139

140
export const appointmentTable: CsvTable<Appointment> = {
141
  filename: "appointments.csv",
142
  columns: [
143
    { header: "id", value: (appointment) => appointment.id },
144
    {
145
      header: "care_action_id",
146
      value: (appointment) => appointment.careActionId,
147
    },
148
    {
149
      header: "Tipo",
150
      value: (appointment) => appointmentTypeLabel[appointment.type],
151
    },
152
    { header: "Duração", value: (appointment) => appointment.duration },
153
    { header: "Observação", value: (appointment) => appointment.note },
154
  ],
155
};
156

157
export const activityTable: CsvTable<Activity> = {
158
  filename: "activities.csv",
159
  columns: [
160
    { header: "id", value: (activity) => activity.id },
161
    { header: "care_action_id", value: (activity) => activity.careActionId },
162
    {
163
      header: "Tipo",
164
      value: (activity) => activityCategoryLabel[activity.type],
165
    },
166
    { header: "Duração", value: (activity) => activity.duration },
167
  ],
168
};
169

170
export const medicineRegimenTable: CsvTable<MedicineRegimen> = {
171
  filename: "medicine_regimens.csv",
172
  columns: [
173
    { header: "id", value: (regimen) => regimen.id },
174
    { header: "Nome", value: (regimen) => regimen.name },
175
    { header: "Dosagem", value: (regimen) => regimen.dosage },
176
    {
177
      header: "Periodicidade",
178
      value: (regimen) => medicinePeriodicityLabel[regimen.periodicity],
179
    },
180
    { header: "Horários", value: (regimen) => regimen.scheduledAt.join(" · ") },
181
    { header: "Ativo", value: (regimen) => booleanLabel(regimen.active) },
182
    { header: "Criado em", value: (regimen) => regimen.createdAt },
183
    { header: "Atualizado em", value: (regimen) => regimen.updatedAt },
184
  ],
185
};