diff --git a/src/schema/index.ts b/src/schema/index.ts index 8102668c..ff47c61b 100644 --- a/src/schema/index.ts +++ b/src/schema/index.ts @@ -30,6 +30,7 @@ import "./salary/mutations"; import "./salary/queries"; import "./salary/types"; import "./schedules/types"; +import "./schedules/queries"; import "./sessions/types"; import "./speakers/types"; import "./status/types"; diff --git a/src/schema/schedules/queries.ts b/src/schema/schedules/queries.ts new file mode 100644 index 00000000..1c7226a0 --- /dev/null +++ b/src/schema/schedules/queries.ts @@ -0,0 +1,32 @@ +import { builder } from "~/builder"; +import { selectScheduleSchema } from "~/datasources/db/schema"; +import { applicationError, ServiceErrors } from "~/errors"; +import { schedulesFetcher } from "~/schema/schedules/schedulesFetcher"; +import { ScheduleRef } from "~/schema/schedules/types"; + +builder.queryField("schedule", (t) => + t.field({ + description: "Get a schedule by its ID", + type: ScheduleRef, + args: { + scheduleId: t.arg.string({ required: true }), + }, + resolve: async (root, { scheduleId }, { DB, logger }) => { + const schedules = await schedulesFetcher.searchSchedules({ + DB, + search: { scheduleIds: [scheduleId] }, + }); + const schedule = schedules[0]; + + if (!schedule) { + throw applicationError( + "Schedule not found", + ServiceErrors.NOT_FOUND, + logger, + ); + } + + return selectScheduleSchema.parse(schedule); + }, + }), +);