na classe LeilaoBuilder nao existe o metodo comLance, Devo cria-lo?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
na classe LeilaoBuilder nao existe o metodo comLance, Devo cria-lo?
Não existe uma classe LanceDao tambem
Oi , Ana!
Realmente não existe o método "comLance" na classe LeilaoBuilder. O exemplo apenas mostrou um forma "elegante" de adicionar os lances no leilão.
A classe LanceDao não precisa ser criada porque a classe Leilão já gerencia a persistência dos lances com o Hibernate.
@OneToMany(cascade=CascadeType.ALL, orphanRemoval=true, mappedBy="leilao") private List lances;
Olá Ana.
Caso deseje implementar, segue uma solução simples
public class LeilaoBuilder {
private Usuario dono;
private double valor;
private String nome;
private boolean usado;
private Calendar dataAbertura;
private boolean encerrado;
private List<Lance> lances;
public LeilaoBuilder() {
this.dono = new Usuario("Joao da Silva", "joao@silva.com.br");
this.valor = 1500.0;
this.nome = "XBox";
this.usado = false;
this.dataAbertura = Calendar.getInstance();
this.lances = new ArrayList<>();
}
public LeilaoBuilder comDono(Usuario dono) {
this.dono = dono;
return this;
}
public LeilaoBuilder comValor(double valor) {
this.valor = valor;
return this;
}
public LeilaoBuilder comNome(String nome) {
this.nome = nome;
return this;
}
public LeilaoBuilder usado() {
this.usado = true;
return this;
}
public LeilaoBuilder encerrado() {
this.encerrado = true;
return this;
}
public LeilaoBuilder diasAtras(int dias) {
Calendar data = Calendar.getInstance();
data.add(Calendar.DAY_OF_MONTH, -dias);
this.dataAbertura = data;
return this;
}
public Leilao constroi() {
Leilao leilao = new Leilao(nome, valor, dono, usado);
leilao.setDataAbertura(dataAbertura);
if (encerrado) {
leilao.encerra();
}
for(Lance lance : lances){
lance.setLeilao(leilao);
leilao.adicionaLance(lance);
}
return leilao;
}
public LeilaoBuilder comLance(Calendar data, Usuario dono, double valor){
lances.add(new Lance(dataAbertura, dono, valor, null));
return this;
}
}
Pessoal, construí o teste usando o que o código já disponibilizava e ficou dessa forma:
@Test
public void deveRetornarLeilaoNaoEncerradoComMaisDeTresLancesEntreValor() {
Usuario fulano = new Usuario("Fulano de Tal", "fulano@email.com");
Usuario beltrano = new Usuario("Beltrano Silva", "beltrano@email.com");
Usuario ciclano = new Usuario("Ciclano Costa", "ciclano@email.com");
usuarioDao.salvar(fulano);
usuarioDao.salvar(beltrano);
usuarioDao.salvar(ciclano);
Leilao leilao1 = new LeilaoBuilder().comNome("Playstation").comDono(fulano).comValor(1200.0).build();
Lance lanceGame1 = new Lance(Calendar.getInstance(), beltrano, 1250.0, leilao1);
Lance lanceGame2 = new Lance(Calendar.getInstance(), ciclano, 1300.0, leilao1);
Lance lanceGame3 = new Lance(Calendar.getInstance(), beltrano, 1400.0, leilao1);
Lance lanceGame4 = new Lance(Calendar.getInstance(), ciclano, 1499.0, leilao1);
leilao1.adicionaLance(lanceGame1);
leilao1.adicionaLance(lanceGame2);
leilao1.adicionaLance(lanceGame3);
leilao1.adicionaLance(lanceGame4);
// leilao sem lances
Leilao leilao2 = new LeilaoBuilder().comNome("Smartphone").comDono(fulano).comValor(799.0).build();
// leilao com lances mas encerrado
Leilao leilao3 = new LeilaoBuilder().comNome("TV Led").comDono(fulano).comValor(1999.0).encerrado().build();
Lance lanceTv1 = new Lance(Calendar.getInstance(), beltrano, 2250.0, leilao3);
Lance lanceTv2 = new Lance(Calendar.getInstance(), ciclano, 2300.0, leilao3);
Lance lanceTv3 = new Lance(Calendar.getInstance(), beltrano, 2400.0, leilao3);
Lance lanceTv4 = new Lance(Calendar.getInstance(), ciclano, 2499.0, leilao3);
leilao3.adicionaLance(lanceTv1);
leilao3.adicionaLance(lanceTv2);
leilao3.adicionaLance(lanceTv3);
leilao3.adicionaLance(lanceTv4);
leilaoDao.salvar(leilao1);
leilaoDao.salvar(leilao2);
leilaoDao.salvar(leilao3);
List<Leilao> leiloes = leilaoDao.disputadosEntre(1000.0, 1500.0);
assertEquals(1, leiloes.size());
}
Espero que ajude. =)