eletrotupi / tcc/ api/src/services/export/table.descriptors.ts82219bffa59da16277fbdf343d327a77d7714dfc
3.6 KB | 106 lines Raw
1
import {
2
  Mood,
3
  MoodComponent,
4
  SleepRecord,
5
  Trigger,
6
  TriggerMoodLink,
7
  User,
8
} from "@prisma/client";
9

10
import {
11
  baseMoodLabel,
12
  intensityLabel,
13
  moodComponentLabel,
14
  triggerTypeLabel,
15
} from "@app/services/export/label.map";
16
import { CsvTable } from "@app/services/export/types";
17

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

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

23
export const profileTable: CsvTable<User> = {
24
  filename: "profile.csv",
25
  columns: [
26
    { header: "id", value: (user) => user.id },
27
    { header: "Nome", value: (user) => user.firstName },
28
    { header: "Sobrenome", value: (user) => user.lastName },
29
    { header: "Email", value: (user) => user.email },
30
    { header: "Ativo", value: (user) => booleanLabel(user.active) },
31
    {
32
      header: "Notificações",
33
      value: (user) => booleanLabel(user.notificationsEnabled),
34
    },
35
    { header: "Lembrete diário", value: (user) => user.dailyReminderTime },
36
    { header: "Criado em", value: (user) => user.createdAt },
37
    { header: "Atualizado em", value: (user) => user.updatedAt },
38
  ],
39
};
40

41
export const moodTable: CsvTable<Mood> = {
42
  filename: "moods.csv",
43
  columns: [
44
    { header: "id", value: (mood) => mood.id },
45
    { header: "Humor", value: (mood) => baseMoodLabel[mood.selectedMood] },
46
    { header: "Ansiedade", value: (mood) => mood.anxietyLevel },
47
    { header: "Estresse", value: (mood) => mood.stressLevel },
48
    { header: "Energia", value: (mood) => mood.energyLevel },
49
    { header: "Momento", value: (mood) => mood.moment },
50
    { header: "Anotação", value: (mood) => mood.annotation },
51
  ],
52
};
53

54
export const moodComponentTable: CsvTable<MoodComponent> = {
55
  filename: "mood_components.csv",
56
  columns: [
57
    { header: "id", value: (component) => component.id },
58
    { header: "mood_id", value: (component) => component.moodId },
59
    {
60
      header: "Sentimento",
61
      value: (component) => moodComponentLabel[component.component],
62
    },
63
    {
64
      header: "Intensidade",
65
      value: (component) => intensityLabel[component.intensity],
66
    },
67
  ],
68
};
69

70
export const sleepRecordTable: CsvTable<SleepRecord> = {
71
  filename: "sleep_records.csv",
72
  columns: [
73
    { header: "id", value: (record) => record.id },
74
    { header: "Data", value: (record) => dateOnly(record.date) },
75
    { header: "Média", value: (record) => record.average },
76
    { header: "Anotações", value: (record) => record.annotations },
77
    { header: "Criado em", value: (record) => record.createdAt },
78
    { header: "Atualizado em", value: (record) => record.updatedAt },
79
  ],
80
};
81

82
export const triggerTable: CsvTable<Trigger> = {
83
  filename: "triggers.csv",
84
  columns: [
85
    { header: "id", value: (trigger) => trigger.id },
86
    {
87
      header: "Categoria",
88
      value: (trigger) => triggerTypeLabel[trigger.category],
89
    },
90
    { header: "Momento", value: (trigger) => trigger.moment },
91
    { header: "Comentário", value: (trigger) => trigger.comment },
92
    { header: "Criado em", value: (trigger) => trigger.createdAt },
93
    { header: "Atualizado em", value: (trigger) => trigger.updatedAt },
94
  ],
95
};
96

97
export const triggerMoodLinkTable: CsvTable<TriggerMoodLink> = {
98
  filename: "trigger_mood_links.csv",
99
  columns: [
100
    { header: "id", value: (link) => link.id },
101
    { header: "trigger_id", value: (link) => link.triggerId },
102
    { header: "mood_id", value: (link) => link.moodId },
103
    { header: "Impacto percebido", value: (link) => link.perceivedImpact },
104
    { header: "Vinculado em", value: (link) => link.linkedAt },
105
  ],
106
};