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;