eletrotupi / tcc/ api/src/services/export/export.service.ts82219bffa59da16277fbdf343d327a77d7714dfc
1.3 KB | 40 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
  moodComponentTable,
6
  moodTable,
7
  profileTable,
8
  sleepRecordTable,
9
  triggerMoodLinkTable,
10
  triggerTable,
11
} from "@app/services/export/table.descriptors";
12
import { buildZip } from "@app/services/export/zip.builder";
13
import { ExportArchive, ExportFile } from "@app/services/export/types";
14

15
export async function buildExportArchive(userId: number): Promise<ExportArchive> {
16
  const {
17
    user,
18
    moods,
19
    moodComponents,
20
    sleepRecords,
21
    triggers,
22
    triggerMoodLinks,
23
  } = await gatherExportData(userId);
24
  const generatedAt = new Date();
25

26
  const files: ExportFile[] = [
27
    serializeCsv(profileTable, [user]),
28
    serializeCsv(moodTable, moods),
29
    serializeCsv(moodComponentTable, moodComponents),
30
    serializeCsv(sleepRecordTable, sleepRecords),
31
    serializeCsv(triggerTable, triggers),
32
    serializeCsv(triggerMoodLinkTable, triggerMoodLinks),
33
  ];
34
  const manifest = buildManifest(files, generatedAt);
35

36
  return {
37
    filename: `nexo-dados-${generatedAt.toISOString().slice(0, 10)}.zip`,
38
    buffer: await buildZip([...files, manifest]),
39
  };
40
}