all repos — caroster @ 8f6ee2d5cc57223f2192b61caad42a84deb22b96

[Octree] Group carpool to your event https://caroster.io

backend/src/graphql/passenger/createPassenger.ts (view raw)

 1import pMap from "p-map";
 2
 3const createPassenger = {
 4  description: "Create a passenger",
 5  async resolve(_root, args) {
 6    const { data: passengerInput } = args;
 7    const { user: userId, event: eventId } = passengerInput;
 8
 9    try {
10      //Avoid duplicity when the connected users add themself
11      if (userId) {
12        const userPassengersInEvent = (await strapi.entityService.findMany(
13          "api::passenger.passenger",
14          {
15            filters: {
16              event: { id: eventId },
17              user: { id: userId },
18            },
19          }
20        )) as { id: string }[];
21
22        // Delete existing passenger linked to the user in targeted event
23        await pMap(
24          userPassengersInEvent,
25          async (passenger) =>
26            strapi.entityService.delete(
27              "api::passenger.passenger",
28              passenger.id
29            ),
30          { concurrency: 5 }
31        );
32      }
33
34      return makeResponse({
35        operation: await strapi.entityService.create(
36          "api::passenger.passenger",
37          {
38            data: passengerInput,
39          }
40        ),
41        args,
42      });
43    } catch (error) {
44      console.log(error);
45      throw new Error("Couldn't create the passenger");
46    }
47  },
48};
49
50const makeResponse = async ({ operation, args }) => {
51  const { toEntityResponse } = strapi
52    .plugin("graphql")
53    .service("format").returnTypes;
54
55  return toEntityResponse(await operation, {
56    args,
57    resourceUID: "api::passenger.passenger",
58  });
59};
60
61export default createPassenger;