backend/src/graphql/passenger/createPassenger.ts (view raw)
1import pMap from "p-map";
2import moment from "moment";
3
4const createPassenger = {
5 description: "Create a passenger",
6 async resolve(_root, args) {
7 const { data: passengerInput } = args;
8 const { user: userId, event: eventId } = passengerInput;
9
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("api::passenger.passenger", passenger.id),
27 { concurrency: 5 }
28 );
29 }
30
31 const createdPassenger = await strapi.entityService.create(
32 "api::passenger.passenger",
33 {
34 data: passengerInput,
35 populate: {
36 event: true,
37 user: true,
38 travel: {
39 populate: {
40 user: true,
41 },
42 },
43 },
44 }
45 );
46
47 // If event is Caroster Plus, send notification to user
48 const enabledModules = createdPassenger.event?.enabled_modules as string[];
49 const isCarosterPlus = enabledModules?.includes("caroster-plus");
50 if (isCarosterPlus && createdPassenger.user) {
51 const travel = createdPassenger.travel;
52 const driver = travel.user;
53 const datetime = travel.departure
54 ? moment(travel.departure)
55 .locale(createdPassenger.user.lang || "en")
56 .format("LLLL")
57 : null;
58 strapi.entityService.create("api::notification.notification", {
59 data: {
60 type: "ContactTripCreator",
61 event: createdPassenger.event.id,
62 user: createdPassenger.user.id,
63 // @ts-expect-error
64 payload: { travel, driver, datetime },
65 },
66 });
67 }
68
69 const { toEntityResponse } = strapi
70 .plugin("graphql")
71 .service("format").returnTypes;
72
73 return toEntityResponse(createdPassenger, {
74 args,
75 resourceUID: "api::passenger.passenger",
76 });
77 },
78};
79
80export default createPassenger;