remix-demo
react router (remix) demo
git clone https://9o.is/git/remix-demo.git
foodEntry.server.ts
(2044B)
1 import type { FoodEntry, User } from "@prisma/client";
2 import { prisma } from "~/db.server";
3
4 export function createFoodEntry({
5 userId,
6 name,
7 calories,
8 consumed,
9 }: Pick<FoodEntry, "userId" | "name" | "calories" | "consumed">) {
10 return prisma.foodEntry.create({
11 data: {
12 name,
13 calories,
14 consumed,
15 user: {
16 connect: {
17 id: userId,
18 },
19 },
20 },
21 });
22 }
23
24 export function getFoodEntry(id: FoodEntry["id"]) {
25 return prisma.foodEntry.findUnique({
26 select: {
27 id: true,
28 name: true,
29 calories: true,
30 consumed: true,
31 userId: true,
32 },
33 where: { id },
34 });
35 }
36
37 export function getFoodEntries(userId: User["id"]) {
38 return prisma.foodEntry.findMany({
39 select: {
40 id: true,
41 name: true,
42 calories: true,
43 consumed: true,
44 userId: true,
45 },
46 where: { userId },
47 orderBy: { consumed: "desc" },
48 });
49 }
50
51 export function getCaloriesReport(userId: User["id"]) {
52 return prisma.foodEntry.findMany({
53 select: {
54 consumed: true,
55 calories: true,
56 },
57 where: { userId },
58 orderBy: { consumed: "desc" },
59 });
60 }
61
62 export function getAllFoodEntries() {
63 return prisma.foodEntry.findMany({
64 select: {
65 id: true,
66 name: true,
67 calories: true,
68 consumed: true,
69 userId: true,
70 user: { select: { name: true } },
71 },
72 orderBy: { consumed: "desc" },
73 });
74 }
75
76 export function updateFoodEntry(
77 id: FoodEntry["id"],
78 data: Partial<Pick<FoodEntry, "userId" | "name" | "calories" | "consumed">>
79 ) {
80 return prisma.foodEntry.update({ data, where: { id } });
81 }
82
83 export function deleteFoodEntry(id: FoodEntry["id"]) {
84 return prisma.foodEntry.deleteMany({ where: { id } });
85 }
86
87 export function aggregateReportPerUser(start: Date, end: Date) {
88 return prisma.foodEntry.groupBy({
89 by: ["userId"],
90 _count: {
91 _all: true,
92 },
93 _sum: {
94 calories: true,
95 },
96 where: {
97 consumed: {
98 gt: start,
99 lte: end,
100 },
101 },
102 });
103 }