eletrotupi / tcc/ api/src/services/export/export.service.tse8826b4915d2fdf3653a2557c7d783db8688640d
1.8 KB | 58 lines Raw
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
  profileTable,
14
  sleepRecordTable,
15
  triggerMoodLinkTable,
16
  triggerTable,
17
} from "@app/services/export/table.descriptors";
18
import { buildZip } from "@app/services/export/zip.builder";
19
import { ExportArchive, ExportFile } from "@app/services/export/types";
20

21
export async function buildExportArchive(userId: number): Promise<ExportArchive> {
22
  const {
23
    user,
24
    moods,
25
    moodComponents,
26
    sleepRecords,
27
    triggers,
28
    triggerMoodLinks,
29
    careActions,
30
    medicineLogs,
31
    appointments,
32
    activities,
33
    medicineRegimens,
34
    insights,
35
  } = await gatherExportData(userId);
36
  const generatedAt = new Date();
37

38
  const files: ExportFile[] = [
39
    serializeCsv(profileTable, [user]),
40
    serializeCsv(moodTable, moods),
41
    serializeCsv(moodComponentTable, moodComponents),
42
    serializeCsv(sleepRecordTable, sleepRecords),
43
    serializeCsv(triggerTable, triggers),
44
    serializeCsv(triggerMoodLinkTable, triggerMoodLinks),
45
    serializeCsv(careActionTable, careActions),
46
    serializeCsv(medicineLogTable, medicineLogs),
47
    serializeCsv(appointmentTable, appointments),
48
    serializeCsv(activityTable, activities),
49
    serializeCsv(medicineRegimenTable, medicineRegimens),
50
    serializeCsv(insightTable, insights),
51
  ];
52
  const manifest = buildManifest(files, generatedAt);
53

54
  return {
55
    filename: `nexo-dados-${generatedAt.toISOString().slice(0, 10)}.zip`,
56
    buffer: await buildZip([...files, manifest]),
57
  };
58
}