Computación Web (2023/24)

Proyecto: Aplicación de promoción de eventos

Introducción

En este proyecto desarrollarás la aplicación web de un sitio de promoción de eventos. Debes especializar tu aplicación en un tipo de evento concreto (por ejemplo, conciertos, representaciones de teatro, exposiciones, ferias, fiestas populares, etc.).

En la aplicación existirán al menos tres perfiles de usuario: administradores, organizadores de eventos y usuarios normales. Todos los usuarios, independientemente de su tipo, podrán realizar las acciones permitidas para usuarios normales, pero habrá funcionalidad que será exclusiva para administradores o exclusiva para organizadores de eventos. Un usuario no puede ser administrador y organizador de eventos al mismo tiempo. Parte de la funcionalidad de la aplicación estará también disponible para usuarios sin cuenta o no autenticados.

El proyecto se dividirá en funcionalidad obligatoria, que toda entrega debe implementar, funcionalidad adicional y funcionalidad avanzada.

La funcionalidad obligatoria incluye: crear cuentas de usuario, cambiar el tipo de cuenta de usuario (administradores), crear eventos (organizadores de eventos), ver eventos (cualquier usuario, incluso sin cuenta), guardar eventos (todos los usuarios), recomendar eventos (todos los usuarios), bloquear a usuarios (todos los usuarios) y ver estadísticas de actividad de usuarios (administradores).

Tienes libertad para decidir qué funcionalidad adicional y avanzada deseas implementar en tu proyecto.

Condiciones generales

Las siguientes condiciones aplican al proyecto:

Funcionalidad obligatoria

Cualquier funcionalidad que no se mencione expresamente en esta sección no es obligatoria. La funcionalidad no obligatoria que implementes será evaluada como funcionalidad adicional o funcionalidad avanzada.

Todas las entregas deben implementar la siguiente funcionalidad:

Modelo de datos

Tu proyecto debe dar soporte al siguiente modelo de datos para la funcionalidad obligatoria. Puedes desviarte de este modelo de datos si tienes razones justificadas para hacerlo. Por ejemplo, puedes enriquecer este modelo de datos debido a las necesidades de cualquier funcionalidad adicional que implementes (añadir nuevas entidades, añadir nuevas propiedades a algunas entidades, etc.), o si crees que un esquema diferente es mejor en el contexto de tu diseño del proyecto.

Las principales entidades a almacenar en la base de datos son:

  • Usuarios: Se identifica a los usuarios por un nombre de usuario que será único en la aplicación. Cada usuario se autentica mediante dicho nombre de usuario y una contraseña, que debe ser almacenada en la base de datos de forma segura, cifrada y con valor de salt (por ejemplo, usando bcrypt como en las prácticas).
  • Eventos: Los eventos incluirán, como mínimo, un título, una descripción general e información acerca de cuándo y dónde se celebrará el evento. Puede haber otros campos adicionales dependiendo del tipo de evento en que se especialice tu aplicación. El formato de la información temporal y de localización dependerá del tipo de evento. Por ejemplo, para los conciertos resulta más adecuado usar una fecha y hora de inicio más una duración estimada, mientras que para ferias o exposiciones se adecua mejor usar una fecha de inicio, una fecha de fin y un horario de apertura.
  • Recomendaciones de eventos: Las recomendaciones de eventos incluirán, al menos, el evento recomendado, el usuario que lo recomienda, el usuario al que se le recomienda y el sello temporal del instante en que se envía la recomendación.
  • Bloqueos de usuarios: Los bloqueos de usuarios incluirán, como mínimo, el usuario que bloquea, el usuario bloqueado y el sello temporal del instante en que se solicita el bloqueo.

Vistas

