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 @@
-