eletrotupi / tcc/ api/src/services/trigger.service.ts2413af1abc6efc9954e73e8d3acfc14be7720858
1.4 KB | 69 lines Raw
1
import { prisma } from '@app/lib/prisma';
2
import { Trigger } from '@prisma/client';
3

4
import { CreateTriggerInput } from '@app/schemas';
5

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

17
export const getTriggersByUserId = async (
18
  userId: number,
19
  params?: {
20
    limit?: number;
21
    page?: number;
22
    from?: string;
23
    to?: string;
24
  }
25
): Promise<{ entries: Trigger[]; total: number; page: number; nextPage: number | null }> => {
26
  const page  = params?.page  ?? 1;
27
  const limit = params?.limit ?? 20;
28
  const skip  = (page - 1) * limit;
29

30
  const where = {
31
    userId,
32
    ...(params?.from || params?.to ? {
33
      moment: {
34
        ...(params.from && { gte: new Date(params.from) }),
35
        ...(params.to   && { lte: new Date(params.to)   }),
36
      }
37
    } : {}),
38
  };
39

40
  const [entries, total] = await Promise.all([
41
    prisma.trigger.findMany({
42
      where,
43
      orderBy: { moment: 'desc' },
44
      take: limit,
45
      skip,
46
    }),
47
    prisma.trigger.count({ where }),
48
  ]);
49

50
  const totalPages = Math.ceil(total / limit);
51

52
  return {
53
    entries,
54
    total,
55
    page,
56
    nextPage: page < totalPages ? page + 1 : null,
57
  };
58
};
59

60
export const destroyTriggerById = async (
61
  userId: number, id: number
62
): Promise<Trigger> => {
63
  return await prisma.trigger.delete({
64
    where: {
65
      id,
66
      userId
67
    }
68
  })
69
}