Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida sobre o atributo pedidoId na classe Pagamento e método confirmarPagamento

Eu não entendi ainda como o atributo pedidoId da classe Pagamento é utilizado nos microsserviços. Teoricamente, nós que estamos setando esse pedidoId via Postman. Porém, ele não devia ser ''automático'', uma vez que quando criamos um Pedido no banco de dados, ele é já possui um id? Vou tentar exemplificar melhor:

public void confirmarPagamento(Long id){
        Optional<Pagamento> pagamento = repository.findById(id);

        if (!pagamento.isPresent()) {
            throw new EntityNotFoundException();
        }

        pagamento.get().setStatus(Status.CONFIRMADO);
        repository.save(pagamento.get());
        pedido.atualizaPagamento(pagamento.get().getPedidoId());
    }

Neste método, passamos o pagamento.get().getPedidoId() como parâmetro. Porém, não devia ser um id existente lá do banco de dados que foi gerado automaticamente quando criamos um Pedido via Postman? Imagine que estou criando um Pedido via Postman, e foi atribuido o valor '1' para ele (gerado automaticamente), e na classe Pagamento setamos o pedidoId como '2' ao invés de '1' (que foi o pedido criado no meu banco). Isso não estaria errado e, consequentemente, não daria algum erro?

Desculpe se pareceu confuso, mas estou aprendendo microsserviços agora e estou viajando nessa parte

1 resposta
solução!

Oi Lucas, tudo bem?

Entendo que você esteja com dúvidas sobre como o atributo pedidoId da classe Pagamento é utilizado nos microsserviços. Vou tentar esclarecer essa questão para você.

No trecho de código que você compartilhou, o método confirmarPagamento recebe um parâmetro id, que é o ID do pagamento. Em seguida, é feita uma busca no banco de dados pelo pagamento com esse ID. Se o pagamento não for encontrado, é lançada uma exceção.

Após encontrar o pagamento, o status dele é atualizado para "CONFIRMADO" e o pagamento é salvo novamente no banco de dados. Em seguida, é chamado o método atualizaPagamento do objeto pedido, passando o pedidoId do pagamento.

Aqui está o ponto que pode estar gerando confusão: o pedidoId não é o mesmo que o ID do pedido no banco de dados. O pedidoId é um atributo específico da classe Pagamento e é usado para identificar qual pedido está relacionado a esse pagamento.

No exemplo que você deu, se você criou um pedido com ID "1" no banco de dados e, ao criar o pagamento, definiu o pedidoId como "2", isso não está errado. O pedidoId é uma informação que você pode definir manualmente ao criar o pagamento. Ele não precisa ser necessariamente igual ao ID do pedido no banco de dados.

No entanto, é importante garantir que o pedidoId esteja correto para que a integração entre os microsserviços funcione corretamente. Se você definir o pedidoId incorretamente, pode haver problemas na comunicação entre os microsserviços.

Espero que isso tenha esclarecido a sua dúvida.

Um abraço e bons estudos.