typescript - NestJS pipe içinde soyut denetleyicide repository'ye nasıl erişilir
CanGetPipe boru hattını içeren BaseController (Soyut) sahibiyim
export abstract class CanGetPipe implements PipeTransform {
protected abstract readonly repository: Repository<IEntry>;
...
ve bunun için karışım
export const makeCanGetPipe = (repoName: any) =>
mixin(
class extends CanGetPipe {
protected readonly repository = getConnection().getRepository<IEntity>(repoName);
},
);
BaseController'ın Get metodu şöyle görünüyor:
@Get('/:id')
@UsePipes(makeCanGetPipe(REPOSITORY_NAME_FROM_CHILD_CONTROLLER))
getOne(@ValidateData() validate: ValidateParam, @Param('id') id: number) {
return this.Service.get(id, validate);
}
Alt denetleyici BaseController'dan miras almışsa, REPOSITORY_NAME_FROM_CHILD_CONTROLLER'ü alt denetleyicide nasıl ayarlayabilirim?
Veya, BaseController'a atanmış pipe içinde alt denetleyicinin repository'sine (service, bağımlılık) nasıl erişebilirim?
Cevap #1
Bence şunların kombinasyonunu kullanabilirsiniz:
@SetMetadata('repoName', YOUR_VALUE)alt sınıfınızda- Pipe yerine,
const repoName=this.reflector.get<string>('repoName', context.getClass());ile Guard kullanın
Bu işe yaramalı ve BaseGuard için özel depo alabileceksiniz :)