all repos — caroster @ b596a3ef1fd2408b7576af9f2db2b9abb7aeb041

[Octree] Group carpool to your event https://caroster.io

backend/src/graphql/event/event.ts (view raw)

  1export default ({ nexus, strapi }) => ({
  2  types: [
  3    nexus.extendType({
  4      type: "Event",
  5      definition(t) {
  6        t.field("waitingPassengers", {
  7          type: "PassengerRelationResponseCollection",
  8        });
  9        t.field("tripAlerts", {
 10          type: "TripAlertEntityResponseCollection",
 11        });
 12      },
 13    }),
 14    nexus.extendType({
 15      type: "Query",
 16      definition(t) {
 17        t.field("eventByUUID", {
 18          type: "EventEntityResponse",
 19          args: {
 20            uuid: nexus.nonNull("String"),
 21          },
 22        });
 23      },
 24    }),
 25    nexus.extendType({
 26      type: "Mutation",
 27      definition(t) {
 28        t.field("updateEventByUUID", {
 29          type: "EventEntityResponse",
 30          args: {
 31            uuid: nexus.nonNull("String"),
 32            data: nexus.nonNull("EventInput"),
 33          },
 34        });
 35      },
 36    }),
 37  ],
 38  resolvers: {
 39    Event: {
 40      waitingPassengers: async (root, args) => {
 41        const waitingPassengers = await strapi
 42          .service("api::event.event")
 43          .getWaitingPassengers(root);
 44        const { toEntityResponseCollection } = strapi
 45          .plugin("graphql")
 46          .service("format").returnTypes;
 47        return toEntityResponseCollection(waitingPassengers, {
 48          args,
 49          resourceUID: "api::passenger.passenger",
 50        });
 51      },
 52      tripAlerts: async (root, args) => {
 53        const tripAlerts = await strapi
 54          .service("api::event.event")
 55          .getTripAlerts(root);
 56        const { toEntityResponseCollection } = strapi
 57          .plugin("graphql")
 58          .service("format").returnTypes;
 59        return toEntityResponseCollection(tripAlerts, {
 60          args,
 61          resourceUID: "api::trip-alert.trip-alert",
 62        });
 63      },
 64    },
 65    Query: {
 66      eventByUUID: {
 67        description: "Retrieve an event using its UUID",
 68        async resolve(_root, args) {
 69          const { uuid } = args;
 70          const event = await strapi.db
 71            .query("api::event.event")
 72            .findOne({ where: { uuid } });
 73          strapi.log.warn(`No event found for uuid ${uuid}`);
 74          if (!event) throw new Error("No matching event");
 75          const { toEntityResponse } = strapi
 76            .plugin("graphql")
 77            .service("format").returnTypes;
 78          return toEntityResponse(event, {
 79            args,
 80            resourceUID: "api::event.event",
 81          });
 82        },
 83      },
 84    },
 85    Mutation: {
 86      updateEventByUUID: {
 87        description: "Update an event using its UUID",
 88        async resolve(_root, args) {
 89          const { uuid, data: eventUpdate } = args;
 90
 91          const updatedEvent = await strapi.db
 92            .query("api::event.event")
 93            .update({ where: { uuid }, data: eventUpdate });
 94          if (!updatedEvent) throw new Error("No matching event");
 95
 96          const { toEntityResponse } = strapi
 97            .plugin("graphql")
 98            .service("format").returnTypes;
 99          return toEntityResponse(updatedEvent, {
100            args,
101            resourceUID: "api::event.event",
102          });
103        },
104      },
105      createEvent: {
106        async resolve(_root, args, context) {
107          const {
108            koaContext,
109            state: { user },
110          } = context;
111
112          let eventData = args.data;
113          if (user)
114            eventData = { ...eventData, users: [user.id], creator: user.id };
115
116          koaContext.request.body = eventData;
117
118          const createdEvent = await strapi
119            .controller("api::event.event")
120            .create(koaContext);
121
122          return {
123            value: createdEvent,
124            info: { args, resourceUID: "api::event.event" },
125          };
126        },
127      },
128    },
129  },
130  resolversConfig: {
131    "Query.eventByUUID": {
132      auth: false,
133    },
134    "Mutation.updateEventByUUID": {
135      auth: false,
136      policies: ["api::event.check-caroster-plus"],
137    },
138    "Event.passengers": {
139      auth: false,
140    },
141    "Event.waitingPassengers": {
142      auth: false,
143    },
144    "Event.tripAlerts": {
145      auth: true,
146    },
147    "Event.travels": {
148      auth: false,
149    },
150    "Event.linkedEvent": {
151      auth: false,
152    },
153  },
154});