Estou desenvolvendo um projeto em paralelo e semelhante ao do curso. Criei o método PUT no meu controler e está atualizando os dados solicitados exceto a data. Não estou conseguindo enchergar onde está o detalhe. Poderiam me ajudar, por favor?
Classe Controller:
package com.minascafe.api.controllers;
import com.minascafe.api.entities.CafeCoco;
import com.minascafe.api.record.DadosAtualizacaoCafeCoco;
import com.minascafe.api.record.DadosCadastroCafeCoco;
import com.minascafe.api.record.DadosListagemCafeCoco;
import com.minascafe.api.repositories.CafeCocoRepository;
import jakarta.validation.Valid;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@RestController//Endpoint (página web) de Controller
@RequestMapping("cafecoco") //Define a url da classe
public class CafeCocoController {
public static final Logger log = LoggerFactory.getLogger(CafeCocoController.class);
@Autowired
private CafeCocoRepository cafe_coco; //Injetando o Repository como sendo um atributo
@PostMapping
@Transactional//Unidade de trabalho isolada que leva o banco de dados de um estado consistente a outro estado consistente
public void cadastrar(@RequestBody @Valid DadosCadastroCafeCoco cc){ //RequestBody = Busca do corpo da requisição
cafe_coco.save(new CafeCoco(cc)); //Salva um novo objeto entidade JPA do tipo CafeCoco passando os
// parâmetros que vêm do Json da requisição no construtor da Entidade CafeCoco
System.out.print("Lote de café em côco salvo no banco com sucesso!");
}
@GetMapping
public Page<DadosListagemCafeCoco> listar(Pageable paginacao){//Devolve uma lista de Café em Côco e informações sobre a paginação. É apenas leitura, não precisa da anotação @Transactional
return cafe_coco.findAll(paginacao).map(DadosListagemCafeCoco::new);//map = Mapeamento. Converte uma lista de CafeCoco para uma lista de DadosListagemCafeCoco. stream() = controle de fluxo de dados. Abstração para expressar operações eficientes do estilo SQL em relação a uma coleção de dados
//.toList() = converte para uma lista
// cafe_coco.findAll devolve uma lista de cafe_coco e o retorno do método é uma lista de DadosListagemCafeCoco (é um Dto)
}
@GetMapping("/{lote}")
public ResponseEntity<CafeCoco> ok(@PathVariable("lote") int lote){//No PathVariable o parâmetro é passado diretamente no corpo da requisição e esse valor faz parte do corpo da requisição
CafeCoco cafeCoco = new CafeCoco();
return ResponseEntity
.status(HttpStatus.ACCEPTED)
.body(cafeCoco);
}
@PutMapping //Realiza atualizações (Update) no cadastro
@Transactional //Para fazer escrita no banco de dados de forma efetiva
public void atualizar(@RequestBody @Valid DadosAtualizacaoCafeCoco da){
var cafe = cafe_coco.getReferenceById(da.lote()); //Carrega o cadastro do café em coco pelo lote que está vindo pelo DTO
cafe.atualizarInformacoes(da); //Chama os métodos para atualizar os dados baseado no DTO
}
}
Classe record:
package com.minascafe.api.record;
import jakarta.validation.constraints.NotNull;
import java.util.Date;
public record DadosAtualizacaoCafeCoco(
@NotNull
Integer lote,
String produtor,
Date data,
Integer catacao,
String classificacao,
String lancado,
String meieiro,
Integer numero_nota,
String observacoes,
Integer peneira,
Integer porcentagem_meieiro,
Integer porcentagem_produtor) {
}