Skip to content

Commit

Permalink
feat(it-6): add suggestions
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasanchez committed Jun 8, 2021
1 parent 7016d1d commit 78ac0d8
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import quemepongo.model.atuendo.Atuendo;
import quemepongo.model.prenda.Categoria;
import quemepongo.model.prenda.Prenda;
import quemepongo.service.clima.ServicioMetereologico;
import quemepongo.service.prenda.guardarropa.SugerenciasDeGuardarropa;

/**
* Guardarropa, repositorio de Prendas.
Expand Down Expand Up @@ -36,21 +39,40 @@ public class Guardarropa {
*/
private Set<Tentativa> tentativasPendientes = new LinkedHashSet<Tentativa>();

public Guardarropa() {
/**
* Servicio Meteorologico.
*
* @since Iteración IV
*/
private ServicioMetereologico servicioMetereologico;

Categoria[] categorias = Categoria.values();
/**
* Servicio de Sugerencias de Atuendos.
*
* @since Iteración VI
*/
private SugerenciasDeGuardarropa servicioDeSugerencias;

for (Categoria categoria : categorias) {
prendas.put(categoria, new LinkedHashSet<Prenda>());
}
public Guardarropa() {
initPrendas();
initServicios();
}

public Set<Tentativa> getTentativas() {
return this.tentativasPendientes;
}

/**
* Dice si posee una prenda
* Sugiere un Atuendo segun condiciones climaticas actuales.
*
* @return un atuendo.
*/
public Atuendo sugerirAtuendo() {
return servicioDeSugerencias.sugerirAtuendo();
}

/**
* Dice si posee una prenda.
*
* @param prenda la prenda que buscar
* @return si la posee o no
Expand Down Expand Up @@ -111,4 +133,18 @@ public Guardarropa agregarPrenda(Prenda prenda) {

return this;
}

private void initPrendas() {
Categoria[] categorias = Categoria.values();

for (Categoria categoria : categorias) {
prendas.put(categoria, new LinkedHashSet<Prenda>());
}
}

private void initServicios() {
this.servicioMetereologico = ServicioMetereologico.defaultService();
this.servicioDeSugerencias =
new SugerenciasDeGuardarropa(this.prendas, this.servicioMetereologico);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package quemepongo.service.clima;

import quemepongo.api.clima.accuweather.AccuWeatherAdapter;
import quemepongo.model.clima.CondicionClimatica;

/**
Expand All @@ -17,4 +18,13 @@ public interface ServicioMetereologico {
* @return entrega una lista con el clima de las próximas 12 horas en un diccionario.
*/
CondicionClimatica getCondicionClimatica(String localidad);

/**
* Obtiene el servicio meteorologico actual.
*
* @return el serivicio por default
*/
static ServicioMetereologico defaultService() {
return new AccuWeatherAdapter();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package quemepongo.service.prenda.guardarropa;

import java.util.Map;
import java.util.Optional;
import java.util.Set;
import quemepongo.model.atuendo.Atuendo;
import quemepongo.model.atuendo.Conjunto;
import quemepongo.model.clima.Clima;
import quemepongo.model.clima.CondicionClimatica;
import quemepongo.model.prenda.Categoria;
import quemepongo.model.prenda.Prenda;
import quemepongo.service.clima.ServicioMetereologico;

/**
* Sugerencias de Atuendos
*/
public class SugerenciasDeGuardarropa {

/**
* Prendas categorizadas.
*
* @since Iteración VI
*/
private Map<Categoria, Set<Prenda>> prendas;

/**
* Prendas categorizadas.
*
* @since Iteración IV
*/
private ServicioMetereologico pronostico = ServicioMetereologico.defaultService();

private CondicionClimatica condicionesClimaticas;

public SugerenciasDeGuardarropa(Map<Categoria, Set<Prenda>> prendas,
ServicioMetereologico pronostico) {
this.prendas = prendas;
this.pronostico = pronostico;
setCondicionClimatica();
}

public Atuendo sugerirAtuendo() {
return new Atuendo(sugerirConjuntoSegunClima());
}

private Conjunto sugerirConjuntoSegunClima() {
Clima clima = condicionesClimaticas.getClima();
return new Conjunto(sugerirPrenda(Categoria.SUPERIOR, clima),
sugerirPrenda(Categoria.INFERIOR, clima), sugerirPrenda(Categoria.CALZADO, clima),
sugerirPrenda(Categoria.ACCESORIOS, clima));
}

private SugerenciasDeGuardarropa setCondicionClimatica() {
this.condicionesClimaticas = pronostico.getCondicionClimatica("Buenos Aires");
return this;
}

/**
* Busca una Prenda segun el clima.
*
* @param categoria la categoria de la prenda a buscar
* @return una prenda apta para el clima
*/
private Prenda sugerirPrenda(Categoria categoria, Clima clima) {

Set<Prenda> prendasDeCategoria = prendas.get(categoria);
Optional<Prenda> prenda =
prendasDeCategoria.stream().filter(p -> p.getTipo().aptoClima(clima)).findAny();

return prenda.isPresent() ? prenda.get() : null;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package quemepongo.service.clima;

import org.junit.jupiter.api.Test;

public class ServicioMetereologicoTest {

@Test
void testGetCondicionClimatica() {

}
}

0 comments on commit 78ac0d8

Please sign in to comment.