82219bffa59da16277fbdf343d327a77d7714dfc
import { serializeCsv } from "@app/services/export/csv.serializer";
import { gatherExportData } from "@app/services/export/data.gatherer";
import { buildManifest } from "@app/services/export/manifest.builder";
import {
moodComponentTable,
moodTable,
profileTable,
sleepRecordTable,
triggerMoodLinkTable,
triggerTable,
} from "@app/services/export/table.descriptors";
import { buildZip } from "@app/services/export/zip.builder";
import { ExportArchive, ExportFile } from "@app/services/export/types";
export async function buildExportArchive(userId: number): Promise<ExportArchive> {
const {
user,
moods,
moodComponents,
sleepRecords,
triggers,
triggerMoodLinks,
} = await gatherExportData(userId);
const generatedAt = new Date();
const files: ExportFile[] = [
serializeCsv(profileTable, [user]),
serializeCsv(moodTable, moods),
serializeCsv(moodComponentTable, moodComponents),
serializeCsv(sleepRecordTable, sleepRecords),
serializeCsv(triggerTable, triggers),
serializeCsv(triggerMoodLinkTable, triggerMoodLinks),
];
const manifest = buildManifest(files, generatedAt);
return {
filename: `nexo-dados-${generatedAt.toISOString().slice(0, 10)}.zip`,
buffer: await buildZip([...files, manifest]),
};
}