eletrotupi / tcc/ api/src/services/export/export.service.ts60e277a93c467e6f0fff6c664ec0aae0eb2c4535
1.8 KB | 61 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
  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
}