Error 12 UNIMPLEMENTED: The server does not implement the method FindAllComprador

173 views Asked by At

Well, I'm trying to resolve this error in my gRPC method, I've been looking at my code for hours but I can't find the error, I need get one array of elements when I use Get on Postman, but I get this error everytime:

"12 UNIMPLEMENTED: The server does not implement the method FindAllComprador"

My service:
>>>>
@Injectable()
export class DadosService implements OnModuleInit {
 private readonly compraArray: Comprador[] = []

  onModuleInit() {
    for(let i = 0; i <= 10; i++){
      this.create({nomeComprador: randomUUID(), idade: randomUUID(), pais: randomUUID(), cidade: randomUUID()})
    }
  }
  create(criandoCompradorDto: CreateCompradorDto): Comprador {
    const comprador: Comprador = {
      ...criandoCompradorDto,
      dadosCompra: {},
      id: randomUUID()
    }
    this.compraArray.push(comprador)
    return comprador
  }
  findAll(): Compradores {
    return {compraArray: this.compraArray}
  }

  findOne(id: string): any{
    return this.compraArray.find((comprador) => comprador.id === id)
  }

  updateOne(id: string, dados: UpdateCompradorDto) {
    const compradorId = this.compraArray.findIndex((comp) => comp.id === id)
    if(compradorId !== -1){
      this.compraArray[compradorId] = {
        ...this.compraArray[compradorId],
        ...dados
      }
      return this.compraArray[compradorId]
    }
    throw new NotFoundException(`Comprador do id: ${id}`)
  }

  remove(id: string){
    const deleteId = this.compraArray.findIndex((del) => del.id === id)
    if(deleteId !== -1){
      return this.compraArray.splice(deleteId)[0]
    }
    throw new NotFoundException(`Comprador do id: ${id}`)
  }

  queryCompradores(paginacaoDTO: Observable<PaginacaoDto>): Observable<Compradores> {
    const subject = new Subject<Compradores>()

    const onNext = (paginacaoDTO: PaginacaoDto) => {
      const start = paginacaoDTO.page * paginacaoDTO.skip
      subject.next({
        compraArray: this.compraArray.splice(start, start + paginacaoDTO.skip),
      })
    };
    const onComplete = () => subject.complete()
    paginacaoDTO.subscribe({
      next: onNext,
      complete: onComplete
    })

    return subject.asObservable();
  }

}

My controller:

@Controller()
export class DadosController implements CompradosServiceController  {
  constructor(private readonly dadosService: DadosService) {}
  
  createComprador(request: CreateCompradorDto)  {
    return this.dadosService.create(request)
  }
  findAllComprador()  {
   return this.dadosService.findAll()
  }
  findOneComprador(request: FindOneCompradorDto)  {
   return this.dadosService.findOne(request.id)
  }
  updateOneComprador(request: UpdateCompradorDto) {
   return this.dadosService.updateOne(request.id, request)
  }
  deleteOneComprador(FindOneCompradorDto: FindOneCompradorDto)  {
   return this.dadosService.remove(FindOneCompradorDto.id)
  }
  queryComprador(request: Observable<PaginacaoDto>) {
   return this.dadosService.queryCompradores(request)
  }
  
}
My proto file:

proto
syntax = "proto3";


package auth;

service CompradosService {
    rpc CreateComprador(CreateCompradorDto) returns (Comprador) {};
    rpc FindAllComprador(Empty) returns (Compradores) {};
    rpc FindOneComprador(FindOneCompradorDto) returns (Comprador) {};
    rpc UpdateOneComprador(UpdateCompradorDto) returns (Comprador) {};
    rpc DeleteOneComprador(FindOneCompradorDto) returns (Comprador) {};
    rpc QueryComprador(stream PaginacaoDto) returns (stream Compradores) {};
}

message Empty {};

message PaginacaoDto {
    int32 page = 1;
    int32 skip = 2;
}

message UpdateCompradorDto {
    string id = 1;
    string nomeComprador = 2;
    string idade = 3;
    string pais = 4; 
    string cidade = 5;
    DadosCompra dadosCompra = 6; 
}
message FindOneCompradorDto {
    string id = 1;
}
message Compradores {
    repeated Comprador compraArray = 1;
}
message CreateCompradorDto {
    string nomeComprador = 1;
    string idade = 2;
    string pais = 3; 
    string cidade = 4; 
}

message Comprador {
    string id = 1;
    string nomeComprador = 2;
    string idade = 3;
    string pais = 4; 
    string cidade = 5; 
    DadosCompra dadosCompra = 6;
}

message DadosCompra {
    optional string valor = 1;
    optional string moeda = 2;
    optional string bancoUsado = 3;
}

so, I send Get in postman but returns same error

"12 UNIMPLEMENTED: The server does not implement the method FindAllComprador"

I alredy have tried everything, but I cant get a array of elements,

1

There are 1 answers

2
Jay McDoniel On BEST ANSWER

As you have the controller and methods named differently between the proto file and the controller class, you need to use the @GrpcMethod() decorator like:

@Controller()
export class DadosController implements CompradosServiceController  {
  constructor(private readonly dadosService: DadosService) {}
  
  @GrpcMethod('CompradosService', 'CreateComprador')
  createComprador(request: CreateCompradorDto)  {
    return this.dadosService.create(request)
  }

  @GrpcMethod('CompradosService', 'FindAllComprador')
  findAllComprador()  {
   return this.dadosService.findAll()
  }

  @GrpcMethod('CompradosService', 'FindOneComprador')
  findOneComprador(request: FindOneCompradorDto)  {
   return this.dadosService.findOne(request.id)
  }

  @GrpcMethod('CompradosService', 'UpdateOneComprador')
  updateOneComprador(request: UpdateCompradorDto) {
   return this.dadosService.updateOne(request.id, request)
  }

  @GrpcMethod('CompradosService', 'DeleteOneComprador')
  deleteOneComprador(FindOneCompradorDto: FindOneCompradorDto)  {
   return this.dadosService.remove(FindOneCompradorDto.id)
  }

  @GrpcMethod('CompradosService', 'QueryComprador')
  queryComprador(request: Observable<PaginacaoDto>) {
   return this.dadosService.queryCompradores(request)
  }
  
}

For more of an example, follow the docs on the NestJS site