| 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 | };
|