Tu aplicación debe proporcionar al menos las siguientes vistas:

  • Vista principal (abierta también a usuarios no autenticados): En esta vista se presentará una lista de eventos que se celebrarán próximamente. Si el usuario está autenticado tendrá, adicionalmente, acceso a otras funciones: ver recomendaciones recibidas recientemente, acceder a la vista de recomendaciones recibidas, acceder a la vista de recomendaciones enviadas, acceder a la vista de eventos guardados, acceder a la vista de eventos creados por el usuario (si es organizador de eventos), acceder al formulario de creación de eventos (si es organizador de eventos), acceder a los datos de una cuenta de usuario dado un nombre de usuario (si es administrador), etc.
  • Vista de evento (abierta también a usuarios no autenticados): En esta vista se presentará la información detallada de un evento. La vista incorporará, como parte de su ruta, el identificador del evento. En esta vista, los usuarios autenticados podrán guardar el evento, dejar de guardarlo y recomendarlo a otros usuarios. Cada evento que se muestre en cualquier parte de la aplicación debe enlazar a esta vista.
  • Vista de recomendaciones recibidas (abierta solo a usuarios autenticados): Esta vista mostrará las recomendaciones de eventos que el usuario ha recibido, ordenadas por el sello temporal de la recomendación, de más reciente a más antigua, y descartando las recomendaciones recibidas de usuarios bloqueados.
  • Vista de recomendaciones enviadas (abierta solo a usuarios autenticados): Esta vista mostrará las recomendaciones de eventos que el usuario ha enviado, ordenadas por el sello temporal de la recomendación, de más reciente a más antigua.
  • Vista de eventos guardados (abierta solo a usuarios autenticados): Esta vista mostrará la lista de eventos que el usuario ha guardado.
  • Vista de eventos creados por el usuario (abierta solo a usuarios organizadores de eventos): Esta vista mostrará los eventos que el usuario ha creado.
  • Vista de creación de eventos (abierta solo a usuarios organizadores de eventos): Desde esta vista los usuarios podrán crear un nuevo evento.
  • Vista de datos de una cuenta de usuario (abierta solo a usuarios administradores): Esta vista mostrará los datos de actividad de un usuario concreto. La vista incorporará, como parte de su ruta, el nombre de usuario. Además, desde esta vista el administrador podrá cambiar el tipo de la cuenta a organizador de eventos, administrador o usuario normal.

Puedes tomar la lista de vistas anterior como una sugerencia. Eres libre de diseñar tu aplicación con vistas diferentes siempre y cuando proporciones la misma funcionalidad. También puedes cambiar estas vistas para acomodar funcionalidad adicional.

Funcionalidad adicional

El resto de la funcionalidad a desarrollar podrá ser elegida libremente por cada grupo, para obtener hasta 1,5 puntos adicionales conforme a los criterios de evaluación.

Una o dos funciones adicionales, dependiendo de su complejidad, podrían aportar la nota máxima de este apartado. Puedes consultar con los profesores en cualquier momento para saber a qué nota aspiras según lo que pretendas implementar.

Funcionalidad avanzada

Para obtener el punto de funcionalidad avanzada previsto en los criterios de evaluación debes hacer uso de otras tecnologías que no se hayan visto en clase o se hayan visto con menor profundidad.

Se proponen, a modo de referencia, algunas posibilidades a continuación, pero puedes implementar cualquier otra que pactes previamente con los profesores:

Cada aspecto avanzado se evaluará en función de la complejidad de su implementación teniendo en cuenta la dificultad técnica, documentación disponible, etc.

También puedes implementar otros aspectos avanzados propuestos por ti, siempre que supongan profundizar en alguna de las tecnologías vistas en clase o el uso de otras tecnologías nuevas. Debes consultar previamente con los profesores para saber si tu propuesta resulta adecuada y obtener una estimación de cómo se valoraría en tu calificación. No se valorará que desarrolles nueva funcionalidad que simplemente consista en utilizar las mismas técnicas que se usan en la funcionalidad obligatoria y adicional.

Uno de los aspectos que más se valorarán con respecto a esta funcionalidad avanzada es tu capacidad para utilizar la documentación disponible y resolver los problemas de forma autónoma. Por ello, contarás con un soporte más limitado por parte de los profesores que para la funcionalidad obligatoria y adicional.

Es muy aconsejable que al principio del proyecto o durante el desarrollo del mismo pidas a los profesores una estimación de la puntuación que obtendrías por la implementación de cada función adicional o avanzada que te plantees realizar. Esto te permitirá conocer qué debes desarrollar para alcanzar la puntuación a la que aspires.

Criterios de evaluación

Aviso: el presente proyecto es una prueba de evaluación. El plagio y otros tipos de fraude académico relativos al mismo serán denunciados a las autoridades académicas conforme a la normativa en vigor.

En la evaluación se tendrá en cuenta la correcta implementación de la funcionalidad obligatoria, funcionalidad adicional y funcionalidad avanzada, así como diversos aspectos de calidad de su implementación:

Los criterios de calidad que se espera que cumpla tu proyecto son:

Parte de la evaluación se basará en una entrevista personal del profesor con los autores de la práctica, que se realizará con cita previa. Los dos miembros de la pareja de prácticas deben asistir a la misma y demostrar conocimientos suficientes de la práctica que hayan entregado. Si no fuese así, el miembro de la pareja que no muestre unos conocimientos mínimos podría recibir una nota inferior e incluso suspender el proyecto.

Durante la entrevista, se compilará y ejecutará cada proyecto, y se probará su funcionamiento en el entorno de los laboratorios. Es necesario que la aplicación entregada esté configurada para utilizar una de las bases de datos del laboratorio y que el día de la entrevista dicha base de datos que use cada grupo disponga de suficientes datos cargados para poder probar la aplicación.