Skip to content

Commit

Permalink
feat: user makes suggestion
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasanchez committed May 27, 2021
1 parent ee99583 commit 4d102c8
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package quemepongo.excepcion.usuario;

/**
* Usuario no posee acceso al gurdarropa.
*
* @since 05.27.2021
* @version 1.0
*/
public class UsuarioSinAccesoAGuardarropaException extends RuntimeException {

/**
* Lanza una excepcion.
*
* @throws RuntimeException si el usuario no posee acceso al gurdarropa.
* @since Iteracion V
*/
public UsuarioSinAccesoAGuardarropaException() {
super("El usuario no posee acceso al guardarropas");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@

import java.util.HashMap;
import java.util.Map;
import quemepongo.excepcion.usuario.UsuarioSinAccesoAGuardarropaException;
import quemepongo.model.prenda.Prenda;
import quemepongo.model.usuario.guardarropa.Guardarropa;
import quemepongo.model.usuario.guardarropa.SugerenciaAgregar;
import quemepongo.model.usuario.guardarropa.SugerenciaGuardarropa;
import quemepongo.model.usuario.guardarropa.SugerenciaQuitar;

/**
* Usuario de Que me Pongo.
Expand Down Expand Up @@ -69,6 +74,54 @@ public Usuario agregarGuardarropaAjeno(Usuario usuario, String criterio) {
return this;
}

/**
* Sugiere aceptar una prenda
*
* @param guardarropa el guardarropas el cual sugerir.
* @param prenda la prenda sugerida
* @since Iteración V
*/
public void sugerirAgregar(Guardarropa guardarropa, Prenda prenda) {
sugerir(guardarropa, new SugerenciaAgregar(prenda));
}

/**
* Sugiere quitar una prenda
*
* @param guardarropa el guardarropas el cual sugerir.
* @param prenda la prenda sugerida
* @since Iteración V
*/
public void sugerirQuitar(Guardarropa guardarropa, Prenda prenda) {
sugerir(guardarropa, new SugerenciaQuitar(prenda));
}

/**
* Realiza una sugerencia.
*
* @param guardarropa el guardarropas el cual sugerir.
* @param prenda la prenda sugerida
* @since Iteración V
*/
private void sugerir(Guardarropa guardarropa, SugerenciaGuardarropa sugerencia) {
verificarAcceso(guardarropa);
guardarropa.recibirSugerencia(sugerencia);
}

/**
* Valida si se puede accedes al guardarropas.
*
* @param guardarropa el guardarropas el cuial validar.
* @throws UsuarioSinAccesoAGuardarropaException si no se le compartio el guardarropa
* @since Iteración V
*/
private void verificarAcceso(Guardarropa guardarropa) {
if (!guardarropasDeOtros.values().stream()
.anyMatch(guardarropas -> guardarropas.containsValue(guardarropa))) {
throw new UsuarioSinAccesoAGuardarropaException();
}
}

/**
* De no existir entrada para el usuario, la crea.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,23 @@ public class Guardarropa {
*
* @since Iteración V
*/
Map<Categoria, Set<Prenda>> prendas = new HashMap<Categoria, Set<Prenda>>();
private Map<Categoria, Set<Prenda>> prendas = new HashMap<Categoria, Set<Prenda>>();

/**
* ModificacionesAceptadas.
*
* @since Iteración V
*/
Set<SugerenciaGuardarropa> sugerenciasAceptadas = new LinkedHashSet<SugerenciaGuardarropa>();
private Set<SugerenciaGuardarropa> sugerenciasAceptadas =
new LinkedHashSet<SugerenciaGuardarropa>();

/**
* Prendas Sugeridas.
*
* @since Iteración V
*/
Set<SugerenciaGuardarropa> sugerenciasPendientes = new LinkedHashSet<SugerenciaGuardarropa>();
private Set<SugerenciaGuardarropa> sugerenciasPendientes =
new LinkedHashSet<SugerenciaGuardarropa>();

public Guardarropa() {

Expand All @@ -43,6 +47,47 @@ public Guardarropa() {
}
}

public Set<SugerenciaGuardarropa> getSugerencias() {
return this.sugerenciasPendientes;
}

/**
* Deshace las sugerencias aceptadas.
*
* @since Iteración V
*/
public void deshacerCambios() {
sugerenciasAceptadas.forEach(
sugerencia -> sugerencia.deshacerSugerencia(getPrendas(sugerencia.categoria())));
sugerenciasAceptadas.clear();
}

/**
* Acepta un cambio sugerido.
*
* @param sugerencia el cambio sugerido.
*/
public void aceptarSugerencia(SugerenciaGuardarropa sugerencia) {

sugerenciasPendientes.remove(sugerencia);
sugerencia.aceptarSugerencia(getPrendas(sugerencia.categoria()));
}

public Guardarropa recibirSugerencia(SugerenciaGuardarropa sugerencia) {
sugerenciasPendientes.add(sugerencia);
return this;
}

/**
* Obtiene las pendas de una categoria.
*
* @param categoria la categoria de la cual obtener
* @return una lista de prendas
*/
public Set<Prenda> getPrendas(Categoria categoria) {
return this.prendas.get(categoria);
}

/**
* Agrega una prenda al guardarropas.
*
Expand All @@ -52,7 +97,7 @@ public Guardarropa() {
*/
public Guardarropa agregarPrenda(Prenda prenda) {

Set<Prenda> prendasDeCategoria = prendas.get(prenda.categoria());
Set<Prenda> prendasDeCategoria = getPrendas(prenda.categoria());
prendasDeCategoria.add(prenda);

return this;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package quemepongo.model.usuario.guardarropa;

import java.util.Set;
import quemepongo.model.prenda.Categoria;
import quemepongo.model.prenda.Prenda;

/**
Expand Down Expand Up @@ -30,6 +31,10 @@ public void setCambioSugerido(Prenda cambioSugerido) {
this.cambioSugerido = cambioSugerido;
}

public Categoria categoria() {
return this.cambioSugerido.categoria();
}

/**
* Acepta los cambios de una sugerencia.
*
Expand Down

0 comments on commit 4d102c8

Please sign in to comment.