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,78 @@
package br.com.codar.receitas.controller;


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.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import java.util.Optional;

import javax.validation.Valid;

import br.com.codar.receitas.controller.form.IngredienteForm;
import br.com.codar.receitas.controller.form.ReceitaForm;
import br.com.codar.receitas.model.Receita;

@Controller
@RequestMapping("/receitas")
public class ReceitaController {
private final ModelAndView modelAndView = new ModelAndView("cadastro-receita");
private final ReceitaRepository receitaRepository;

public ReceitaController(final ReceitaRepository receitaRepository) {
this.receitaRepository = receitaRepository;
}

@GetMapping("/lista")
public String lista(final Model model) {
Iterable<Receita> receitas = receitaRepository.findAll();

model.addAttribute("receitas", receitas);

return "lista-receitas";

}

@GetMapping
public ModelAndView nova() {
return modelAndView;
}

@GetMapping("/nova")
public String nova(final Model model) {
model.addAttribute("receitaForm", new ReceitaForm());
model.addAttribute("ingredienteForm", new IngredienteForm());
return "cadastro-receita";
}

@RequestMapping(method = RequestMethod.POST)
public String salvar(@Valid final ReceitaForm receitaForm, final BindingResult result, final Model model) {
if (result.hasErrors()){
model.addAttribute(new IngredienteForm());
return "cadastro-receita";
}
Receita receita = receitaForm.converte();
receitaRepository.save(receita);
String sucesso = "Salvo com sucesso";
receitaForm.limparCampos();
model.addAttribute("sucesso", sucesso);
model.addAttribute("receitaForm", receitaForm);
return "cadastro-receita";

}

@GetMapping("/detalhe/{id}")
public ModelAndView detalhe(@PathVariable("id") final Long id) {
Optional<Receita> receita = receitaRepository.findById(id);
ModelAndView modelAndView = new ModelAndView("detalhe-receita");
modelAndView.addObject("receita", receita.orElse(null));
return modelAndView;

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package br.com.codar.receitas.controller;

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<Receita, Long> {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package br.com.codar.receitas.controller.form;

import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.NotEmpty;

public class IngredienteForm {

private Long id;
@NotEmpty(message = "Informe o nome do ingrediente")
private String nomeIngrediente;

@Range(min = 1, max = 1000, message = "A quantidade deve ser informada entre 1 a 1000")
private Integer quantidade;
@NotEmpty(message = "Selecione uma medida")
private String medida;


public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getNomeIngrediente() {
return nomeIngrediente;
}

public void setNomeIngrediente(String nomeIngrediente) {
this.nomeIngrediente = nomeIngrediente;
}

public Integer getQuantidade() {
return quantidade;
}

public void setQuantidade(Integer quantidade) {
this.quantidade = quantidade;
}

public String getMedida() {
return medida;
}

public void setMedida(String medida) {
this.medida = medida;
}


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

import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;

import java.util.ArrayList;
import java.util.List;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import br.com.codar.receitas.model.Ingrediente;
import br.com.codar.receitas.model.Receita;

public class ReceitaForm {

private Long id;
@NotEmpty(message = "Informe o nome da receita")
@Length(min = 5, max = 20)
private String nome;

private String linkFoto;
@NotNull(message = "Informe o tempo de preparo")
@Range(min = 10, max = 360)

private Integer tempoPreparo;
@NotNull(message = "Informe o Rendimento")
@Range(min = 1, max = 50)
private Integer rendimento;

@NotNull(message = "Informe o modo de preparo")
@Length(min = 10, max = 360)
private String modoPreparo;

@Size(min = 1, message = "A receita deve conter pelo menos um ingrediente")
private List<Ingrediente> ingredientes = new ArrayList<>();

private Boolean 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 Boolean getRevisar() {
return revisar;
}

public List<Ingrediente> getIngredientes() {
return ingredientes;
}

public void setIngredientes(List<Ingrediente> ingredientes) {
this.ingredientes = ingredientes;
}

public void setRevisar(Boolean revisar) {
this.revisar = revisar;
}

public Receita converte() {
return new Receita(id, nome, linkFoto, tempoPreparo, rendimento, ingredientes, modoPreparo, revisar);
}

public void limparCampos(){
this.nome = "";
this.linkFoto = "";
this.tempoPreparo = 0;
this.rendimento = 0;
this.ingredientes.clear();
this.modoPreparo = "";
this.revisar = true;
}


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

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class Ingrediente {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private Integer quantidade;
private String medida;

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "receita_id")
private Receita receita;

public Ingrediente(String nome, Integer quantidade, String medida) {
this.nome = nome;
this.quantidade = quantidade;
this.medida = medida;
}

public Ingrediente() {

}

public Ingrediente(Long id, String nome, Integer quantidade, Receita receita) {

this.id = id;
this.nome = nome;
this.quantidade = quantidade;
this.receita = receita;

}

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 String getMedida() {
return medida;
}

public void setMedida(String medida) {
this.medida = medida;
}

public Receita getReceita() {
return receita;
}

public void setReceita(Receita receita) {
this.receita = receita;
}

}

Loading