diff --git a/src/main/java/br/com/codar/receitas/controller/ReceitaController.java b/src/main/java/br/com/codar/receitas/controller/ReceitaController.java new file mode 100644 index 0000000..61e213c --- /dev/null +++ b/src/main/java/br/com/codar/receitas/controller/ReceitaController.java @@ -0,0 +1,51 @@ +package br.com.codar.receitas.controller; + +import java.util.List; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import br.com.codar.receitas.form.ReceitaForm; +import br.com.codar.receitas.modelo.Receita; +import br.com.codar.receitas.repository.ReceitaRepository; + +@Controller +@RequestMapping("/receitas") +public class ReceitaController { + + @Autowired + ReceitaRepository receitaRepository; + + @GetMapping("nova") + public String nova(ReceitaForm receitaForm) { + return "cadastro-receita"; + } + + @GetMapping("lista") + public String lista(Model model) { + List receitas = receitaRepository.findAllByOrderByDataPublicacaoDesc(); + model.addAttribute("receitas", receitas); + return "lista-receitas"; + } + + @PostMapping + public String salvar(@Valid ReceitaForm receitaForm, RedirectAttributes attributes) { + Receita receita = receitaRepository.save(receitaForm.converter()); + attributes.addFlashAttribute("sucesso", "Receita salva!"); + return "redirect:/receitas/nova"; + } + + @GetMapping("detalhe/{id}") + public String detalhe(@PathVariable Long id, Model model) { + model.addAttribute("receita", receitaRepository.findById(id).get()); + return "detalhe-receita"; + } +} \ No newline at end of file diff --git a/src/main/java/br/com/codar/receitas/form/ReceitaForm.java b/src/main/java/br/com/codar/receitas/form/ReceitaForm.java new file mode 100644 index 0000000..6ae8a68 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/form/ReceitaForm.java @@ -0,0 +1,104 @@ +package br.com.codar.receitas.form; + +import java.util.List; + +import javax.validation.Valid; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +import br.com.codar.receitas.modelo.Ingrediente; +import br.com.codar.receitas.modelo.Receita; + +public class ReceitaForm { + + @NotNull + @NotBlank + private String nome; + + private String linkFoto; + + @NotNull + @NotBlank + @Min(10) + @Max(360) + private Integer tempoPreparo; + + @NotNull + @NotBlank + @Min(1) + @Max(50) + private Integer rendimento; + + @NotNull + @NotBlank + @Min(20) + private String modoPreparo; + + @Valid + private List ingredientes; + + private Boolean revisar; + + 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 List getIngredientes() { + return ingredientes; + } + + public void setIngredientes(List ingredientes) { + this.ingredientes = ingredientes; + } + + public Boolean getRevisar() { + return revisar; + } + + public void setRevisar(Boolean revisar) { + this.revisar = revisar; + } + + public Receita converter() { + return new Receita(nome, linkFoto, tempoPreparo, rendimento, modoPreparo, ingredientes, revisar); + } + +} diff --git a/src/main/java/br/com/codar/receitas/modelo/Ingrediente.java b/src/main/java/br/com/codar/receitas/modelo/Ingrediente.java new file mode 100644 index 0000000..0506481 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/modelo/Ingrediente.java @@ -0,0 +1,75 @@ +package br.com.codar.receitas.modelo; + +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Entity +public class Ingrediente { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotNull + @NotBlank + private String nome; + + @Min(1) + @Max(1000) + private Integer quantidade; + + @NotNull + @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 void setId(Long id) { + this.id = id; + } + + 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/modelo/Medida.java b/src/main/java/br/com/codar/receitas/modelo/Medida.java new file mode 100644 index 0000000..5657fa1 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/modelo/Medida.java @@ -0,0 +1,8 @@ +package br.com.codar.receitas.modelo; + +public enum Medida { + + GRAMAS, + MILILITRO, + UNIDADE; +} diff --git a/src/main/java/br/com/codar/receitas/modelo/Receita.java b/src/main/java/br/com/codar/receitas/modelo/Receita.java new file mode 100644 index 0000000..4e6a87c --- /dev/null +++ b/src/main/java/br/com/codar/receitas/modelo/Receita.java @@ -0,0 +1,117 @@ +package br.com.codar.receitas.modelo; + +import java.time.LocalDateTime; +import java.util.List; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.OneToMany; + +@Entity +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; + + @OneToMany(cascade = CascadeType.ALL) + private List ingredientes; + + private Boolean revisar; + private LocalDateTime dataPublicacao = LocalDateTime.now(); + + public Receita() { + } + + public Receita(String nome, String linkFoto, Integer tempoPreparo, Integer rendimento, String modoPreparo, + List ingredientes, Boolean revisar) { + this.nome = nome; + this.linkFoto = linkFoto; + this.tempoPreparo = tempoPreparo; + this.rendimento = rendimento; + this.modoPreparo = modoPreparo; + this.ingredientes = ingredientes; + this.revisar = revisar; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + 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 List getIngredientes() { + return ingredientes; + } + + public void setIngredientes(List ingredientes) { + this.ingredientes = ingredientes; + } + + public Boolean getRevisar() { + return revisar; + } + + public void setRevisar(Boolean revisar) { + this.revisar = revisar; + } + + public LocalDateTime getDataPublicacao() { + return dataPublicacao; + } + + public void setDataPublicacao(LocalDateTime dataPublicacao) { + this.dataPublicacao = dataPublicacao; + } + +} 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..68c6d8a --- /dev/null +++ b/src/main/java/br/com/codar/receitas/repository/ReceitaRepository.java @@ -0,0 +1,15 @@ +package br.com.codar.receitas.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; + +import br.com.codar.receitas.modelo.Receita; + +public interface ReceitaRepository extends JpaRepository { + + Receita getById(); + + List findAllByOrderByDataPublicacaoDesc(); + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3469e0c..3940b9b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -8,3 +8,6 @@ spring.datasource.password=password spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update spring.jpa.database-platform=org.hibernate.dialect.H2Dialect + +spring.h2.console.enabled=true +spring.h2.console.path=/h2-console diff --git a/src/main/resources/templates/cadastro-receita.html b/src/main/resources/templates/cadastro-receita.html index 1f981f1..46fe681 100644 --- a/src/main/resources/templates/cadastro-receita.html +++ b/src/main/resources/templates/cadastro-receita.html @@ -16,7 +16,7 @@ -
+