Proyecto de Software 2023
Trabajo Integrador (TI)
CIDEPINT es el Centro de Investigación y Desarrollo en Tecnología de Pinturas de Argentina, nacido en los años 70 a partir de una colaboración entre varias instituciones. Su objetivo principal es promover la competitividad de los productos de pintura argentinos a nivel nacional e internacional mediante investigaciones y desarrollos en tecnología de recubrimientos. Además, se dedica a la formación de profesionales especializados y a la creación de normas en la industria. Con el tiempo, ha ampliado sus áreas de enfoque para incluir temas como el tratamiento de aceros, la protección contra la corrosión y soluciones ecológicas. Sus objetivos incluyen investigar, formar recursos humanos, difundir resultados, organizar cursos y colaborar con instituciones afines.
CIDEPINT plantea la necesidad de que exista una plataforma para mostrar y ofrecer los servicios que prestan las diferentes Instituciones.
La aplicación tendrá un aplicación interna de administración (para usuarios y administradores) en Python y Flask, y un portal web en Vue.js que será donde se podrán buscar los servicios ofrecidos por las instituciones registradas. Utilizaremos una base de datos PostgreSQL y se implementarán las API necesarias para las consultas.
El objetivo de este trabajo integrador es desarrollar una aplicación web que permita registrar y gestionar los servicios ofrecidos por las instituciones o centros de Investigación y Desarrollo en Tecnología de Pinturas. Estos centros contarán con un conjunto de características como nombre, descripción, contacto, página web, redes sociales y ubicación geográfica.
La aplicación permitirá:
Aplicación de administración en Python y Flask: desarrollar una aplicación que permita la administración de altas, bajas y modificaciones de los recursos necesarios para el sistema. También se deberá implementar un registro de usuarios y un sistema de autenticación para operar con la aplicación.
Portal en Vue.js: crear una interfaz de usuario interactiva que permita acceder al mapa con las ubicaciones de los centros, utilizar el buscador de servicios y realizar pedidos de servicio.
Base de datos PostgreSQL: diseñar la estructura de la base de datos para almacenar la información de las instituciones, servicios y usuarios de la aplicación.
API para consultas: implementar API que permitan realizar las consultas necesarias para obtener la información de los centros y servicios.
Es importante que el trabajo sea desarrollado en equipo, asignando roles y tareas a cada miembro para garantizar una implementación eficiente y exitosa de la aplicación web. Durante el cuatrimestre, se realizarán reuniones periódicas para monitorear el progreso y resolver dudas.
Al finalizar el cuatrimestre, cada equipo deberá presentar las aplicaciones web completas y funcionales, demostrando todas las funcionalidades requeridas y su correcto despliegue en un entorno de prueba.
Etapa 1
Esta aplicación será utilizada tanto por los administradores del sistema que tienen el acceso a la administración de los usuarios y también por usuarios asociados a cada una de las instituciones para que puedan administrar las mismas agregando los servicios que ofrecen.
Se deberá implementar el layout de la aplicación que es la base para todas las vistas de la aplicación privada. El resto de las vistas estarán contenidas en este layout sobreescribiendo el contenido central.
La aplicación deberá contar con un menú de navegación que tenga los enlaces a todos los módulos del sistema y esté visible en aquellas vistas del sistema que se consideren necesarias.
Se debe incluir una barra superior en la aplicación que nos permita acceder a las operaciones principales de nuestra aplicación, Ejemplo en Figura 1.
Figura 1. Posible visualización de top bar de aplicación privada.
En la Figura 1 se pueden ver las siguiente opciones de derecha a izquierda:
Aclaración: No es necesario seguir este boceto a la perfección. El objetivo del mismo es sólo mostrarles la funcionalidad que debería estar fácilmente disponible para el usuario en la barra superior, menú o submenú.
También pueden crear un logo para la aplicación y mostrar el mismo en forma coherente en todas las secciones de la aplicación.
La aplicación de administración debe permitir el registro de 2 formas: un registro simple, que permite al usuario registrarse de la forma convencional y también se debe permitir registrarse en el sistema con google (se trabajará en la Etapa 2).
Implementar las páginas necesarias para realizar el flujo de registro de usuario al sistema. El registro de usuario deberá ser público, permitiendo que cualquier persona pueda crear una cuenta.
Es necesario que estén registrados en el sistema tanto los usuarios que van utilizar la parte administrativa del sistema como los que realicen las solicitudes de servicios que se ofrecen en el sistema.
El formulario de registro debe solicitar los siguientes datos:
Una vez cargados los datos en el formulario de registro, se enviará un correo de confirmación que el usuario deberá aceptar y será redirigido a la aplicación obligando a que complete usuario y contraseña para terminar el proceso. El usuario no podrá realizar ninguna operación en la plataforma hasta tanto se le asigne el rol correspondiente que se lo permita.
El sistema deberá contar con un formulario de login que permita a los usuarios iniciar sesión en el sistema. Además del inicio de sesión convencional (con correo electrónico y clave), deberá existir la opción de poder iniciar sesión con Google (se trabajará en la Etapa 2).
Deberá implementarse un manejo de sesiones adecuado, verificando la sesión y permisos cuando corresponda. Para cada módulo se indicará si requiere autenticación o no y los permisos necesarios.
Tener en cuenta que un usuario puede tener distintos roles en distintas instituciones.
Atención: No está permitido el uso de ninguna librería externa que simplifique el proceso de login (ejemplo: flask-login). Deberán realizar la implementación completa de esta funcionalidad sin el uso de librerías que podrían ocultar comportamiento importante que queremos que aprendan y fijen en esta materia.
Desarrollar el módulo de usuarios que debe permitir al Super Administrador (no pertenece a ningúna institución) realizar distintas operaciones sobre los usuarios del sistema, ya sea personal administrativo o usuario común.
El módulo debe permitir el CRUD de usuarios. Deben validar que no existan dos usuarios con el mismo nombre de usuario (mismo email).
Se considerarán al menos los siguientes datos para cada usuario:
Se deben poder realizar búsquedas sobre los usuarios, al menos por los siguientes campos:
El resultado de la búsqueda debe estar paginado en base a la configuración del sistema (ver módulo de configuración). La paginación deberá realizarse del lado del servidor, es decir, la cantidad de registros retornados debe ser la indicada en el módulo de configuración, por ej. 25 registros por página.
Se debe desarrollar la funcionalidad para activar o bloquear un usuario: un usuario bloqueado no podrá acceder al sistema. Se deberá validar que los únicos usuarios que no puedan ser bloqueados, sean aquellos con el rol Super Administrador.
Además se debe poder asignar o desasignar roles de un usuario para una institución. En principio se proponen los roles Dueño/a, Administrador/a y Operador/a pero pueden agregarse más si se lo cree conveniente.
En referencia a los roles anteriormente mencionados podemos decir que Super Administrador es el rol con menos restricciones del sistema y que no pertenece a ningúna institución. En contrapunto los roles Dueño/a, Administrador/a y Operador/a son los roles que se pueden asignar a los usuarios que trabajan para las distintas instituciones.
Para el desarrollo del TI no será obligatorio desarrollar el CRUD de los roles y permisos, podrán administrarse desde la base de datos. Los usuarios, roles y permisos sólo podrán ser administrados por un usuario con rol de Super Administrador para esta sección.
Los permisos necesarios asociados a cada rol deberán deducirse del enunciado, ante la duda pueden consultar a su ayudante.
El nombre de los permisos deberá respetar el patrón modulo_accion, por ejemplo, el módulo de gestión de usuarios deberá contemplar los siguientes permisos:
Nota: Es importante entender el porqué del uso de esta solución para implementar la autorización y seguir el esquema de forma correcta. Este tema será explicado oportunamente en los horarios de práctica.
La Figura 2 muestra un posible modelo de usuarios, roles y permisos, que pueden utilizar en el trabajo.
Figura 2. Posible esquema para el manejo de usuarios
A continuación se definen los roles y las acciones que pueden realizar sobre este módulo:
Este módulo permite la gestión de las instituciones habilitadas para brindar servicios en el sistema. Incluye la siguiente funcionalidad.
El módulo debe permitir el CRUD de instituciones. Se deben poder listar las mismas paginadas según las páginas del módulo de configuración.
Los datos necesarios para cargar una nueva institución son los siguientes:
A continuación se definen los roles y las acciones que pueden realizar sobre este módulo:
Este módulo permite a los usuarios con rol Dueño de una institución agregar a otros usuarios registrados del sistema a participar en su institución.
La acción consiste básicamente en agregarle a ese usuario un rol dentro de la institución.
El mismo debe poder realizar la acción con el email del usuario al que quiere asignarle un rol dentro de la institución.
Todas las asignaciones de rol a los usuarios deben listarse paginados según se indique en el módulo de configuración y se debe permitir cambiar el rol para un usuario dentro de la misma institución.
A continuación se definen los roles y las acciones que pueden realizar sobre este módulo:
Este módulo permite la gestión de los servicios brindados por la institución. Incluye la siguiente funcionalidad.
Se deben poder realizar todas las operaciones CRUD de cada servicio. Los servicios deberán verse paginados según se indique en el módulo de configuración.
Los datos necesarios para cargar un servicio son los siguientes:
A continuación se definen los roles necesarios para las acciones:
Este módulo permite realizar la gestión de las solicitudes realizadas por los clientes a la institución.
Deberán listarse las solicitudes de servicios recibidas desde la aplicación pública (API), que fueron realizadas por cada cliente. Pudiendo filtrar por tipo de servicio, rango de fechas, estado de solicitud, usuario que realizó la solicitud.
Los resultados también deben estar paginados tomando los parámetros de cantidad de páginas del módulo de configuración.
Al ingresar al detalle del pedido, podrá visualizarse información del cliente (que debe ser un usuario registrado), detalle del pedido de servicio, archivos adjuntos recibidos.
La solicitud de servicio podrá marcarse con alguno de los siguientes estados: aceptada, rechazada, en proceso, finalizada, cancelada. En todos los casos se deberá indicar la fecha en la que se realizó el cambio de estado y un campo para las observaciones.
Dado un pedido determinado, se tendrá la posibilidad de ingresar un comentario o nota sobre el mismo, el cual podrá ser leído por el cliente. Podemos decir que este módulo permite una interacción directa entre la persona que solicita el servicio y quien lo ofrece.
A continuación se definen los roles necesarios para las acciones:
Este módulo permitirá administrar la configuración del sistema, como mínimo deberá contemplar la siguiente configuración:
La configuración del sistema sólo podrá modificarla un usuario con el rol de Super Administrador. Pueden agregar, en caso de que lo consideren necesario y con acuerdo previo con el ayudante asignado, alguna configuración más para ser administrada por este módulo.
A continuación se definen los roles y las acciones que pueden realizar sobre este módulo:
Se deberán implementar en la aplicación privada una serie de endpoints que permitan realizar distintas operaciones u obtener contenido desde la aplicación pública.
Pueden acceder a la especificación de la API publicada en nuestra web en el siguiente enlace. En la especificación publicada se determinan las restricciones de acceso a cada uno de los servicios (qué servicios requieren login y cuáles no).
Nota: La especificación es una guía para el/la estudiante que podrá modificar en caso que necesite agregar nuevos endpoints.
Para la Etapa 1 el método de autenticación sólo deberá responder un {“result”: “success”} o {“result”: “fail”}. En la Etapa 2 del trabajo se responderá un JWT que permitirá realizar todas las operaciones.
Todo endpoint que requiera autenticación para esta entrega no realizará el chequeo dado que aún no se dió el tema, pero deben implementarlos y en la segunda etapa se agregará el chequeo del JWT. En lugar de JWT podrían enviar el ID del usuario para poder implementar todos los endpoints que requieran ese dato.
Tener en cuenta que el servidor de la cátedra utiliza los siguientes servicios y versiones: