import { Mood, MoodComponent, SleepRecord, Trigger, TriggerMoodLink, User, } from "@prisma/client"; import { baseMoodLabel, intensityLabel, moodComponentLabel, triggerTypeLabel, } from "@app/services/export/label.map"; import { CsvTable } from "@app/services/export/types"; const booleanLabel = (value: boolean): string => (value ? "Sim" : "Não"); // Sleep records carry a day-granular date, so they drop the time and offset. const dateOnly = (value: Date): string => value.toISOString().slice(0, 10); export const profileTable: CsvTable = { filename: "profile.csv", columns: [ { header: "id", value: (user) => user.id }, { header: "Nome", value: (user) => user.firstName }, { header: "Sobrenome", value: (user) => user.lastName }, { header: "Email", value: (user) => user.email }, { header: "Ativo", value: (user) => booleanLabel(user.active) }, { header: "Notificações", value: (user) => booleanLabel(user.notificationsEnabled), }, { header: "Lembrete diário", value: (user) => user.dailyReminderTime }, { header: "Criado em", value: (user) => user.createdAt }, { header: "Atualizado em", value: (user) => user.updatedAt }, ], }; export const moodTable: CsvTable = { filename: "moods.csv", columns: [ { header: "id", value: (mood) => mood.id }, { header: "Humor", value: (mood) => baseMoodLabel[mood.selectedMood] }, { header: "Ansiedade", value: (mood) => mood.anxietyLevel }, { header: "Estresse", value: (mood) => mood.stressLevel }, { header: "Energia", value: (mood) => mood.energyLevel }, { header: "Momento", value: (mood) => mood.moment }, { header: "Anotação", value: (mood) => mood.annotation }, ], }; export const moodComponentTable: CsvTable = { filename: "mood_components.csv", columns: [ { header: "id", value: (component) => component.id }, { header: "mood_id", value: (component) => component.moodId }, { header: "Sentimento", value: (component) => moodComponentLabel[component.component], }, { header: "Intensidade", value: (component) => intensityLabel[component.intensity], }, ], }; export const sleepRecordTable: CsvTable = { filename: "sleep_records.csv", columns: [ { header: "id", value: (record) => record.id }, { header: "Data", value: (record) => dateOnly(record.date) }, { header: "Média", value: (record) => record.average }, { header: "Anotações", value: (record) => record.annotations }, { header: "Criado em", value: (record) => record.createdAt }, { header: "Atualizado em", value: (record) => record.updatedAt }, ], }; export const triggerTable: CsvTable = { filename: "triggers.csv", columns: [ { header: "id", value: (trigger) => trigger.id }, { header: "Categoria", value: (trigger) => triggerTypeLabel[trigger.category], }, { header: "Momento", value: (trigger) => trigger.moment }, { header: "Comentário", value: (trigger) => trigger.comment }, { header: "Criado em", value: (trigger) => trigger.createdAt }, { header: "Atualizado em", value: (trigger) => trigger.updatedAt }, ], }; export const triggerMoodLinkTable: CsvTable = { filename: "trigger_mood_links.csv", columns: [ { header: "id", value: (link) => link.id }, { header: "trigger_id", value: (link) => link.triggerId }, { header: "mood_id", value: (link) => link.moodId }, { header: "Impacto percebido", value: (link) => link.perceivedImpact }, { header: "Vinculado em", value: (link) => link.linkedAt }, ], };