all repos — caroster @ d6cbd6995c786c495713eb3d9893b5efa9af78ff

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