| 1 | import { serializeCsv } from "@app/services/export/csv.serializer";
|
| 2 | import { gatherExportData } from "@app/services/export/data.gatherer";
|
| 3 | import { buildManifest } from "@app/services/export/manifest.builder";
|
| 4 | import {
|
| 5 | activityTable,
|
| 6 | appointmentTable,
|
| 7 | careActionTable,
|
| 8 | insightTable,
|
| 9 | medicineLogTable,
|
| 10 | medicineRegimenTable,
|
| 11 | moodComponentTable,
|
| 12 | moodTable,
|
| 13 | notificationTable,
|
| 14 | profileTable,
|
| 15 | sleepRecordTable,
|
| 16 | triggerMoodLinkTable,
|
| 17 | triggerTable,
|
| 18 | } from "@app/services/export/table.descriptors";
|
| 19 | import { buildZip } from "@app/services/export/zip.builder";
|
| 20 | import { ExportArchive, ExportFile } from "@app/services/export/types";
|
| 21 |
|
| 22 | export async function buildExportArchive(userId: number): Promise<ExportArchive> {
|
| 23 | const {
|
| 24 | user,
|
| 25 | moods,
|
| 26 | moodComponents,
|
| 27 | sleepRecords,
|
| 28 | triggers,
|
| 29 | triggerMoodLinks,
|
| 30 | careActions,
|
| 31 | medicineLogs,
|
| 32 | appointments,
|
| 33 | activities,
|
| 34 | medicineRegimens,
|
| 35 | insights,
|
| 36 | notifications,
|
| 37 | } = await gatherExportData(userId);
|
| 38 | const generatedAt = new Date();
|
| 39 |
|
| 40 | const files: ExportFile[] = [
|
| 41 | serializeCsv(profileTable, [user]),
|
| 42 | serializeCsv(moodTable, moods),
|
| 43 | serializeCsv(moodComponentTable, moodComponents),
|
| 44 | serializeCsv(sleepRecordTable, sleepRecords),
|
| 45 | serializeCsv(triggerTable, triggers),
|
| 46 | serializeCsv(triggerMoodLinkTable, triggerMoodLinks),
|
| 47 | serializeCsv(careActionTable, careActions),
|
| 48 | serializeCsv(medicineLogTable, medicineLogs),
|
| 49 | serializeCsv(appointmentTable, appointments),
|
| 50 | serializeCsv(activityTable, activities),
|
| 51 | serializeCsv(medicineRegimenTable, medicineRegimens),
|
| 52 | serializeCsv(insightTable, insights),
|
| 53 | serializeCsv(notificationTable, notifications),
|
| 54 | ];
|
| 55 | const manifest = buildManifest(files, generatedAt);
|
| 56 |
|
| 57 | return {
|
| 58 | filename: `nexo-dados-${generatedAt.toISOString().slice(0, 10)}.zip`,
|
| 59 | buffer: await buildZip([...files, manifest]),
|
| 60 | };
|
| 61 | }
|