- Dra. Alexandra Martínez
- Dr. Allan Berrocal Rojas
El curso conforma un Proyecto Integrador de los cursos Bases de Datos  e Ingeniería de Software. De esta manera, durante su realización se da un enfoque en la aplicación e integración de los conocimientos obtenidos de ambos cursos por medio de un proyecto. En el desarrollo del proyecto se espera que seguir buenas prácticas de trabajo, para realizar una aplicación web con su correspondiente base de datos.
- Luis David Solano Santamaría - C17634
- Angie Sofía Solís Manzano - C17686
- Enrique Guillermo Vílchez Lizano - C18477
- Kenneth Daniel Villalobos Solís - C18548
- Emilia María Víquez Mora - C18625
LoCoMPro es un sistema que consiste en la Localización y Consulta del Mejor Producto. En otras palabras, es un sistema de búsqueda donde sus usuarios pueden obtener información de artículos en venta en base a su localización. Para realizar las consultas, se utilizará una base de datos que tendrá productos conformados por medio de registros. Cada registro es creado por datos proveídos por los mismos usuarios, formando un sistema basado en el concepto de crowdsourcing.
La página debe permitir el ingreso de usuarios dando funcionalidades básicas de manejo de usuarios, como una opción de cambio de contraseña o borrado de cuenta. De igual manera, el sistema debe cumplir ciertas características para la manipulación de registros y filtrado y ordenamiento de productos. Para la manipulación de sus propios registros, los usuarios, podrán editar la información que contienen y eliminarlos en caso de que no deseen que se mantengan en el sistema. Para el manejo de productos, podrán ser ordenados o filtrados según ciertos atributos que cada producto posee. Además, la página cuenta con un rol de moderador, el cual tiene funciones superiores a las de un usuario regular, ya que puede manipular los reportes realizados en el sistema.
El repositorio está conformado por tres directorios principales:
- 
design donde se encuentran los archivos de diseño realizados en las diferentes etapas del proceso de desarrollo. 
- 
source donde se encuentran el código fuente de la página web y modelos de la base de datos. 
- 
test donde se encuentra el proyecto de pruebas, que contiene las diferentes clases encargadas de realizar pruebas unitarias del sistema. 
Al ser una aplicación web, debe acceder al dominio requerido donde se esté ejecutando para poder acceder a la página y sus funcionalidades.
Las funcionalidades básicas implementadas, actualmente, en la aplicación consisten en:
- 
Registrarse como usuario al sistema 
- 
Ingresar al sistema con un usuario válido 
- 
Cambiar contraseña 
- 
Búsqueda simple 
- 
Búsqueda avanzada 
- 
Ordenamiento de resultados de búsqueda 
- 
Filtrado de resultados de búsqueda 
- 
Agregar un registro de un producto junto con imágenes 
- 
Ver los registros asignados a un producto junto con las características de dicho producto 
- 
Agrupar los registros asignados a un producto según su día, semana, mes o año de creación para visualizar aspectos importantes como precio mínimo, promedio y máximo, junto con su calificación promedio. 
- 
Ver la información de un registro de forma detallada 
- 
Calificar registros de forma tal que esto actualice la calificación del usuario 
- 
Ver los aportes de un usuario 
- 
Ver los datos de un usuario registrado 
- 
Cambiar los datos del usuario (nombre de usuario y ubicación) 
- 
Reportar un registro 
- 
Asignar rol de moderador a los usuarios que cumplan con tener 10 o más registros y tengan una calificación promedio mayor o igual a 4,9 
- 
Ver reportes de un registro 
- 
Aceptar o rechazar reportes para los registros 
- 
Agregar productos a la lista de favoritos 
- 
Búsqueda por favoritos 
- 
Lista de los 10 usuarios que más reportan 
- 
Lista de los 10 usuarios más reportados 
- 
Mecanismo de identificaicón de outliers de registros según su precio 
- 
Mecanismo de identificación de outliers de registros según su fecha de creación 
- 
Mecanismo de identificación de productos con nombres similares 
Se debe tomar en cuenta que no todas las funcionalidades requieren estar loggeado al sistema como un usuario. Las funcionalidades que lo requieren son: ver los aportes realizados, agregar un registro de un producto, reportar un registro y calificar un registro. Además, solo los usuarios loggeados que son moderadores pueden visualizar, aceptar o rechazar los reportes realizados.
Para registrarse como usuario al sistema debe ingresar a la página de Iniciar sesión por medio del botón en el layout de la aplicación.
Una vez encontrado en esa página, debe darle click al botón de Registrase e ingresar los datos solicitados para crear un usuario. Recibirá un correo electrónico generado por la aplicación para poder validar su cuenta.
Para ingresar al sistema como un usuario válido, debe haber pasado previamente por el proceso de registrarse como usuario al sistema y debe haber validado su cuenta con el botón de confirmación que se muestra en el correo electrónico.
Posteriormente, debe ingresar los datos solicitados de su respectivo usuario.
Para cambiar la contraseña, un usuario puede ingresar a la ventana de Mi perfil en donde encontrará la opción de cambiar su contraseña ingresando su contraseña actual, la contraseña nueva y la confirmación de la contraseña nueva. Cabe resaltar que la contraseña nueva y la confirmación deben ser iguales y cumplir con los requerimientos establecidos para que una contraseña sea válida (tener entre 8 y 20 caracteres, tener al menos una letra en minúscula, en mayúscula, al menos un caracter numérico y al menos un caracter especial.)
Para realizar una búsqueda simple, desde la página home, debe rellenar el nombre del producto deseado y presionar el botón de Buscar.
La aplicación no va a permitir realizar búsquedas con una cadena vacía en el buscador.
Para realizar una búsqueda avanzada, desde la página home, debe presionar el botón de Búsqueda avanzada donde se encontrará con una página donde puede modificar diferentes parámetros para la búsqueda.
Se permite interacción con un mapa para delimitar la región del país que se desea, pero se puede modificar por medio de comboboxes la provincia y cantón del producto buscado.
Una vez encontrados los resultados, sin importar el tipo de búsqueda, se puede realizar un ordenamiento a los resultados (ascendiente o descendiente) al darle click a cualquiera de sus columnas.
Una vez encontrados los resultados, sin importar el tipo de búsqueda, se puede realizar un filtro de los resultados según los siguientes parámetros:
- 
Provincia 
- 
Cantón 
- 
Tienda 
- 
Marca 
- 
Categoría 
- 
Precio 
- 
Fecha 
Al ser realizado por medio de checkboxes, se pueden aplicar varios filtros a la vez donde se pueden delimitar los resultados de la búsqueda posteriormente.
Estos filtros son aplicados a los resultados iniciales de la búsqueda y si se desean nuevos se deben realizar nuevas búsquedas.
Debido a la naturaleza de crowdsourcing del proyecto, los usuarios registrados en el sistema pueden agregar un registro de un producto. Para esto se deben seguir tres pasos clave:
- 
Identificar la tienda respectiva. 
- 
Identificar el producto respectivo. 
- 
Agregar los datos del registro deseado. 
Estando en la página de resultados de la búsqueda (puede ser avanzada o regular), seleccionar alguno de los productos resultados de la búsqueda para acceder a los registros del mismo. Además, se puede navegar por las imágenes de todos los registros asociados desde el rectángulo mostrado en la parte superior de la página. Estas imágenes vienen acompañadas con flechas que permiten la fácil navegación por las imágenes mostradas.
Para poder observar el precio mínimo, promedio y máximo junto con la calificación promedio de los registros, se puede seleccionar alguna de las opciones de agrupamiento que se presentan en el lado izquierdo de la página. Es importante indicar que solo se permite un agrupamiento a la vez.
En la página de ver los registros de un producto, se puede seleccionar uno de los registros para desplegar la información del mismo junto con las imágenes asignadas a dicho registro. Cabe indicar que no se puede acceder a esta información si hay algún agrupamiento activo.
Una vez en la ventana de observar la información de un registro en particular, se tiene acceso a las estrellas de calificación. Estas despliegan la calificación actual asignada al registro y permiten que el usuario seleccione la estrella con la que desea calificar el registro y la almacena. Si se vuelve a ingresar a la página del mismo registro, la calificación mostrada corresponde al nuevo promedio del registro.
En la ventana de observar la información de un registro se muestra el botón de Reportar. Al seleccionarlo, se despliega el espacio para indicar el motivo del reporte y confirmar el envío del mismo. Esta funcionalidad solo existe para usuarios ingresados en el sistema.
Una vez ingresado en el sistema, se muestra en las opciones en la parte superior de la ventana un botón de Mi Perfil, que permite desplegar la información del mismo y cambiar aspectos como el nombre de usuario, provincia, cantón y distrito.
Una vez igresado en el sistema, tanto en la ventana de Mi Perfil como en el menú de la ventana principal, se muestra la opción de Ver aportes. En esta página se muestran los registros ingresados al sistema por dicho usuario.
Dentro de la ventana de Ver Registros, se encontrará, dentro de la información del producto, un corazón gris, el cual se puede seleccionar para agregar el producto a la lista de productos favoritos del usuario. Una vez agregado, se puede volver a seleccionar el corazón para que dicho producto sea eliminado de la lista. Si se desea observar la lista de favoritos, se puede acceder al menú de Mi perfil, en donde encontrará la opción de Favoritos y podrá desplegar la lista de productos favoritos (y eliminar dicho producto de la lista seleccionando el corazón si así lo desea).
Cabe resaltar que esta funcionalidad solo es accesible cuando el usuario está ingresado en el sistema, de lo contrario, no se le desplegarán dichas opciones.
Dentro de la ventana que muestra la lista de favoritos, es posible seleccionar la opción de Ubicar productos, la cual lo redireccionará a una ventana en donde se mostrarán los resultados de la búsqueda con los múltiples productos presentes en la lista. Cada uno de estos resultados es seleccionable y permite desplegar qué productos se encuentran en la tienda indicada y el precio de cada uno de estos.
Para ser moderador, un usuario debe cumplir con las siguientes características:
- 
Tener más de 10 registros en el sistema. 
- 
Tener una calificación mayor o igual a 4.9 según el promedio de calificaciones de sus registros. 
Una vez cumplidas las características, el usuario moderador podrá ver las opciones de Ver reportes, Precios anómalos, Fechas obsoletas, Productos similares, Usuarios más reportados y Usuarios que más reportan. Es importante indicar que si el usuario que se convirtió en moderador se encuentra ingresado en el sistema en el momento en el que su estado cambia, no se le notificará hasta que no cierre su sesión y vuelva a ingresar al sistema.
En la página principal, los usuarios con permisos de moderador pueden ver la opción de Ver reportes. En esta ventana, el usuario puede decidir si:
- 
Aceptar un reporte: esto significa darle la razón a la persona que reportó y ocultar el registro para los demás usuarios. 
- 
Rechazar un reporte: esto significa indicar que el reporte es inválido y que no se quiere ocultar el registro. 
- 
Saltar un reporte: esto significa que el moderador no quiere tomar ninguna decisión sobre dicho reporte. 
Dentro de la página Home, se muestra la opción de Moderar. Dentro de este menú desplegable se encuentra la opción de Usuarios que más reportan. Al seleccionarla se despliega la lista de los 10 usuarios (si los hay) que más productos reportan junto con la cantidad de reportes que hizo cada usuario y la cantidad de esos reportes que están aprobados.
Dicha función solo está disponible para usuarios moderadores.
Dentro de la página Home, se muestra la opción de Moderar. Dentro de este menú desplegable se encuentra la opción de Usuarios más reportados. Al seleccionarla se despliega la lista de los 10 usuarios (si los hay) que más reportes reciben junto con la cantidad de reportes que recibió cada usuario y la cantidad de esos reportes que están aprobados.
Dicha función solo está disponibles para usuarios moderadores.
Dentro de la página Home, se muestra la opción de Moderar. Dentro de este menú desplegable se encuentra la opción de Precios anómalos. Dicha función despliega una lista de los registros cuyo precio indica que puede estar obsoleto. El usuario puede seleccionar los registros y eliminarlos, de forma tal que no se muestren a los usuarios cuando estos se buscan y no afecten en los datos mostrados para el producto.
Dicha función solo está disponibles para usuarios moderadores.
Dentro de la página Home, se muestra la opción de Moderar. Dentro de este menú desplegable se encuentra la opción de Fechas obsoletas. Dicha función despliega una lista de los registros cuya fecha indica que pueden estar obsoletos. El usuario puede seleccionar los grupos de registros y eliminarlos, de forma tal que no se muestren a los usuarios cuando estos se buscan y no afecten en los datos mostrados para el producto.
Dicha función solo está disponibles para usuarios moderadores.
Dentro de la página Home, se muestra la opción de Moderar. Dentro de este menú desplegable se encuentra la opción de Productos similares. Dicha función despliega una lista de productos cuyo nombre indica que podría ser el mismo producto. Al seleccioanr una opción de la lista, se despliega la lista de productos cuyo nombre es similar y se permite que el usuario los seleccione y una en un solo producto. De esta forma se evita la existencia de productos duplicados en el sistema.
Dicha función solo está disponibles para usuarios moderadores.
Para instalar y ejecutar el proyecto se requieren las siguientes aplicaciones:
- 
Visual Studio Community (2022)
- 
Microsoft SQL Server Management Studio
Dentro de Visual Studio se requieren la siguiente extensión para desarrollo web:
- ASP.NET and web development
De igual manera, dentro de los archivos del proyecto es requerido la carpeta jquery en el directorio wwwroot/js que incluye las bibliotecas jQuery y jQuery UI.
En el caso de las pruebas funcionales, se necesita tener instalado el programa Selenium para Visual Studio, Selenum Support y un driver para el buscador Chrome. Esto se puede encontrar dentro de la opción Manage NuGet Packages for Solution.
Para la preparación de la base de datos se debe tener configurado el connection string que establece la IP, puerto y características de la conexión con el servidor.
En caso de estar utilizando una IP de la ECCI, se debe utilizar el VPN de la ECCI. Puede consultar información sobre su uso e instalación aquí.
Observación: si anteriormente ejecutó las pruebas funcionales, es necesario revertir los cambios realizados para que el connection string se mantenga como LoCoMProContextRemote.
Primeramente, debe hacerse un cambio en los archivos Program.cs y ControladorComandosSQL.cs. En el archivo Program.cs, debe cambiar la constante connectionString para que esta contenga el string: LoCoMProContextTest. En el archivo ControladorComandosSQL.cs (que se encuentra en la carpeta SQL) se debe cambiar la constante connectionString en el constructor para que contenga el mismo string mencionado anteriormente. Una vez realizado esto, debe ejecutar el programa para crear la base de datos necesaria para realizar las pruebas. Cabe resaltar que, si se han ejecutado pruebas anteriores con el esta base de datos, es recomendado utilizar el comando drop-database antes de ejecutar el programa.
Una vez creada la base de datos, debe ejecutar los procedimientos, funciones y triggers en la nueva base de datos que se encuentra en la carpeta SQLScripts.
Para ejecutar las pruebas funcionales se necesita que la aplicación esté corriendo en el puerto 5150 en localhost. Esto se puede lograr ejecutando la aplicación desde la terminal. Para esto, se debe abrir la carpeta del proyecto en donde se tiene la aplicación ya compilada (con las carpetas bin y obj generadas) y correr el comando:
dotnet run
Una vez realizado esto, la aplicación se ejecutará desde el puerto 5150. Además, es necesario tener el navegador Google Chrome instalado, pues Selenium se ejecuta por este medio. En caso de que el puerto deseado se encuentre bloqueado, deberá averiguar cuál es el puerto que se tomó y cambiar los enlaces en las diferentes pruebas funcionales para que contengan el puerto actual.
Se realizaron diversas pruebas funcionales con la herramienta de Selenium. Para el funcionamiento adecuado de las diferentes pruebas se requiere lo siguiente: (para ejecutarlas todas, deben cumplirse todas las condiciones mencionadas. Se indican de forma separada en caso de que solo se desee ejecutar alguna prueba de forma individual).
Para acceder a la ventana de Ver Registros se necesita estar visualizando un registro, en esta prueba, de forma aleatoria, se seleccionó ver los registros del producto Camisa, con las siguientes características:
- Categoría: Ropa
- Marca: Adidas
- Unidad: Cantidad
- Tienda: Maxi Pali
- Provincia: Heredia
- Canton: Heredia
En caso de que este producto no existiese junto con registros, las pruebas igual serían válidas, simplemente no se visualizarían registros asociados dentro de la ventana, pero las columnas igual cambiarían al seleccionar los agrupamientos, lo cual es lo que se desea probar con la prueba.
Para ejecutar esta prueba se requiere que existan productos cuyos registros asociados tengan como provincia a Guanacaste. Esto puesto que se seleccionó esta provincia para realizar las pruebas.
Esta prueba se encarga de verificar que los cantones que se muestran en el combobox de cantón correspoden únicamente a los cantones de la provincia de Limón. Para ejecutar esta prueba se requiere que exista la provincia de Limón y sus respectivos cantones.
Para realizar estas pruebas se debe contar con un usuario válido y autenticado en el sistema que cumpla con las siguientes características:
- Nombre de usuario = Usuario1*
- Contraseña = Usuario1*
- Provincia de vivienda = San José
- Cantón de vivienda =  San José
- Distrito de vivienda = Carmen
El nombre de usuario y contraseña serán utilizados como credenciales para ingresar al sistema con el fin de acceder a la página de Mi perfil, donde se probará la funcionalidad para cambiar la vivienda del usuario. Debido a esto y dado que las opciones de cantones y distritos disponibles son dependientes de la vivienda que se encuentre seleccionada es imperativo que la vivienda del usuario inicialmente este en San José, San José, Carmen, pues estos son los valores que asumirá como iniciales la prueba. Cualquier otra vivienda inicial producirá errores.
Para realizar esta prueba se requiere la conexión con la base de datos para realizar una búsqueda, pero no es dependiente de los resultados ya que solo se revisa la presencia de las flechas.
Para realizar estas pruebas se debe contar con un usuario válido y autenticado en el sistema que cumpla con las siguientes características: Para realizar esta prueba se debe contar con un usuario válido y autenticado en el sistema que cumpla con las siguientes características:
- Nombre de usuario = Usuario1*
- Contraseña = Usuario1*
- Estado = A
En estas pruebas se necesita un usuario que se llame Envil0705! en la base de datos, y además que haya al menos un registro de un producto cuyo nombre empiece con aceite.
En estas pruebas se necesita que existan productos cuya tienda asociada esté en el cantón y provincia Heredia. Además, se requiere que exista al menos un registro con marca Apple en la provincia y cantón San José.
Para estas pruebas se ocupa que hayan registros cuya tienda asociada esté en Heredia, al menos uno. Adicionalmente, se requiere que exista al menos un registro cuyo producto asociado sea Iphone 14 y marca Apple.
Para estas pruebas, se necesitan que estén los registros asociados a Iphone 14 y un usuario llamado Usuario1*. Ambos requerimientos se cumplen si se utiliza el DBInitializer. Además, se deben tener los siguientes procedimientos de la base de datos: calificar un registro, actualizar la calificación de un registro, actualizar calificación de un usuario y actualizar rol del moderador.
Para estas pruebas se requiere que se encuentre al menos un producto Camisa con un registro y la sesión iniciada con Usuario1*. Si se utiliza el DBInitializer, ambos requerimientos se van a a cumplir.
Para las revisiones del panel de moderación desde home, se debe utilizar el usuario Usuario1 que posee el status de moderador por default.
Para la ejecución, por simpleza, se puede ejecutar desde Visual Studio.
Para esto debe abrir el archivo LoCoMPro.sln que al abrirlo configura las carpetas del archivo.
De esta manera puede ejecutar la ejecución desde su browser deseado y escoger las siguientes opciones:
- HTTP
- HTTPS
- IIS EXPRESS
- WSL
Para la ejecución de los casos de prueba del proyecto, puede abrir el archivo LoCoMPro.sln con Visual Studio.
De esta manera se le va a abrir el proyecto principal y el de proyectos de prueba.
Una vez abierto, desde la ventana Test se puede escoger Test Explorer donde se puede manejar la ejecución y resultados de las pruebas.
Dentro del Sprint 0 se entregaron dos avances, cada uno con su respectivo diseño del mockup de la aplicación y diseño de la base de datos.
Dentro del Sprint 1 se entragaron tres avances, con sus respectivos archivos de diseño y progreso. Posteriormente, puede encontrar el acceso a ciertos de estos archivos según su respectivo avance:
Dentro del Sprint 2 se entragaron tres avances, con sus respectivos archivos de diseño y progreso. Posteriormente, puede encontrar el acceso a ciertos de estos archivos según su respectivo avance:
Dentro del Sprint 3 se entragaron tres avances, con sus respectivos archivos de diseño y progreso (el primero de estos corresponde al grooming en el backlog, por lo que no se presenta en las secciones siguientes). Posteriormente, puede encontrar el acceso a ciertos de estos archivos según su respectivo avance:
