all repos — caroster @ c69db1134f4b237980f3a33c65e140c7ba4a10c7

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

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

  1const updateEventExtension = ({ nexus, strapi }) => ({
  2  types: [
  3    nexus.extendType({
  4      type: "Query",
  5      definition(t) {
  6        t.field("eventByUUID", {
  7          type: "EventEntityResponse",
  8          args: {
  9            uuid: nexus.nonNull("String"),
 10          },
 11        });
 12      },
 13    }),
 14    nexus.extendType({
 15      type: "Mutation",
 16      definition(t) {
 17        t.field("updateEventByUUID", {
 18          type: "EventEntityResponse",
 19          args: {
 20            uuid: nexus.nonNull("String"),
 21            data: nexus.nonNull("EventInput"),
 22          },
 23        });
 24      },
 25    }),
 26  ],
 27  resolvers: {
 28    Query: {
 29      eventByUUID: {
 30        description: "Retrieve an event using its UUID",
 31        async resolve(_root, args) {
 32          const { uuid } = args;
 33          const event = await strapi.db
 34            .query("api::event.event")
 35            .findOne({ where: { uuid } });
 36          if (!event) throw new Error("No matching event");
 37          const { toEntityResponse } = strapi
 38            .plugin("graphql")
 39            .service("format").returnTypes;
 40          return toEntityResponse(event, {
 41            args,
 42            resourceUID: "api::event.event",
 43          });
 44        },
 45      },
 46    },
 47    Mutation: {
 48      updateEventByUUID: {
 49        description: "Update an event using its UUID",
 50        async resolve(_root, args) {
 51          const { uuid, data: eventUpdate } = args;
 52
 53          const updatedEvent = await strapi.db
 54            .query("api::event.event")
 55            .update({ where: { uuid }, data: eventUpdate });
 56          if (!updatedEvent) throw new Error("No matching event");
 57
 58          const { toEntityResponse } = strapi
 59            .plugin("graphql")
 60            .service("format").returnTypes;
 61          return toEntityResponse(updatedEvent, {
 62            args,
 63            resourceUID: "api::event.event",
 64          });
 65        },
 66      },
 67      createEvent: {
 68        async resolve(_root, args, context) {
 69          const {
 70            koaContext,
 71            state: { user },
 72          } = context;
 73
 74          let eventData = args.data;
 75          if (user) eventData = { ...eventData, users: [user.id] };
 76
 77          koaContext.request.body = eventData;
 78
 79          const createdEvent = await strapi
 80            .controller("api::event.event")
 81            .create(koaContext);
 82
 83          return {
 84            value: createdEvent,
 85            info: { args, resourceUID: "api::event.event" },
 86          };
 87        },
 88      },
 89    },
 90  },
 91  resolversConfig: {
 92    "Query.eventByUUID": {
 93      auth: {
 94        scope: ["api::event.event.findOne"],
 95      },
 96    },
 97    "Mutation.updateEventByUUID": {
 98      auth: {
 99        scope: ["api::event.event.update"],
100      },
101    },
102  },
103});
104
105export default [updateEventExtension];