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,
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