import { ApolloDriverConfig } from '@nestjs/apollo'; import { Global, MiddlewareConsumer, Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { PothosModule } from '@smatch-corp/nestjs-pothos'; import { PothosApolloDriver } from '@smatch-corp/nestjs-pothos-apollo-driver'; import { Builder } from './graphql.builder'; import { PrismaService } from '../Prisma/prisma.service'; import { GraphQLValidationMiddleware } from '../middlewares/graphql.middleware'; import { PrismaModule } from '../Prisma/prisma.module'; import { UserModule } from '../User/user.module'; import { CenterModule } from '../Center/center.module'; import { ServiceModule } from '../Service/service.module'; import { ChatroomModule } from '../ChatRoom/chatroom.module'; import { CenterStaffModule } from '../CenterStaff/centerstaff.module'; import { ResumeModule } from '../Resume/resume.module'; import { WorkshopModule } from '../Workshop/workshop.module'; import { WorkshopOrganizationModule } from '../WorkshopOrganization/workshoporganization.module'; import { WorkshopSubscriptionModule } from '../WorkshopSubscription/workshopsubscription.module'; import { PrismaCrudGenerator } from './graphql.generator'; import { OrderModule } from '../Order/order.module'; import { PaymentModule } from '../Payment/payment.module'; import { RefundTicketModule } from '../RefundTicket/refundticket.module'; import { ServiceAndCategoryModule } from '../ServiceAndCategory/serviceandcategory.module'; import { CategoryModule } from '../Category/category.module'; import { ServiceFeedbackModule } from '../ServiceFeedback/servicefeedback.module'; import { MilestoneModule } from '../Milestone/milestone.module'; import { ScheduleModule } from '../Schedule/schedule.module'; import { MessageModule } from '../Message/message.module'; import { ServiceMeetingRoomModule } from '../ServiceMeetingRoom/servicemeetingroom.module'; @Global() @Module({ imports: [ PrismaModule, UserModule, CenterModule, ServiceModule, ChatroomModule, CenterStaffModule, ResumeModule, WorkshopModule, WorkshopOrganizationModule, WorkshopSubscriptionModule, PaymentModule, OrderModule, RefundTicketModule, ServiceAndCategoryModule, CategoryModule, ServiceFeedbackModule, MilestoneModule, ScheduleModule, MessageModule, ServiceMeetingRoomModule, PothosModule.forRoot({ builder: { inject: [PrismaService], useFactory: (prisma: PrismaService) => new Builder(prisma), }, }), GraphQLModule.forRoot({ driver: PothosApolloDriver, }), ], providers: [ { provide: Builder, useFactory: (prisma: PrismaService) => new Builder(prisma), inject: [PrismaService], }, { provide: PrismaCrudGenerator, useFactory: (builder: Builder) => new PrismaCrudGenerator(builder), inject: [Builder], }, ], exports: [Builder, PrismaCrudGenerator], }) export class GraphqlModule { configure(consumer: MiddlewareConsumer) { consumer .apply(GraphQLValidationMiddleware) // Apply the custom middleware .forRoutes('graphql'); // Ensure it only applies to the /graphql endpoint } }