I am exporting TicketRepository
from TicketModule
which is then re-exported in ModelsModule
from @common/models
library. The TicketAccessGuard
has to have a TicketRepository
injected into it. I am using a factory patterns in the IncidentManagementModule
to create the TicketAccessGuard
because @common/models
library is accessible here. Then I export the TokenAccessGuard
. I import the IncidentManagementModule
into the app module and use the guard (app module is not allowed to import models module).
This is the TicketModule file
@Module({
providers: [TicketRepository],
exports: [TicketRepository],
})
export class TicketModule {}
This is my ModelsModule file
import { TicketModule } from "./ticket/ticket.module";
@Module({
imports: [TicketModule],
providers: [],
exports: [TicketModule],
})
export class ModelsModule {}
This is my IncidentManagementModule
import { ModelsModule, TicketRepository } from "@common/models";
import { TicketAccessGuard } from "./guards";
@Module({
imports: [ModelsModule, CoreModule, AuthModule, MailerModule],
providers: [
{
provide: TicketAccessGuard,
useFactory: (ticketRepository: TicketRepository) =>
new TicketAccessGuard(ticketRepository),
inject: [TicketRepository],
},
],
exports: [TicketAccessGuard],
})
export class IncidentManagementModule {}
This is my AppModule
@Module({
imports: [IncidentManagementModule],
controllers: [IncidentsController]
})
export class AppModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(LoggerMiddleware).forRoutes("*");
}
}
And finally this is where I use the guard
@Get(':incidentId')
@Roles('admin', 'agent', 'physician', 'pharmacist', 'representative')
@UseGuards(TicketAccessGuard)
async function getIncidentDetails(@Param() query: GetIncidentDetailsQuery) {
const result = await this.getIncidentDetailsQueryHandler.execute(query);
if (isLeft(result)) {
const error = result.left;
throw new HttpException(error, HttpStatus.INTERNAL_SERVER_ERROR);
}
return result.right;
}
Is this possible? Currently it is giving me the following error:
Nest can't resolve dependencies of the TicketAccessGuard (?).
Please make sure that the argument TicketRepository at index [0] is available in the AppModule context.