eletrotupi / tcc/ commit / 0874e55

api: generate trigger + sleep insights when creating these

Pedro Lucas Porcellis porcellis@eletrotupi.com 1 month ago 0874e55a0c0ad293a30632ee48f03efcf601bdf9
Parents: 1205479
2 file(s) changed
  • api/src/services/sleepRecord.service.ts +19 -1
  • api/src/services/trigger.service.ts +19 -1
api/src/services/sleepRecord.service.ts
1 1
import { prisma } from '@app/lib/prisma';
2 2
import { SleepRecord } from '@prisma/client';
3 3

4 4
import { CreateSleepRecordInput } from '@app/schemas';
5 +
import { rollingPeriod } from "@app/lib/queue/processors/insights/utils";
6 +
import { InsightJobName } from "@app/lib/queue/types";
7 +
import { getQueue } from "@app/lib/queue";
5 8

6 9
export const createSleepRecord = async (
7 10
  userId: number, input: CreateSleepRecordInput
8 11
): Promise<SleepRecord> => {
9 -
  return prisma.sleepRecord.create({
12 +
  const sleepRecord = await prisma.sleepRecord.create({
10 13
    data: {
11 14
      ...input,
12 15
      userId
13 16
    }
14 17
  });
18 +

19 +
  void enqueueEnergySleepInsight(userId);
20 +

21 +
  return sleepRecord;
15 22
};
16 23

17 24
export const getSleepRecordsByUserId = async (
18 25
  userId: number,
19 26
  params?: {
▸ 45 unchanged lines
65 72
      id,
66 73
      userId
67 74
    }
68 75
  })
69 76
}
77 +

78 +
async function enqueueEnergySleepInsight(userId: number): Promise<void> {
79 +
  await getQueue('insights').add(
80 +
    InsightJobName.EnergySleep,
81 +
    { userId, ...rollingPeriod(7) },
82 +
    {
83 +
      jobId: `energy-sleep-${userId}-${new Date().toDateString()}`,
84 +
      removeOnComplete: true,
85 +
    }
86 +
  );
87 +
}
api/src/services/trigger.service.ts
1 1
import { prisma } from '@app/lib/prisma';
2 2
import { Trigger } from '@prisma/client';
3 3

4 4
import { CreateTriggerInput } from '@app/schemas';
5 +
import { rollingPeriod } from "@app/lib/queue/processors/insights/utils";
6 +
import { InsightJobName } from "@app/lib/queue/types";
7 +
import { getQueue } from "@app/lib/queue";
5 8

6 9
export const createTrigger = async (
7 10
  userId: number, input: CreateTriggerInput
8 11
): Promise<Trigger> => {
9 -
  return prisma.trigger.create({
12 +
  const trigger = await prisma.trigger.create({
10 13
    data: {
11 14
      ...input,
12 15
      userId
13 16
    }
14 17
  });
18 +

19 +
  void enqueueTriggerPatternInsight(userId);
20 +

21 +
  return trigger
15 22
};
16 23

17 24
export const getTriggersByUserId = async (
18 25
  userId: number,
19 26
  params?: {
▸ 45 unchanged lines
65 72
      id,
66 73
      userId
67 74
    }
68 75
  })
69 76
}
77 +

78 +
async function enqueueTriggerPatternInsight(userId: number): Promise<void> {
79 +
  await getQueue('insights').add(
80 +
    InsightJobName.TriggerPattern,
81 +
    { userId, ...rollingPeriod(7) },
82 +
    {
83 +
      jobId: `trigger-pattern-${userId}-${new Date().toDateString()}`,
84 +
      removeOnComplete: true,
85 +
    }
86 +
  );
87 +
}