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];