eletrotupi / tcc/ api/src/services/export/export.service.ts1230d1819bd28727595923820528cbb25d702eb8
1.7 KB | 55 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
  medicineLogTable,
9
  medicineRegimenTable,
10
  moodComponentTable,
11
  moodTable,
12
  profileTable,
13
  sleepRecordTable,
14
  triggerMoodLinkTable,
15
  triggerTable,
16
} from "@app/services/export/table.descriptors";
17
import { buildZip } from "@app/services/export/zip.builder";
18
import { ExportArchive, ExportFile } from "@app/services/export/types";
19

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

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

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