eletrotupi / tcc/ api/src/services/export/data.gatherer.ts82219bffa59da16277fbdf343d327a77d7714dfc
1.3 KB | 57 lines Raw
1
import {
2
  Mood,
3
  MoodComponent,
4
  SleepRecord,
5
  Trigger,
6
  TriggerMoodLink,
7
  User,
8
} from "@prisma/client";
9

10
import { prisma } from "@app/lib/prisma";
11
import { findUserById } from "@app/services/user.service";
12

13
export type ExportData = {
14
  user: User;
15
  moods: Mood[];
16
  moodComponents: MoodComponent[];
17
  sleepRecords: SleepRecord[];
18
  triggers: Trigger[];
19
  triggerMoodLinks: TriggerMoodLink[];
20
};
21

22
export async function gatherExportData(userId: number): Promise<ExportData> {
23
  const user = await findUserById(userId);
24

25
  if (!user) {
26
    throw new Error(`Usuário ${userId} não encontrado para exportação`);
27
  }
28

29
  const [moods, sleepRecords, triggers, triggerMoodLinks] = await Promise.all([
30
    prisma.mood.findMany({
31
      where: { userId },
32
      include: { moodComponents: true },
33
      orderBy: { moment: "asc" },
34
    }),
35
    prisma.sleepRecord.findMany({
36
      where: { userId },
37
      orderBy: { date: "asc" },
38
    }),
39
    prisma.trigger.findMany({
40
      where: { userId },
41
      orderBy: { moment: "asc" },
42
    }),
43
    prisma.triggerMoodLink.findMany({
44
      where: { trigger: { userId } },
45
      orderBy: { linkedAt: "asc" },
46
    }),
47
  ]);
48

49
  return {
50
    user,
51
    moods,
52
    moodComponents: moods.flatMap((mood) => mood.moodComponents),
53
    sleepRecords,
54
    triggers,
55
    triggerMoodLinks,
56
  };
57
}