remix-demo

react router (remix) demo

git clone https://9o.is/git/remix-demo.git

seed.ts

(3316B)


      1 import { PrismaClient, Role } from "@prisma/client";
      2 
      3 const prisma = new PrismaClient();
      4 
      5 async function seed() {
      6   const { USER, ADMIN } = Role;
      7 
      8   const users = [
      9     { role: USER, name: "Chester", email: "chester@example.com" },
     10     { role: ADMIN, name: "Julio", email: "julio@example.com" },
     11     { role: USER, name: "Serj", email: "serj@example.com" },
     12   ];
     13 
     14   for (const { name, role, email } of users) {
     15     await prisma.user.delete({ where: { email } }).catch(() => {
     16       /* ignore if does not exist */
     17     });
     18 
     19     await prisma.user.create({
     20       data: {
     21         name,
     22         email,
     23         role,
     24         threshold: 2100,
     25       },
     26     });
     27   }
     28 
     29   const foodEntries = [
     30     {
     31       calories: 80,
     32       consumed: new Date("2022-09-26T00:00"),
     33       userName: "Chester",
     34       name: "Apple",
     35     },
     36     {
     37       calories: 110,
     38       consumed: new Date("2022-09-26T00:00"),
     39       userName: "Chester",
     40       name: "Banana",
     41     },
     42     {
     43       calories: 30,
     44       consumed: new Date("2022-09-16T00:00"),
     45       userName: "Chester",
     46       name: "Carrot",
     47     },
     48     {
     49       calories: 250,
     50       consumed: new Date("2022-09-16T00:00"),
     51       userName: "Chester",
     52       name: "Pumpkin Soup",
     53     },
     54     {
     55       calories: 400,
     56       consumed: new Date("2022-09-27T00:00"),
     57       userName: "Serj",
     58       name: "French Fries",
     59     },
     60     {
     61       calories: 1600,
     62       consumed: new Date("2022-09-27T00:00"),
     63       userName: "Serj",
     64       name: "Big Mac",
     65     },
     66     {
     67       calories: 1100,
     68       consumed: new Date("2022-09-26T00:00"),
     69       userName: "Serj",
     70       name: "McNuggets 20pc",
     71     },
     72     {
     73       calories: 300,
     74       consumed: new Date("2022-09-26T00:00"),
     75       userName: "Serj",
     76       name: "Sundae",
     77     },
     78     {
     79       calories: 400,
     80       consumed: new Date("2022-09-25T00:00"),
     81       userName: "Serj",
     82       name: "Mocha Frappe",
     83     },
     84     {
     85       calories: 200,
     86       consumed: new Date("2022-09-25T00:00"),
     87       userName: "Serj",
     88       name: "Coca Cola",
     89     },
     90     {
     91       calories: 1800,
     92       consumed: new Date("2022-09-25T00:00"),
     93       userName: "Serj",
     94       name: "Double Quarter Pounder",
     95     },
     96     {
     97       calories: 700,
     98       consumed: new Date("2022-09-25T00:00"),
     99       userName: "Serj",
    100       name: "English Muffin Sandwich",
    101     },
    102     {
    103       calories: 700,
    104       consumed: new Date("2022-09-25T00:00"),
    105       userName: "Serj",
    106       name: "Large Chocolate Milkshake",
    107     },
    108     {
    109       calories: 700,
    110       consumed: new Date("2022-09-15T00:00"),
    111       userName: "Serj",
    112       name: "English Muffin Sandwich",
    113     },
    114     {
    115       calories: 700,
    116       consumed: new Date("2022-09-15T00:00"),
    117       userName: "Serj",
    118       name: "Large Chocolate Milkshake",
    119     },
    120   ];
    121 
    122   await prisma.foodEntry.deleteMany();
    123 
    124   const userIds = new Map(
    125     (await prisma.user.findMany({ select: { id: true, name: true } })).map(
    126       (user) => [user.name, user.id]
    127     )
    128   );
    129 
    130   const data = foodEntries.map((entry) => ({
    131     name: entry.name,
    132     calories: entry.calories,
    133     consumed: entry.consumed,
    134     userId: userIds.get(entry.userName) || "",
    135   }));
    136 
    137   await prisma.foodEntry.createMany({ data });
    138 
    139   console.log(`Database has been seeded. 🌱`);
    140 }
    141 
    142 seed()
    143   .catch((e) => {
    144     console.error(e);
    145     process.exit(1);
    146   })
    147   .finally(async () => {
    148     await prisma.$disconnect();
    149   });