all repos — caroster @ v3.6

[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: { id: string }[] =
13          await strapi.entityService.findMany("api::passenger.passenger", {
14            filters: {
15              event: { id: eventId },
16              user: { id: userId },
17            },
18          });
19
20        // Delete existing passenger linked to the user in targeted event
21        await pMap(
22          userPassengersInEvent,
23          async (passenger) =>
24            strapi.entityService.delete(
25              "api::passenger.passenger",
26              passenger.id
27            ),
28          { concurrency: 5 }
29        );
30      }
31
32      return makeResponse({
33        operation: await strapi.entityService.create(
34          "api::passenger.passenger",
35          {
36            data: passengerInput,
37          }
38        ),
39        args,
40      });
41    } catch (error) {
42      console.log(error);
43      throw new Error("Couldn't create the passenger");
44    }
45  },
46};
47
48const makeResponse = async ({ operation, args }) => {
49  const { toEntityResponse } = strapi
50    .plugin("graphql")
51    .service("format").returnTypes;
52
53  return toEntityResponse(await operation, {
54    args,
55    resourceUID: "api::passenger.passenger",
56  });
57};
58
59export default createPassenger;