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 }