typescript - NestJS როგორ მივიღოთ წვდომა პაიპში რეპოზიტორიაზე აბსტრაქტულ კონტროლერში


მე მაქვს BaseController (აბსტრაქტული), რომელიც შეიცავს ნილოს CanGetPipe

export abstract class CanGetPipe implements PipeTransform {
  protected abstract readonly repository: Repository<IEntry>;
...

და მისთვის მიქსინი

export const makeCanGetPipe = (repoName: any) =>
  mixin(
    class extends CanGetPipe {
      protected readonly repository = getConnection().getRepository<IEntity>(repoName);
    },
  );

BaseController-ის Get მეთოდი ასე გამოიყურება:

  @Get('/:id')
  @UsePipes(makeCanGetPipe(REPOSITORY_NAME_FROM_CHILD_CONTROLLER))
  getOne(@ValidateData() validate: ValidateParam, @Param('id') id: number) {
    return this.Service.get(id, validate);
  }

როგორ შემიძლია ვაწესო REPOSITORY_NAME_FROM_CHILD_CONTROLLER შვილ კონტროლერში, რომელიც მემკვიდრეობით მიანიჭეს BaseController-იდან?
ან, როგორ შემიძლია მივაღწიო შვილ კონტროლერის რეპოზიტორიას (სერვისს, დამოკიდებულებას) პაიპში, რომელიც მიენიჭა BaseController-ს?

პასუხი #1

მე ვფიქრობ, რომ შეგიძლიათ გამოიყენოთ კომბინაცია:

  1. @SetMetadata('repoName', თქვენი_შეფასება) თქვენს შვილ კლასზე
  2. პაიპის ნაცვლად - გამოიყენეთ გარდი const repoName=this.reflector.get<string>('repoName', context.getClass());

ეს უნდა გაამართლოს საქმე და შეძლებით მიიღოთ მომხმარებლის რეპო თქვენი BaseGuard-ისთვის :)