From deb01bfeeaf4627ed7d106d385bab7ca68927f74 Mon Sep 17 00:00:00 2001 From: Lilian Date: Sun, 5 Dec 2021 18:03:25 -0300 Subject: [PATCH 1/7] Projeto com models, controllers, repository e validacao a testar --- pom.xml | 7 +- .../config/validacao/ErroDeFormularioDto.java | 20 ++++ .../validacao/ErroDeValidacaoHandler.java | 36 +++++++ .../controller/ReceitasController.java | 93 +++++++++++++++++++ .../controller/dto/DetalheReceitaDto.java | 63 +++++++++++++ .../controller/dto/IngredienteDto.java | 18 ++++ .../controller/dto/ListaReceitaDto.java | 58 ++++++++++++ .../controller/form/IngredienteForm.java | 45 +++++++++ .../receitas/controller/form/ReceitaForm.java | 38 ++++++++ .../com/codar/receitas/model/Ingrediente.java | 40 ++++++++ .../br/com/codar/receitas/model/Medida.java | 5 + .../br/com/codar/receitas/model/Receita.java | 72 ++++++++++++++ .../repository/IngredienteRepository.java | 7 ++ .../repository/ReceitaRepository.java | 8 ++ src/main/resources/application.properties | 14 ++- .../{ => receitas}/detalhe-receita.html | 0 .../lista.html} | 0 .../nova.html} | 0 18 files changed, 522 insertions(+), 2 deletions(-) create mode 100644 src/main/java/br/com/codar/receitas/config/validacao/ErroDeFormularioDto.java create mode 100644 src/main/java/br/com/codar/receitas/config/validacao/ErroDeValidacaoHandler.java create mode 100644 src/main/java/br/com/codar/receitas/controller/ReceitasController.java create mode 100644 src/main/java/br/com/codar/receitas/controller/dto/DetalheReceitaDto.java create mode 100644 src/main/java/br/com/codar/receitas/controller/dto/IngredienteDto.java create mode 100644 src/main/java/br/com/codar/receitas/controller/dto/ListaReceitaDto.java create mode 100644 src/main/java/br/com/codar/receitas/controller/form/IngredienteForm.java create mode 100644 src/main/java/br/com/codar/receitas/controller/form/ReceitaForm.java create mode 100644 src/main/java/br/com/codar/receitas/model/Ingrediente.java create mode 100644 src/main/java/br/com/codar/receitas/model/Medida.java create mode 100644 src/main/java/br/com/codar/receitas/model/Receita.java create mode 100644 src/main/java/br/com/codar/receitas/repository/IngredienteRepository.java create mode 100644 src/main/java/br/com/codar/receitas/repository/ReceitaRepository.java rename src/main/resources/templates/{ => receitas}/detalhe-receita.html (100%) rename src/main/resources/templates/{lista-receitas.html => receitas/lista.html} (100%) rename src/main/resources/templates/{cadastro-receita.html => receitas/nova.html} (100%) diff --git a/pom.xml b/pom.xml index f4e27e4..b197770 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,12 @@ org.springframework.boot spring-boot-starter-web - + + + org.springframework.boot + spring-boot-devtools + 2.6.1 + com.h2database h2 diff --git a/src/main/java/br/com/codar/receitas/config/validacao/ErroDeFormularioDto.java b/src/main/java/br/com/codar/receitas/config/validacao/ErroDeFormularioDto.java new file mode 100644 index 0000000..6fc95a9 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/config/validacao/ErroDeFormularioDto.java @@ -0,0 +1,20 @@ +package br.com.codar.receitas.config.validacao; + +public class ErroDeFormularioDto { + + private String campo; + private String erro; + + public ErroDeFormularioDto(String campo, String erro) { + this.campo = campo; + this.erro = erro; + } + + public String getCampo() { + return campo; + } + + public String getErro() { + return erro; + } +} diff --git a/src/main/java/br/com/codar/receitas/config/validacao/ErroDeValidacaoHandler.java b/src/main/java/br/com/codar/receitas/config/validacao/ErroDeValidacaoHandler.java new file mode 100644 index 0000000..73b2816 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/config/validacao/ErroDeValidacaoHandler.java @@ -0,0 +1,36 @@ +package br.com.codar.receitas.config.validacao; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.http.HttpStatus; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import java.util.ArrayList; +import java.util.List; + +@RestControllerAdvice +public class ErroDeValidacaoHandler { + + @Autowired + private MessageSource messageSource; + + @ResponseStatus(code = HttpStatus.BAD_REQUEST) + @ExceptionHandler(MethodArgumentNotValidException.class) + public List handle(MethodArgumentNotValidException exception) { + List dto = new ArrayList<>(); + + List fieldErrors = exception.getBindingResult().getFieldErrors(); + fieldErrors.forEach(e -> { + String mensagem = messageSource.getMessage(e, LocaleContextHolder.getLocale()); + ErroDeFormularioDto erro = new ErroDeFormularioDto(e.getField(), mensagem); + dto.add(erro); + }); + + return dto; + } +} diff --git a/src/main/java/br/com/codar/receitas/controller/ReceitasController.java b/src/main/java/br/com/codar/receitas/controller/ReceitasController.java new file mode 100644 index 0000000..7e4b737 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/controller/ReceitasController.java @@ -0,0 +1,93 @@ +package br.com.codar.receitas.controller; + +import br.com.codar.receitas.controller.dto.DetalheReceitaDto; +import br.com.codar.receitas.controller.dto.ListaReceitaDto; +import br.com.codar.receitas.controller.form.ReceitaForm; +import br.com.codar.receitas.model.Ingrediente; +import br.com.codar.receitas.model.Medida; +import br.com.codar.receitas.model.Receita; + +import br.com.codar.receitas.repository.IngredienteRepository; +import br.com.codar.receitas.repository.ReceitaRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.util.UriComponentsBuilder; + +import javax.transaction.Transactional; +import javax.validation.Valid; +import java.net.URI; +import java.util.List; +import java.util.Optional; + +@Controller +@RequestMapping("/receitas") +public class ReceitasController { + + @Autowired + private ReceitaRepository receitaRepository; + + @Autowired + private IngredienteRepository ingredienteRepository; + + @GetMapping("/nova") + public String nova(Model model){ + ReceitaForm receita = new ReceitaForm(); + model.addAttribute("receita", receita); + return "receitas/nova"; + } + + @ResponseBody + public List listaReceita(){ + + Ingrediente chocolate = new Ingrediente("Chocolate", 200, Medida.GRAMA); + Ingrediente farinha = new Ingrediente("Farinha", 500, Medida.GRAMA); + Ingrediente ovo = new Ingrediente("Ovos", 2, Medida.UNIDADE); + Ingrediente leite = new Ingrediente("Leite", 100, Medida.MILILITRO); + Ingrediente acucar = new Ingrediente("Açucar", 100, Medida.GRAMA); + + ingredienteRepository.save(chocolate); + ingredienteRepository.save(farinha); + ingredienteRepository.save(ovo); + ingredienteRepository.save(leite); + ingredienteRepository.save(acucar); + + + Receita brownie = new Receita("Brownie de Chocolate", + "https://img.estadao.com.br/fotos/crop/1200x1200/resources/jpg/7/0/1519841184607.jpg", + 40, 8, + "Em uma tigela coloque os ovos e o açúcar e bata com a ajuda de fouet ou garfo, em seguida adicione chocolate e depois adicione a farinha até que fique homogênea; Despeje a massa em uma forma untada e asse em forno pré-aquecido a 180ºC por 35 minutos.", + false, ingredienteRepository.findAll()); + + receitaRepository.save(brownie); + + + List receitas = receitaRepository.findAll(); + return ListaReceitaDto.converter(receitas); + } + + @PostMapping + @Transactional + public ResponseEntity cadastrar(@RequestBody @Valid ReceitaForm receitaForm, BindingResult result, UriComponentsBuilder uriBuilder) { + Receita receita = receitaForm.converter(ingredienteRepository); + receitaRepository.save(receita); + + URI uri = uriBuilder.path("/detalhe/{id}").buildAndExpand(receita.getId()).toUri(); + return ResponseEntity.created(uri).body(new ListaReceitaDto(receita)); + } + + @GetMapping("/detalhe/{id}") + public ResponseEntity detalhar(@PathVariable Long id) { + Optional receita = receitaRepository.findById(id); + if (receita.isPresent()) { + return ResponseEntity.ok(new DetalheReceitaDto(receita.get())); + } + + return ResponseEntity.notFound().build(); + } + + +} diff --git a/src/main/java/br/com/codar/receitas/controller/dto/DetalheReceitaDto.java b/src/main/java/br/com/codar/receitas/controller/dto/DetalheReceitaDto.java new file mode 100644 index 0000000..3d5e245 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/controller/dto/DetalheReceitaDto.java @@ -0,0 +1,63 @@ +package br.com.codar.receitas.controller.dto; + +import br.com.codar.receitas.model.Receita; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class DetalheReceitaDto { + private Long id; + private String nome; + private String linkFoto; + private Integer tempoPreparo; + private Integer rendimento; + private String modoPreparo; + private List ingredientes; + private LocalDateTime dataPublicacao; + + public DetalheReceitaDto(Receita receita) { + this.id = receita.getId(); + this.nome = receita.getNome(); + this.linkFoto = receita.getLinkFoto(); + this.tempoPreparo = receita.getTempoPreparo(); + this.rendimento = receita.getRendimento(); + this.modoPreparo = receita.getModoPreparo(); + this.ingredientes = new ArrayList<>(); + this.ingredientes.addAll(receita.getIngredientes().stream().map(IngredienteDto::new).collect(Collectors.toList())); + this.dataPublicacao = receita.getDataPublicacao(); + } + + public Long getId() { + return id; + } + + public String getNome() { + return nome; + } + + public String getLinkFoto() { + return linkFoto; + } + + public Integer getTempoPreparo() { + return tempoPreparo; + } + + public Integer getRendimento() { + return rendimento; + } + + public String getModoPreparo() { + return modoPreparo; + } + + public List getIngredientes() { + return ingredientes; + } + + public LocalDateTime getDataPublicacao() { + return dataPublicacao; + } +} diff --git a/src/main/java/br/com/codar/receitas/controller/dto/IngredienteDto.java b/src/main/java/br/com/codar/receitas/controller/dto/IngredienteDto.java new file mode 100644 index 0000000..3b6a02a --- /dev/null +++ b/src/main/java/br/com/codar/receitas/controller/dto/IngredienteDto.java @@ -0,0 +1,18 @@ +package br.com.codar.receitas.controller.dto; + +import br.com.codar.receitas.model.Ingrediente; +import br.com.codar.receitas.model.Medida; + +public class IngredienteDto { + private String nome; + private Integer quantidade; + private Medida medida; + + public IngredienteDto(Ingrediente ingrediente) { + this.nome = ingrediente.getNome(); + this.quantidade = ingrediente.getQuantidade(); + this.medida = ingrediente.getMedida(); + } + + +} diff --git a/src/main/java/br/com/codar/receitas/controller/dto/ListaReceitaDto.java b/src/main/java/br/com/codar/receitas/controller/dto/ListaReceitaDto.java new file mode 100644 index 0000000..c5edfe2 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/controller/dto/ListaReceitaDto.java @@ -0,0 +1,58 @@ +package br.com.codar.receitas.controller.dto; + +import br.com.codar.receitas.model.Receita; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; +import java.util.stream.Collectors; + +public class ListaReceitaDto { + + private Long id; + private String nome; + private String linkFoto; + private Integer tempoPreparo; + private Integer rendimento; + private LocalDateTime dataPublicacao; + + //Lista receitas + + public ListaReceitaDto(Receita receita){ + this.id = receita.getId(); + this.nome = receita.getNome(); + this.linkFoto = receita.getLinkFoto(); + this.tempoPreparo = receita.getTempoPreparo(); + this.rendimento = receita.getRendimento(); + this.dataPublicacao = receita.getDataPublicacao(); + } + + + public Long getId() { + return id; + } + + public String getNome() { + return nome; + } + + public String getLinkFoto() { + return linkFoto; + } + + public Integer getTempoPreparo() { + return tempoPreparo; + } + + public Integer getRendimento() { + return rendimento; + } + + public LocalDateTime getDataPublicacao() { + return dataPublicacao; + } + + public static List converter(List receitas) { + return receitas.stream().map(ListaReceitaDto::new).collect(Collectors.toList()); + } +} diff --git a/src/main/java/br/com/codar/receitas/controller/form/IngredienteForm.java b/src/main/java/br/com/codar/receitas/controller/form/IngredienteForm.java new file mode 100644 index 0000000..6a8996c --- /dev/null +++ b/src/main/java/br/com/codar/receitas/controller/form/IngredienteForm.java @@ -0,0 +1,45 @@ +package br.com.codar.receitas.controller.form; + +import br.com.codar.receitas.model.Ingrediente; +import br.com.codar.receitas.model.Medida; + +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +public class IngredienteForm { + @NotNull @NotEmpty + private String nome; + @NotNull @NotEmpty @Min(1) @Max(1000) + private Integer quantidade; + @NotNull @NotEmpty @Enumerated(EnumType.STRING) + private Medida medida; + + public IngredienteForm() { + } + + public IngredienteForm(String nome, Integer quantidade, Medida medida) { + this.nome = nome; + this.quantidade = quantidade; + this.medida = medida; + } + + public void setNome(String nome) { + this.nome = nome; + } + + public void setQuantidade(Integer quantidade) { + this.quantidade = quantidade; + } + + public void setMedida(Medida medida) { + this.medida = medida; + } + + public Ingrediente converter() { + return new Ingrediente(this.nome, this.quantidade, this.medida); + } +} diff --git a/src/main/java/br/com/codar/receitas/controller/form/ReceitaForm.java b/src/main/java/br/com/codar/receitas/controller/form/ReceitaForm.java new file mode 100644 index 0000000..6cb571c --- /dev/null +++ b/src/main/java/br/com/codar/receitas/controller/form/ReceitaForm.java @@ -0,0 +1,38 @@ +package br.com.codar.receitas.controller.form; + +import br.com.codar.receitas.controller.dto.IngredienteDto; +import br.com.codar.receitas.model.Ingrediente; +import br.com.codar.receitas.model.Receita; +import br.com.codar.receitas.repository.IngredienteRepository; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class ReceitaForm { + + @NotNull @NotEmpty + private String nome; + private String linkFoto; + @NotNull @NotEmpty @Min(10) @Max(360) + private Integer tempoPreparo; + @NotNull @NotEmpty @Min(1) @Max(50) + private Integer rendimento; + @NotNull @NotEmpty @Length(min = 20) + private String modoPreparo; + private Boolean revisar; + @NotNull @NotEmpty + private List ingredientes; + + public Receita converter(IngredienteRepository ingredienteRepository) { + List listaIngredientes = new ArrayList<>(); + this.ingredientes.forEach(i -> listaIngredientes.add(i.converter())); + listaIngredientes.forEach(i -> ingredienteRepository.save(i)); + return new Receita(this.nome, this.linkFoto, this.tempoPreparo, this.rendimento, this.modoPreparo, this.revisar, listaIngredientes); + } +} diff --git a/src/main/java/br/com/codar/receitas/model/Ingrediente.java b/src/main/java/br/com/codar/receitas/model/Ingrediente.java new file mode 100644 index 0000000..20986d0 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/model/Ingrediente.java @@ -0,0 +1,40 @@ +package br.com.codar.receitas.model; + +import javax.persistence.*; + +@Entity +@Table(name = "ingredientes") +public class Ingrediente { + + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String nome; + private Integer quantidade; + @Enumerated(EnumType.STRING) + private Medida medida; + + public Ingrediente() { + } + + public Ingrediente(String nome, Integer quantidade, Medida medida) { + this.nome = nome; + this.quantidade = quantidade; + this.medida = medida; + } + + public Long getId() { + return id; + } + + public String getNome() { + return nome; + } + + public Integer getQuantidade() { + return quantidade; + } + + public Medida getMedida() { + return medida; + } +} diff --git a/src/main/java/br/com/codar/receitas/model/Medida.java b/src/main/java/br/com/codar/receitas/model/Medida.java new file mode 100644 index 0000000..b1a82d7 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/model/Medida.java @@ -0,0 +1,5 @@ +package br.com.codar.receitas.model; + +public enum Medida { + GRAMA, MILILITRO, UNIDADE; +} diff --git a/src/main/java/br/com/codar/receitas/model/Receita.java b/src/main/java/br/com/codar/receitas/model/Receita.java new file mode 100644 index 0000000..6495317 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/model/Receita.java @@ -0,0 +1,72 @@ +package br.com.codar.receitas.model; + +import javax.persistence.*; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Entity +@Table(name = "receitas") +public class Receita { + + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String nome; + private String linkFoto; + private Integer tempoPreparo; + private Integer rendimento; + private String modoPreparo; + private Boolean revisar; + @OneToMany + private List ingredientes; + private LocalDateTime dataPublicacao = LocalDateTime.now(); + + public Receita() { + } + + public Receita(String nome, String linkFoto, Integer tempoPreparo, Integer rendimento, String modoPreparo, Boolean revisar, List ingredientes) { + this.nome = nome; + this.linkFoto = linkFoto; + this.tempoPreparo = tempoPreparo; + this.rendimento = rendimento; + this.modoPreparo = modoPreparo; + this.revisar = revisar; + this.ingredientes = ingredientes; + } + + public Long getId() { + return id; + } + + public String getNome() { + return nome; + } + + public String getLinkFoto() { + return linkFoto; + } + + public Integer getTempoPreparo() { + return tempoPreparo; + } + + public Integer getRendimento() { + return rendimento; + } + + public String getModoPreparo() { + return modoPreparo; + } + + public Boolean getRevisar() { + return revisar; + } + + public List getIngredientes() { + return ingredientes; + } + + public LocalDateTime getDataPublicacao() { + return dataPublicacao; + } +} diff --git a/src/main/java/br/com/codar/receitas/repository/IngredienteRepository.java b/src/main/java/br/com/codar/receitas/repository/IngredienteRepository.java new file mode 100644 index 0000000..ef4a585 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/repository/IngredienteRepository.java @@ -0,0 +1,7 @@ +package br.com.codar.receitas.repository; + +import br.com.codar.receitas.model.Ingrediente; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface IngredienteRepository extends JpaRepository { +} diff --git a/src/main/java/br/com/codar/receitas/repository/ReceitaRepository.java b/src/main/java/br/com/codar/receitas/repository/ReceitaRepository.java new file mode 100644 index 0000000..d367b81 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/repository/ReceitaRepository.java @@ -0,0 +1,8 @@ +package br.com.codar.receitas.repository; + +import br.com.codar.receitas.model.Receita; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ReceitaRepository extends JpaRepository { + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3469e0c..d7ce7e7 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,10 +1,22 @@ # Datasource (H2 em memória) -spring.datasource.url=jdbc:h2:mem:testdb +spring.datasource.url=jdbc:h2:mem:livrodereceitas spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password +spring.h2.console.enabled=true +spring.h2.console.path=/h2-console + + +spring.jpa.defer-datasource-initialization=true # JPA / Hibernate spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update +spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImproveNamingStrategy spring.jpa.database-platform=org.hibernate.dialect.H2Dialect + + +spring.thymeleaf.cache=false +spring.thymeleaf.enabled=true +spring.thymeleaf.prefix=classpath:/templates/ +spring.thymeleaf.suffix=.html \ No newline at end of file diff --git a/src/main/resources/templates/detalhe-receita.html b/src/main/resources/templates/receitas/detalhe-receita.html similarity index 100% rename from src/main/resources/templates/detalhe-receita.html rename to src/main/resources/templates/receitas/detalhe-receita.html diff --git a/src/main/resources/templates/lista-receitas.html b/src/main/resources/templates/receitas/lista.html similarity index 100% rename from src/main/resources/templates/lista-receitas.html rename to src/main/resources/templates/receitas/lista.html diff --git a/src/main/resources/templates/cadastro-receita.html b/src/main/resources/templates/receitas/nova.html similarity index 100% rename from src/main/resources/templates/cadastro-receita.html rename to src/main/resources/templates/receitas/nova.html From 24155701c16514f56b4fff6adaebaee4ab5c7d11 Mon Sep 17 00:00:00 2001 From: Lilian Date: Sun, 5 Dec 2021 18:19:59 -0300 Subject: [PATCH 2/7] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20de=20pesquisa=20de?= =?UTF-8?q?=20listagem=20por=20itens=20que=20n=C3=A3o=20precisam=20de=20re?= =?UTF-8?q?vis=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../br/com/codar/receitas/controller/ReceitasController.java | 4 ++-- .../com/codar/receitas/controller/dto/ListaReceitaDto.java | 2 -- src/main/java/br/com/codar/receitas/model/Receita.java | 5 ----- .../br/com/codar/receitas/repository/ReceitaRepository.java | 3 +++ 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/java/br/com/codar/receitas/controller/ReceitasController.java b/src/main/java/br/com/codar/receitas/controller/ReceitasController.java index 7e4b737..d23bb25 100644 --- a/src/main/java/br/com/codar/receitas/controller/ReceitasController.java +++ b/src/main/java/br/com/codar/receitas/controller/ReceitasController.java @@ -40,7 +40,7 @@ public String nova(Model model){ return "receitas/nova"; } - @ResponseBody + @GetMapping("/lista") public List listaReceita(){ Ingrediente chocolate = new Ingrediente("Chocolate", 200, Medida.GRAMA); @@ -64,8 +64,8 @@ public List listaReceita(){ receitaRepository.save(brownie); + List receitas = receitaRepository.findByRevisarFalse(); - List receitas = receitaRepository.findAll(); return ListaReceitaDto.converter(receitas); } diff --git a/src/main/java/br/com/codar/receitas/controller/dto/ListaReceitaDto.java b/src/main/java/br/com/codar/receitas/controller/dto/ListaReceitaDto.java index c5edfe2..36a0fa9 100644 --- a/src/main/java/br/com/codar/receitas/controller/dto/ListaReceitaDto.java +++ b/src/main/java/br/com/codar/receitas/controller/dto/ListaReceitaDto.java @@ -16,8 +16,6 @@ public class ListaReceitaDto { private Integer rendimento; private LocalDateTime dataPublicacao; - //Lista receitas - public ListaReceitaDto(Receita receita){ this.id = receita.getId(); this.nome = receita.getNome(); diff --git a/src/main/java/br/com/codar/receitas/model/Receita.java b/src/main/java/br/com/codar/receitas/model/Receita.java index 6495317..0d299be 100644 --- a/src/main/java/br/com/codar/receitas/model/Receita.java +++ b/src/main/java/br/com/codar/receitas/model/Receita.java @@ -1,7 +1,6 @@ package br.com.codar.receitas.model; import javax.persistence.*; -import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @@ -58,10 +57,6 @@ public String getModoPreparo() { return modoPreparo; } - public Boolean getRevisar() { - return revisar; - } - public List getIngredientes() { return ingredientes; } diff --git a/src/main/java/br/com/codar/receitas/repository/ReceitaRepository.java b/src/main/java/br/com/codar/receitas/repository/ReceitaRepository.java index d367b81..6d2422b 100644 --- a/src/main/java/br/com/codar/receitas/repository/ReceitaRepository.java +++ b/src/main/java/br/com/codar/receitas/repository/ReceitaRepository.java @@ -3,6 +3,9 @@ import br.com.codar.receitas.model.Receita; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + public interface ReceitaRepository extends JpaRepository { + List findByRevisarFalse(); } From 6f4db6f57d416f4f6ef8261e8dcbc7c94ba95316 Mon Sep 17 00:00:00 2001 From: Lilian Date: Sun, 5 Dec 2021 21:59:34 -0300 Subject: [PATCH 3/7] Lista funcionando, cadastro de nova receita em testes --- pom.xml | 1 + .../controller/ReceitasController.java | 41 ++++-------- .../controller/dto/IngredienteDto.java | 22 +++++++ .../controller/dto/ListaReceitaDto.java | 2 - .../receitas/controller/form/ReceitaForm.java | 64 ++++++++++++++++++- src/main/resources/data.sql | 29 +++++++++ .../{detalhe-receita.html => detalhe.html} | 1 + .../resources/templates/receitas/nova.html | 30 ++++++++- 8 files changed, 155 insertions(+), 35 deletions(-) create mode 100644 src/main/resources/data.sql rename src/main/resources/templates/receitas/{detalhe-receita.html => detalhe.html} (99%) diff --git a/pom.xml b/pom.xml index b197770..79a006c 100644 --- a/pom.xml +++ b/pom.xml @@ -38,6 +38,7 @@ org.springframework.boot spring-boot-devtools 2.6.1 + true com.h2database diff --git a/src/main/java/br/com/codar/receitas/controller/ReceitasController.java b/src/main/java/br/com/codar/receitas/controller/ReceitasController.java index d23bb25..411ac57 100644 --- a/src/main/java/br/com/codar/receitas/controller/ReceitasController.java +++ b/src/main/java/br/com/codar/receitas/controller/ReceitasController.java @@ -3,8 +3,6 @@ import br.com.codar.receitas.controller.dto.DetalheReceitaDto; import br.com.codar.receitas.controller.dto.ListaReceitaDto; import br.com.codar.receitas.controller.form.ReceitaForm; -import br.com.codar.receitas.model.Ingrediente; -import br.com.codar.receitas.model.Medida; import br.com.codar.receitas.model.Receita; import br.com.codar.receitas.repository.IngredienteRepository; @@ -41,32 +39,11 @@ public String nova(Model model){ } @GetMapping("/lista") - public List listaReceita(){ - - Ingrediente chocolate = new Ingrediente("Chocolate", 200, Medida.GRAMA); - Ingrediente farinha = new Ingrediente("Farinha", 500, Medida.GRAMA); - Ingrediente ovo = new Ingrediente("Ovos", 2, Medida.UNIDADE); - Ingrediente leite = new Ingrediente("Leite", 100, Medida.MILILITRO); - Ingrediente acucar = new Ingrediente("Açucar", 100, Medida.GRAMA); - - ingredienteRepository.save(chocolate); - ingredienteRepository.save(farinha); - ingredienteRepository.save(ovo); - ingredienteRepository.save(leite); - ingredienteRepository.save(acucar); - - - Receita brownie = new Receita("Brownie de Chocolate", - "https://img.estadao.com.br/fotos/crop/1200x1200/resources/jpg/7/0/1519841184607.jpg", - 40, 8, - "Em uma tigela coloque os ovos e o açúcar e bata com a ajuda de fouet ou garfo, em seguida adicione chocolate e depois adicione a farinha até que fique homogênea; Despeje a massa em uma forma untada e asse em forno pré-aquecido a 180ºC por 35 minutos.", - false, ingredienteRepository.findAll()); - - receitaRepository.save(brownie); - + public String listaReceita(Model model){ List receitas = receitaRepository.findByRevisarFalse(); - return ListaReceitaDto.converter(receitas); + model.addAttribute("receitas", ListaReceitaDto.converter(receitas)); + return "receitas/lista"; } @PostMapping @@ -80,14 +57,18 @@ public ResponseEntity cadastrar(@RequestBody @Valid ReceitaForm } @GetMapping("/detalhe/{id}") - public ResponseEntity detalhar(@PathVariable Long id) { + public String detalhar(@PathVariable Long id, Model model) { Optional receita = receitaRepository.findById(id); if (receita.isPresent()) { - return ResponseEntity.ok(new DetalheReceitaDto(receita.get())); + model.addAttribute("receita", new DetalheReceitaDto(receita.get())); + return "receitas/detalhe"; } - - return ResponseEntity.notFound().build(); + return "receitas/lista"; } + /* @ExceptionHandler(IllegalArgumentException.class) + public String onError() { + return "redirect:/lista"; + }*/ } diff --git a/src/main/java/br/com/codar/receitas/controller/dto/IngredienteDto.java b/src/main/java/br/com/codar/receitas/controller/dto/IngredienteDto.java index 3b6a02a..87139ba 100644 --- a/src/main/java/br/com/codar/receitas/controller/dto/IngredienteDto.java +++ b/src/main/java/br/com/codar/receitas/controller/dto/IngredienteDto.java @@ -14,5 +14,27 @@ public IngredienteDto(Ingrediente ingrediente) { this.medida = ingrediente.getMedida(); } + public String getNome() { + return nome; + } + + public void setNome(String nome) { + this.nome = nome; + } + + public Integer getQuantidade() { + return quantidade; + } + public void setQuantidade(Integer quantidade) { + this.quantidade = quantidade; + } + + public Medida getMedida() { + return medida; + } + + public void setMedida(Medida medida) { + this.medida = medida; + } } diff --git a/src/main/java/br/com/codar/receitas/controller/dto/ListaReceitaDto.java b/src/main/java/br/com/codar/receitas/controller/dto/ListaReceitaDto.java index 36a0fa9..9e81a39 100644 --- a/src/main/java/br/com/codar/receitas/controller/dto/ListaReceitaDto.java +++ b/src/main/java/br/com/codar/receitas/controller/dto/ListaReceitaDto.java @@ -2,7 +2,6 @@ import br.com.codar.receitas.model.Receita; -import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; @@ -25,7 +24,6 @@ public ListaReceitaDto(Receita receita){ this.dataPublicacao = receita.getDataPublicacao(); } - public Long getId() { return id; } diff --git a/src/main/java/br/com/codar/receitas/controller/form/ReceitaForm.java b/src/main/java/br/com/codar/receitas/controller/form/ReceitaForm.java index 6cb571c..f8d41df 100644 --- a/src/main/java/br/com/codar/receitas/controller/form/ReceitaForm.java +++ b/src/main/java/br/com/codar/receitas/controller/form/ReceitaForm.java @@ -19,9 +19,9 @@ public class ReceitaForm { @NotNull @NotEmpty private String nome; private String linkFoto; - @NotNull @NotEmpty @Min(10) @Max(360) + // @NotNull @NotEmpty @Min(10) @Max(360) private Integer tempoPreparo; - @NotNull @NotEmpty @Min(1) @Max(50) + //@NotNull @NotEmpty @Min(1) @Max(50) private Integer rendimento; @NotNull @NotEmpty @Length(min = 20) private String modoPreparo; @@ -29,10 +29,70 @@ public class ReceitaForm { @NotNull @NotEmpty private List ingredientes; + public ReceitaForm() { + } + + public String getNome() { + return nome; + } + + public void setNome(String nome) { + this.nome = nome; + } + + public String getLinkFoto() { + return linkFoto; + } + + public void setLinkFoto(String linkFoto) { + this.linkFoto = linkFoto; + } + + public Integer getTempoPreparo() { + return tempoPreparo; + } + + public void setTempoPreparo(Integer tempoPreparo) { + this.tempoPreparo = tempoPreparo; + } + + public Integer getRendimento() { + return rendimento; + } + + public void setRendimento(Integer rendimento) { + this.rendimento = rendimento; + } + + public String getModoPreparo() { + return modoPreparo; + } + + public void setModoPreparo(String modoPreparo) { + this.modoPreparo = modoPreparo; + } + + public Boolean getRevisar() { + return revisar; + } + + public void setRevisar(Boolean revisar) { + this.revisar = revisar; + } + + public List getIngredientes() { + return ingredientes; + } + + public void setIngredientes(List ingredientes) { + this.ingredientes = ingredientes; + } + public Receita converter(IngredienteRepository ingredienteRepository) { List listaIngredientes = new ArrayList<>(); this.ingredientes.forEach(i -> listaIngredientes.add(i.converter())); listaIngredientes.forEach(i -> ingredienteRepository.save(i)); return new Receita(this.nome, this.linkFoto, this.tempoPreparo, this.rendimento, this.modoPreparo, this.revisar, listaIngredientes); } + } diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql new file mode 100644 index 0000000..c9da074 --- /dev/null +++ b/src/main/resources/data.sql @@ -0,0 +1,29 @@ +INSERT INTO INGREDIENTES +(nome, quantidade, medida) +VALUES +('Chocolate', 200, 'GRAMA'), +('Farinha', 500, 'GRAMA'), +('Ovos', 2, 'UNIDADE'), +('Leite', 100, 'MILILITRO'), +('Açucar', 100, 'GRAMA'); + + +INSERT INTO RECEITAS +(nome, link_foto, tempo_preparo, rendimento, modo_preparo, +revisar, data_publicacao) +VALUES('Brownie de chocolate', +'https://img.estadao.com.br/fotos/crop/1200x1200/resources/jpg/7/0/1519841184607.jpg', +40, +8, +'Em uma tigela coloque os ovos e o açúcar e bata com a ajuda de fouet ou garfo, em seguida adicione chocolate e depois adicione a farinha até que fique homogênea; Despeje a massa em uma forma untada e asse em forno pré-aquecido a 180ºC por 35 minutos.', +FALSE, +CURRENT_TIMESTAMP); + +INSERT INTO RECEITAS_INGREDIENTES +(receita_id, ingredientes_id) +VALUES +(1,1), +(1,2), +(1,3), +(1,4), +(1,5); diff --git a/src/main/resources/templates/receitas/detalhe-receita.html b/src/main/resources/templates/receitas/detalhe.html similarity index 99% rename from src/main/resources/templates/receitas/detalhe-receita.html rename to src/main/resources/templates/receitas/detalhe.html index 5f14783..77007ab 100644 --- a/src/main/resources/templates/receitas/detalhe-receita.html +++ b/src/main/resources/templates/receitas/detalhe.html @@ -5,6 +5,7 @@ + diff --git a/src/main/resources/templates/receitas/nova.html b/src/main/resources/templates/receitas/nova.html index 1f981f1..bc88155 100644 --- a/src/main/resources/templates/receitas/nova.html +++ b/src/main/resources/templates/receitas/nova.html @@ -5,6 +5,33 @@ +
@@ -16,7 +43,8 @@
-
+ +