Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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<Receita> 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";
}
}
104 changes: 104 additions & 0 deletions src/main/java/br/com/codar/receitas/form/ReceitaForm.java
Original file line number Diff line number Diff line change
@@ -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<Ingrediente> 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<Ingrediente> getIngredientes() {
return ingredientes;
}

public void setIngredientes(List<Ingrediente> 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);
}

}
75 changes: 75 additions & 0 deletions src/main/java/br/com/codar/receitas/modelo/Ingrediente.java
Original file line number Diff line number Diff line change
@@ -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;
}

}
8 changes: 8 additions & 0 deletions src/main/java/br/com/codar/receitas/modelo/Medida.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package br.com.codar.receitas.modelo;

public enum Medida {

GRAMAS,
MILILITRO,
UNIDADE;
}
117 changes: 117 additions & 0 deletions src/main/java/br/com/codar/receitas/modelo/Receita.java
Original file line number Diff line number Diff line change
@@ -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<Ingrediente> ingredientes;

private Boolean revisar;
private LocalDateTime dataPublicacao = LocalDateTime.now();

public Receita() {
}

public Receita(String nome, String linkFoto, Integer tempoPreparo, Integer rendimento, String modoPreparo,
List<Ingrediente> 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<Ingrediente> getIngredientes() {
return ingredientes;
}

public void setIngredientes(List<Ingrediente> 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;
}

}
Original file line number Diff line number Diff line change
@@ -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, Long> {

Receita getById();

List<Receita> findAllByOrderByDataPublicacaoDesc();

}
3 changes: 3 additions & 0 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion src/main/resources/templates/cadastro-receita.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
</nav>
</header>

<form th:action="@{/receitas}" th:object="${receita}" method="post" class="container content">
<form th:action="@{/receitas}" th:object="${receitaForm}" method="post" class="container content">

<div th:if="${sucesso}" class="alert alert-success alert-dismissible fade show" role="alert">
<p class="m-0" th:text="${sucesso}"></p>
Expand Down