Objetivo
El objetivo de esta entrega es que los alumnos se acostumbren con la utilización de Maven como herramienta para gestionar el proceso de desarrollo, y TDD para orientar la implementación a las pruebas. Los alumnos deben utilizar el testeo unitario y prácticas de TDD para demostrar la completitud de los requerimientos a cubrir en esta entrega.
Requerimientos
Se debe poder crear un evento, cada evento debe tener una fecha, duración y una descripción, además puede contener información sobre la ubicación.
Debe existir la entidad usuario, esta entidad va a tener asociados los datos básicos del usuario.
Un usuario debe poder agregarse a un evento.
Un usuario debe poder cancelar su subscripción a un evento, solo si el evento no ocurrió.
Un usuario puede consultar todos los eventos a los cuales tiene una subscripción, tanto eventos pasados y los que estan por pasar.
A partir de un evento, se debe poder consultar todos los usuarios que estan subscriptos a dicho evento.
Existe un tipo especial de usuario, que puede realizar todas las tareas sobre un determinado usuario; los usuarios comunes solo pueden modificar sus propias subscripciones.
Se debe poder registrar la real asistencia de un usuario a un determinado evento.
Un usuario puede agregar comentarios a un determinado evento.
Notas
Se deben proveer distintos tests que validen cada uno de los requerimientos de la entrega.
Además del código de negocio y los tests, se debe proveer documentación aclaratoria sólamente sobre lo que no se pueda entender facilmente a partir del código.
Uno de los puntos que se va a tomar en cuenta es la correcta integración con Maven.
Para el desarrollo de esta entrega es recomendable basarse en el archetype maven-quickstart.
Se debe utilizar Log4j como herramienta de Logging. Teniendo en cuenta las siguientes observaciones:
Usar correctamente las categorias por clase.
Utilizar correctamente los distintos niveles de logs.
Definir la información más relevante que se muestra en cada línea.
La idea es que se pueda seguir la ejecución de la aplicación en un nivel DEBUG o TRACE, y que no se note si esta en INFO.