Proyecto Java EE
 

Sprint Web

Introducción

El objetivo de este Sprint es refactorizar la aplicación, añadir nuevos casos de uso, prácticar un poco de I+D y reforzar los contenidos de los módulos de Componentes Web y JPA. Para ello se va a añadir parte de la funcionalidad explicada en la 1ª sesión de Caso de Estudio, centrándonos en el punto de vista del socio (alumno o profesor).

Todo ello dándole importancia a la limpieza del código, minimizando la redundancia del mismo y favoreciendo los principios de bajo acoplamiento y alta cohesión.

Así pues, partiremos de la solución del proyecto de Componentes Web, pero sin tocar nada del proyecto REST.

Funcionalidades a Desarrollar

Lo primero que haremos será darle un lavado de cara al interfaz de usuario, refactorizando la página de login e introduciendo algunas imágenes que mejorar la apariencia de la aplicación.

Login

Para entrar a la aplicación se nos presenta una página de login , la cual debe comprobar el rol del usuario y redirigirlo a su mini-site particular. Es importante considerar a los usuarios que puedan tener multas o sean morosos , ya que no deberán poder realizar ninguna acción.

Seguridad Declarativa
Tal como tenemos la aplicación, la página de login no permite el uso de hojas de estilo al estar nuestra hoja dentro de la parte protegida de la aplicación. Por lo tanto, hay que modificar el esquema de seguridad para proteger solo cierta parte de la webapp, no toda.

Independientemente del tipo de usuario, se mostrará una cabecera con información respecto al usuario conectado y el rol de dicho usuario.

Login, datos y tipos de usuario
Para que la aplicación pueda decidir hacía que vista redirigir al entrar a la aplicación (dependiendo de si el usuario es activo o moroso/multado), necesitamos un Servlet previo al listado de libros. En este Servlet, además, podremos obtener el rol del usuario y meterlo en la sesión

Operaciones

Cuando un usuario entra a la aplicación, se le mostrará un listado con todos los libros, mostrando la cantidad de ejemplares disponibles, y las operaciones que puede realizar el usuario sobre dicho libro (de momento reservar un libro o elegir el ejemplar sobre el que realizar el préstamo).

Además, la aplicación ofrece un par de listados que permitirán mostrar tantos los ejemplares prestados que tiene un usuario como los libros que tiene reservados; se entiende que solo se van a mostrar las operaciones activas , las visualización de las operaciones históricas sale fuera del alcance de esta sesión.

Dependiendo del estado del libro/ejemplar, el usuario podrá realizar las siguientes operaciones.

  • Préstamo de un ejemplar . Operación ya realizada en sesiones anteriores.
  • Reserva de un libro . Cuando un libro no disponga ningún ejemplar disponible, el usuario podrá realizar una reserva del libro siempre y cuando el usuario este Activo y tenga hueco en su cupo de operaciones. Además, debemos comprobar que un usuario no pueda realizar más de una reserva sobre el mismo libro.
  • Anular la reserva de un libro . Sobre las reservas que tiene un usuario, o sobre una reserva que se acaba de realizar, se le permitirá al usuario cancelar la misma. En este caso, la reserva pasará a Histórica con un tipo de finalización de Cancelado .
  • Anular un préstamo que esté en Sala . Cuando se ha realizado un préstamo de un ejemplar, y éste todavía no ha sido recogido por el usuario y esté pendiente de recoger, se podrá anular la operación. Así pues, se creará un PrestamoHistorico y dependiendo de si el libro tenía alguna reserva previa, pasaremos la reserva Histórica con un tipo de finalización de Finalizado , creando un nuevo préstamo con el usuario de la reserva. Si el libro no tenía ninguna reserva, se liberará el libro de modo que haya un ejemplar más disponible.

A Entregar

Para facilitar la labor de compresión de la funcionalidad y el flujo de navegación, se ha colgado un solución "no testeada" en server.jtech.ua.es/jbib-web.

El sprint tiene una calificación máxima de 10 puntos, repartidos de la siguiente manera:

  • Calidad del código: limpieza, bajo acoplamiento, alta cohesión (2 ptos)
  • Login y cabecera de la aplicación (2 pto)
  • Casos de Uso (6 ptos)
    • Reserva de un libro (2 pto)
    • Anular reserva (2 pto)
    • Cancelación de un préstamo (2 ptos)

Si la sesón hubiese sido más larga, podríamos haber realizado las siguentes cuestiones:

  • Mostrar los libros que tiene que devolver un usuario moroso.
  • Mostrar la fecha de finalización de la multa de un usuario multado.
  • Los errores que se muestran al usuario deberían ser más amigables.
  • Mostrar el cupo de operaciones de un usuario en la cabecera, para que sepa cuantas tiene activas y su tipo, y cuantas puede realizar.
  • Realizar un buscador de libros.
  • Envío de un mail al producirse cualquier prestamo/reserva y sus correspondientes anulaciones.

En futuras sesiones trataremos la caducidad de los préstamos de manera automática, de modo que el estado de un usuario pase a Moroso si no ha devuelto el ejemplar a tiempo, a no ser que el ejemplar siguiese en la sala y se anularía el préstamo sin consecuencias para el usuario.

Recordar que la fecha de entrega es el 17 de Enero y que el proyecto se realiza por parejas. . Para la entrega utilizad la etiqueta entrega-sprint . Si no entregais en plazo, usad la etiqueta entrega-sprint-prorroga