diff --git a/.npmrc b/.npmrc index 552cff5..66d6a2f 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1 @@ -node-options=--experimental-require-module +node-options=--experimental-require-module \ No newline at end of file diff --git a/src/WorkshopSubscription/workshopsubscription.schema.ts b/src/WorkshopSubscription/workshopsubscription.schema.ts index f5d100a..d075e39 100644 --- a/src/WorkshopSubscription/workshopsubscription.schema.ts +++ b/src/WorkshopSubscription/workshopsubscription.schema.ts @@ -1,10 +1,5 @@ import { Inject, Injectable } from '@nestjs/common' -import { - Pothos, - PothosRef, - PothosSchema, - SchemaBuilderToken, -} from '@smatch-corp/nestjs-pothos' +import { Pothos, PothosRef, PothosSchema, SchemaBuilderToken } from '@smatch-corp/nestjs-pothos' import { Builder } from '../Graphql/graphql.builder' import { PrismaService } from '../Prisma/prisma.service' import { DateTimeUtils } from 'src/common/utils/datetime.utils' @@ -36,8 +31,7 @@ export class WorkshopSubscriptionSchema extends PothosSchema { }), createdAt: t.expose('createdAt', { type: 'DateTime', - description: - 'The date and time the workshop subscription was created.', + description: 'The date and time the workshop subscription was created.', }), notified: t.exposeBoolean('notified', { description: 'Whether the user has been notified about the workshop.', @@ -52,8 +46,7 @@ export class WorkshopSubscriptionSchema extends PothosSchema { workshopSubscription: t.prismaField({ type: this.workshopSubscription(), args: this.builder.generator.findUniqueArgs('WorkshopSubscription'), - description: - 'Retrieve a single workshop subscription by its unique identifier.', + description: 'Retrieve a single workshop subscription by its unique identifier.', resolve: async (query, _root, args) => { return await this.prisma.workshopSubscription.findUnique({ ...query, @@ -64,8 +57,7 @@ export class WorkshopSubscriptionSchema extends PothosSchema { workshopSubscriptions: t.prismaField({ type: [this.workshopSubscription()], args: this.builder.generator.findManyArgs('WorkshopSubscription'), - description: - 'Retrieve a list of workshop subscriptions with optional filtering, ordering, and pagination.', + description: 'Retrieve a list of workshop subscriptions with optional filtering, ordering, and pagination.', resolve: async (query, _root, args) => { return await this.prisma.workshopSubscription.findMany({ ...query, @@ -76,6 +68,20 @@ export class WorkshopSubscriptionSchema extends PothosSchema { }) }, }), + subscribedWorkshops: t.prismaField({ + type: [this.workshopSubscription()], + description: 'Retrieve a list of workshops that the current user is subscribed to.', + resolve: async (query, _root, _args, ctx, _info) => { + if (ctx.isSubscription) throw new Error('Workshops cannot be retrieved in subscription context') + if (!ctx.http.me) throw new Error('User is not authenticated') + return await this.prisma.workshopSubscription.findMany({ + ...query, + where: { + userId: ctx.http.me.id, + }, + }) + }, + }), })) this.builder.mutationFields((t) => ({ subscribeToWorkshop: t.prismaField({ @@ -96,15 +102,12 @@ export class WorkshopSubscriptionSchema extends PothosSchema { if (!workshop) throw new Error('Workshop not found') if (!userId) throw new Error('User not authenticated') // check if workshop is in the future - if (workshop.date < DateTimeUtils.now().toJSDate()) - throw new Error('Workshop has already started or is over') + if (workshop.date < DateTimeUtils.now().toJSDate()) throw new Error('Workshop has already started or is over') // check if user is already subscribed to the workshop - const existingSubscription = - await this.prisma.workshopSubscription.findFirst({ - where: { userId, workshopId: args.workshopId }, - }) - if (existingSubscription) - throw new Error('User already subscribed to workshop') + const existingSubscription = await this.prisma.workshopSubscription.findFirst({ + where: { userId, workshopId: args.workshopId }, + }) + if (existingSubscription) throw new Error('User already subscribed to workshop') // create the workshop subscription return await this.prisma.workshopSubscription.create({ data: {