Se requieren Web Services Rest que inserten, lean, actualicen y borren información en las siguientes tablas de una base de datos mongo.
tabla: processes
campos: idp*
tabla: students
campos: idf
ids*
sname
idb*
tabla: groups
campos: idq*
idf
gname
type
tabla: gstudents
campos: idq**
idf
ids**
sname
idb
los campos marcados con "*" se pueden considerar "llaves" (campos irrepetibles en la tabla correspondiente).
En el caso especial de la tabla gstudents, la combinación de los campos marcados por "**" se puede considerar como llave.
Las acciones esperadas para cada una de las tablas, se listan a continuación. Se indican los parámetros esperados en cada caso. En todos los casos se requiere que como parte de la respuesta se especifique si la ejecución fue exitosa o no.
Además, se require se devuelva la información insertada, consultada, borrada o actualizada en formato json.
Tabla processes.
Inserción ( idp ): Inserta un registro con el valor idp en la tabla processes.
Lectura ( idp ): Verifica la existencia o ausencia del valor idp en la tabla processes.
Borrado ( idp ): Borra el registro con el valor idp de la tabla processes.
Tabla students.
Actualización (ids, idb): Actualiza el valor idb en el registro que tenga el valor ids.
Actualización (ids, sname): Actualiza el valor sname en el registro que tenga el valor ids.
Inserción (idf, ids, sname, [idb]): Inserta un registro completo. El campo idb puede venir nulo.
Lectura (idf): Lectura de los registros completos a partir de un valor idf.
Lectura (sname): Lectura de los registros completos a partir del valor sname.
Borrado (idf): Borra los registros que tengan el valor idf.
Borrado (ids): Borra el registro que tengan el valor ids.
Tabla groups.
Inserción (idq, [idf], gname, type): Inserta registro completo. Idf puede ser nulo.
Actualización (idf, gname): Actualiza el valor gname en los registros que tengan el valor idf.
Lectura (idf): Regresa los registros que tengan el valor idf.
Lectura (idq): Regresa el registro que tenga el valor idq.
Lectura (gname, type): Regresa los registros que tengan los valores gname y type.
Lectura (type): Regresa los registros que tengan el valor type.
Borrado (idq): Borra el registro que tenga el valor idq.
Borrado (idf): Borra los registros que tengan el valor idf.
Tabla gstudents.
Inserción (idq, idf, ids, sname, [idb]): Inserta el registro completo. El valor idb puede ser nulo.
Actualización (ids, idb): Actualiza el valor idb en los registros que tengan el valor ids.
Actualización (ids, sname): Actualiza el valor sname en los registros que tengan el valor ids.
Lectura(idq): Lectura de los registros que tengan el valor idq.
Borrado (idq): Borra los registros con el valor idq.
Borrado (idf): Borra los registros con el valor idf.
Borrado (ids): Borra los registros que tengan el valor ids .
Borrado (idq, ids): Borra el regitro que tenga los valores idq e ids.
Adicionalmente a los métodos que interactúan con la base de datos, se requiere un método que genere un identificador único de 256 bits. El valor se deberá regresar en hexadecimal (en mayúsculas). El proceso para generar dicho identificador es el siguiente: Generar un número aleatorio (seguro) de al menos 160 bits, al que se le calculará un sha256 y la salida en hexadecimal será el valor a regresar.
Métdo para cargado inicial de información.
Con las tablas en blanco, deberá existir un método al que se le proporcione un archivo csv y un bandera. El método deberá recibir el archivo csv y generar un identificador único de proceso. Dicho identificador debe insertarse en la tabla processes y devolverlo como respuesta al método.
En background el método debe procesar la información del csv para generar el contenido inicial de las tablas students, groups y gstudents. Al finalizar el proceso, el identificador de proceso debe eliminarse de la tabla processes. La bandera que recibe el método sirve para indicar al proceso si la primer línea del archivo debe desecharse o no (ya que es el header del archivo) Un true significaría que el archivo tiene header.
Un valor false significaría que no tiene header y por lo tanto, la primera línea del archivo no se debe desechar.
El proceso de background consta de 3 fases:
Fase 1. Del archivo csv se deben extraer los campos idf, ids y sname. Cada registro se debe insertar en la tabla students.
El campo idb de la tabla students quedará vacío en esta fase.
Fase 2: De los valores recién insertados en la tabla students, se debe agrupar por el valor idf. Por cada grupo, se debe generar un registro en la tabla groups.
Antes de insertar el registro, se debe generar un valor idq como se describió en un los métodos de los Web Services.
El registro está compuesto por los valores idq, idf, gname y type. El valor idq se debe calcular al momento, el valor idf es el valor común del grupo, el valor gname será el texto común que se encuentra al final del campo sname de los elementos del grupo. Son los apellidos comúnes de los nombres del campo sname.
En el campo type se deberá insertar el valor fijo "FA".
Fase 3:
Por cada uno de los elementos del grupo, se debe insertar un registro en la tabla gstudents. Los campos son: idq (recién generado para todo el grupo), idf, ids, sname e idb. El campo idb no se insertará en este momento.
Este método (de cargado inicial) debe poderse ejecutar a pesar de que las tablas contengan información previa. La nueva información estará validada de tal manera que lo que se considera identificadores únicos de cada tabla, no serán repetidos en la nueva información.
Se asume que todas las respuestas a los web services están en formato json y el archivo csv se encontrará en formato utf8
especificaciones adicionales
1. Se requiere que el Web Service soporte autenticación de Cliente con SSL a través de Apache Tomcat o proveer la misma autenticación a través de NGINX. Si es necesario nosotros podemos proveer Certificados y Llaves de prueba (PKCS12: P12/PFX).
2. Se requiere que el desarrollo se pueda instalar en Linux (Ubuntu).
3. Se requiere código claro, simple y bien documentado. De preferencia en inglés.
4. Se requiere buen manejo de excepciones y de errores a lo largo de todo el código
ENTREGABLES
1. Código fuente del Web Service descrito.
2. Manuales claros de compilación, instalación y configuración de dependencias y componentes adicionales necesarios para compilar.
2. Ejemplo de consumo de cada método desde Postman, indicando los parámetros y configuración necesarios.
3. Manuales de instalación y configuración de Apache Tomcat y nginx (de ser necesario), así como instalación y configuración de bibliotecas o componentes adicionales.
archivos adjuntos
1.
Entrada.csv: Archivo de ejemplo que tiene información fuente a ser procesada e insertada en la base de datos.
2.
Students.txt: Archivo que ejemplifica cómo debiera quedar insertada la información en la tabla students a partir de la inforamación contenida en el archivo csv de ejemplo (
entrada.csv)
3.
Groups.txt: Archivo que ejemplifica cómo debiera quedar insertada la información en la tabla groups a partir de la inforamación contenida en el archivo csv de ejemplo (
entrada.csv)
4.
Gstudents.txt: Archivo que ejemplifica cómo debiera quedar insertada la información en la tabla gstudents a partir de la información contenida en el archivo csv de ejemplo (entrada.c
sv)
Plazo de Entrega: 28 Abril, 2019