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;