diff --git a/pom.xml b/pom.xml index f4e27e4..cbd24eb 100644 --- a/pom.xml +++ b/pom.xml @@ -33,6 +33,10 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-devtools + com.h2database diff --git a/src/main/java/br/com/codar/receitas/controller/HomeController.java b/src/main/java/br/com/codar/receitas/controller/HomeController.java new file mode 100644 index 0000000..1eaebe2 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/controller/HomeController.java @@ -0,0 +1,13 @@ +package br.com.codar.receitas.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class HomeController { + + @GetMapping("/") + public String home() { + return "Ola mundo"; + } +} 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..14803ef --- /dev/null +++ b/src/main/java/br/com/codar/receitas/controller/ReceitaController.java @@ -0,0 +1,58 @@ +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.validation.BindingResult; +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.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import br.com.codar.receitas.dto.RequisicaoNovaReceita; +import br.com.codar.receitas.model.Receita; +import br.com.codar.receitas.repository.ReceitaRepository; + +@Controller +@RequestMapping("receitas") +public class ReceitaController { + + @Autowired + private ReceitaRepository receitaRepository; + + @GetMapping("nova") + public String formulario(RequisicaoNovaReceita requisicaoNovaReceita) { + return "cadastro-receita"; + } + + @GetMapping("lista") + public String listar(Model model) { + List receitas = receitaRepository.findAll(); + model.addAttribute("receitas", receitas); + return "lista-receitas"; + } + + @PostMapping + public String salvar(@Valid RequisicaoNovaReceita requisicaoNovaReceita, BindingResult result, RedirectAttributes attributes) { + if (result.hasErrors()) { + return "cadastro-receita"; + } + Receita receita = requisicaoNovaReceita.toReceita(); + receitaRepository.save(receita); + attributes.addFlashAttribute("sucesso", "Receita salva com sucesso!"); + return "redirect:receitas/lista"; + } + + @GetMapping("detalhe/{id}") + public String detalhe(@PathVariable(value = "id") Long id, Model model) { + model.addAttribute("receita", receitaRepository.findById(id).get()); + return "detalhe-receita"; + } + +} diff --git a/src/main/java/br/com/codar/receitas/dto/RequisicaoNovaReceita.java b/src/main/java/br/com/codar/receitas/dto/RequisicaoNovaReceita.java new file mode 100644 index 0000000..a6d2991 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/dto/RequisicaoNovaReceita.java @@ -0,0 +1,97 @@ +package br.com.codar.receitas.dto; + +import java.util.List; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +import br.com.codar.receitas.model.Ingredientes; +import br.com.codar.receitas.model.Receita; + +public class RequisicaoNovaReceita { + + @NotBlank + private String nome; + + private String linkFoto; + + @NotNull @Min(10) @Max(360) + private int tempoPreparo; + + @NotNull @Min(1) @Max(50) + private int rendimento; + + @NotEmpty + private List ingredientes; + + @NotBlank @Size(min = 20) + private String modoPreparo; + private Boolean precisaRevisar; + + public Receita toReceita() { + return new Receita(nome, linkFoto, tempoPreparo, rendimento, ingredientes, modoPreparo, precisaRevisar); + } + + 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 int getTempoPreparo() { + return tempoPreparo; + } + + public void setTempoPreparo(int tempoPreparo) { + this.tempoPreparo = tempoPreparo; + } + + public int getRendimento() { + return rendimento; + } + + public void setRendimento(int rendimento) { + this.rendimento = rendimento; + } + + public String getModoPreparo() { + return modoPreparo; + } + + public void setModoPreparo(String modoPreparo) { + this.modoPreparo = modoPreparo; + } + + public Boolean getPrecisaRevisar() { + return precisaRevisar; + } + + public void setPrecisaRevisar(Boolean precisaRevisar) { + this.precisaRevisar = precisaRevisar; + } + + public List getIngredientes() { + return ingredientes; + } + + public void setIngredientes(List ingredientes) { + this.ingredientes = ingredientes; + } + + + +} diff --git a/src/main/java/br/com/codar/receitas/model/Ingredientes.java b/src/main/java/br/com/codar/receitas/model/Ingredientes.java new file mode 100644 index 0000000..a592eb4 --- /dev/null +++ b/src/main/java/br/com/codar/receitas/model/Ingredientes.java @@ -0,0 +1,70 @@ +package br.com.codar.receitas.model; + +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.persistence.ManyToOne; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@Entity +public class Ingredientes { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @NotNull @NotEmpty + private String nome; + @Min(1) @Max(1000) + private int quantidade; + + @ManyToOne + private Receita receita; + + @NotNull + @Enumerated(EnumType.STRING) + private Medida medida; + + public Ingredientes() { + + } + + public Ingredientes(String nome, int quantidade, Medida medida) { + setNome(nome); + setQuantidade(quantidade); + setMedida(medida); + } + + + public String getNome() { + return nome; + } + + public void setNome(String nome) { + this.nome = nome; + } + + public int getQuantidade() { + return quantidade; + } + + public void setQuantidade(int 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/model/Medida.java b/src/main/java/br/com/codar/receitas/model/Medida.java new file mode 100644 index 0000000..8c17411 --- /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..721832d --- /dev/null +++ b/src/main/java/br/com/codar/receitas/model/Receita.java @@ -0,0 +1,121 @@ +package br.com.codar.receitas.model; + +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 int tempoPreparo; + private int rendimento; + private LocalDateTime dataPublicacao = LocalDateTime.now(); + private String modoPreparo; + private Boolean precisaRevisar; + + @OneToMany(mappedBy = "receita") + private List ingredientes; + + public Receita() { + + } + + public Receita(String nome, String linkFoto, int tempoPreparo, int rendimento, List ingredientes, String modoPreparo, + Boolean precisaRevisar) { + setNome(nome); + setLinkFoto(linkFoto); + setTempoPreparo(tempoPreparo); + setRendimento(rendimento); + setIngrediente(ingredientes); + setModoPreparo(modoPreparo); + setPrecisaRevisar(precisaRevisar); + } + + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public List getIngredientes() { + return ingredientes; + } + + public void setIngredientes(List ingredientes) { + this.ingredientes = ingredientes; + } + + 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 int getTempoPreparo() { + return tempoPreparo; + } + public void setTempoPreparo(int tempoPreparo) { + this.tempoPreparo = tempoPreparo; + } + public int getRendimento() { + return rendimento; + } + public void setRendimento(int rendimento) { + this.rendimento = rendimento; + } + public LocalDateTime getDataPublicacao() { + return dataPublicacao; + } + public void setDataPublicacao(LocalDateTime dataPublicacao) { + this.dataPublicacao = dataPublicacao; + } + + public String getModoPreparo() { + return modoPreparo; + } + + public void setModoPreparo(String modoPreparo) { + this.modoPreparo = modoPreparo; + } + + public List getIngrediente() { + return ingredientes; + } + + public void setIngrediente(List ingredientes) { + this.ingredientes = ingredientes; + } + + public Boolean getPrecisaRevisar() { + return precisaRevisar; + } + + public void setPrecisaRevisar(Boolean precisaRevisar) { + this.precisaRevisar = precisaRevisar; + } + + + +} 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..6cdea4c --- /dev/null +++ b/src/main/java/br/com/codar/receitas/repository/ReceitaRepository.java @@ -0,0 +1,13 @@ +package br.com.codar.receitas.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import br.com.codar.receitas.model.Receita; + +@Repository +public interface ReceitaRepository extends JpaRepository { + List findAllByOrderByDataPublicacaoDesc(); +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3469e0c..66f5e39 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -8,3 +8,5 @@ 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.path=/h2-console diff --git a/src/main/resources/templates/cadastro-receita.html b/src/main/resources/templates/cadastro-receita.html index 1f981f1..4fc5e2a 100644 --- a/src/main/resources/templates/cadastro-receita.html +++ b/src/main/resources/templates/cadastro-receita.html @@ -16,7 +16,7 @@ -
+
- +