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;