ObligatoriosObligatorio 1UMLGenerados (IAG)UML Generados

Se tratan de diagramas basados en los recursos cargados (No deben de tomarse en cuenta para diseño final)

Diagramas de caso de uso

left to right direction
skinparam packageStyle rectangle

actor "Usuario Anónimo" as user

rectangle "HayPlan! - Cartelera de Espectáculos" {
  usecase "Visualizar Catálogo de Actividades" as UC1
  usecase "Ver Detalle de Actividad" as UC2
  usecase "Filtrar Cartelera (gratis/zona/horario)" as UC3
  usecase "Configurar Preferencias (categorías favoritas)" as UC4
  usecase "Explorar 'MicroAventuras' / '¿Qué hago ahora?'" as UC5
  usecase "Consultar Mapa de Lugar" as UC6
  usecase "Guardar Preferencias Locally" as UC7
}

user --> UC1
user --> UC4
user --> UC5

UC1 ..> UC2 : <<include>>
UC1 <.. UC3 : <<extend>>
UC2 ..> UC6 : <<include>>
UC4 ..> UC7 : <<include>>
UC5 ..> UC2 : <<include>>

note right of UC7
  Almacenado en 
  localStorage
  del navegador.
end note

@enduml

Diagrama de Clases (Modelo de dominio / Estatico)

@startuml
skinparam classAttributeIconSize 0

class Actividad {
  - id : String
  - nombre : String
  - descripcion : String
  - horario : String
  - lugar_nombre : String
  - costo_detallado : String
  - latitud : Float
  - longitud : Float
  - imagenUrl : String
  + obtenerFichaCompleta() : Actividad
  + esAbiertoAhora() : Boolean
  + esGratis() : Boolean
}

class Categoria {
  - id : String
  - nombre : String
  - iconoUrl : String
}

class MicroAventura {
  - duracionEstimadaMin : Integer
  - nivelDificultad : String
  + obtenerDetallesMicro() : MicroAventura
}

Actividad <|-- MicroAventura
Actividad "*" -- "1..*" Categoria : pertenece a

note right of Actividad
  Detalles mínimos exigidos:
  horario, lugar, costo.
end note

class PreferenciasUsuario {
  - categoriasFavoritas : List<String>
  - zonaDeInteres : String
  - presupuestoMaximo : Float
  + guardarEnLocalStorage() : void
  + cargarDesdeLocalStorage() : PreferenciasUsuario
}

PreferenciasUsuario ..> Categoria : depende de (ids)
PreferenciasUsuario ..> Actividad : usa para filtrar por zona/costo

@enduml

Diagrama de actvidad

@startuml
start

:Usuario carga la cartelera inicial;
:Sistema lee 'preferencias' del localStorage;
if (¿Existen preferencias guardadas?) then ()
  :Filtrar actividades por categorías favoritas;
else (No)
  :Cargar cartelera completa (por defecto);
endif
:Mostrar Cartelera Actual;

repeat
  :Usuario abre panel de filtros;
  :Usuario selecciona 'Abierto Ahora' = Sí;
  :Usuario selecciona Categoría = 'Cine';
  :Aplicar Filtros Combinados;
  
  if (¿Existen actividades que coincidan?) then ()
    :Generar lista de resultados filtrados;
  else (No)
    :Mostrar mensaje "No se encontraron planes para este criterio";
    :Usuario decide qué hacer;
    if (¿Volver a filtrar?) then ()
      :Regresar al panel de filtros;
    else (No)
      :Mostrar Cartelera Principal;
    endif
  endif
repeat while (Usuario sigue interactuando con filtros)

:Mostrar Resultados Finales;

stop
@enduml
Built with LogoFlowershow