Almacenamiento de votos - 17 18 - G2
Contenido
Miembros
- Elena Camero Ruiz
- Marta Carmona Oliva
- José Luis Martínez Quiñones
- Pedro Serrano Ramos
- Jesús Vázquez Argumedo (Coordinador)
Consideraciones
- Debe comunicarse con otros submódulos para obtener los votos y guardarlos.
- Debe comunicarse con otros submódulos para entregar los votos.
- Repositorio donde puede encontrarse el código: https://github.com/AgoraUS-G1-1617/Almacenamiento
- Wiki de la asignatura referente al submódulo: http://1984.lsi.us.es/wiki-egc/index.php/Almacenamiento_1617_G1
Objetivo del subsistema
Su objetivo principal es el almacenamiento de los votos cifrados para garantizar su seguridad.
Enlaces
Enlaces de interés para acceder a toda la información sobre nuestro módulo:
Subsistemas relacionados
- Recuento.
- Cabinas de votación.
- Autenticación.
Gestión de la comunicación
La comunicación se realizará a través de un grupo de Telegram conformado por todos los miembros del equipo. Las reuniones no presenciales se realizarán telemáticamente mediante Skype.
Gestión del trabajo
La gestión del trabajo y la asignación de tareas se llevará a cabo a través de Trello. Se crearán 4 tableros:
* Tareas pendientes: en este tablero se añadirán las tareas que vayan surgiendo y que no estén asignadas ni realizadas aún. * Tareas en proceso: en este tablero estarán las tareas asignadas que estan en proceso de ejecución. * Tareas en revisión: en este tablero estarán las tareas acabadas para que sean revisadas antes de darlas por finalizadas. * Tareas realizadas: en este tablero estarán las tareas ya completadas.
Gestión del código
La gestión del código se realizará a través de GitHub.
Tendremos un repositorio local en el cúal cada usuario creará una rama de desarrollo para realizar las modificaciones que considere necesarias en función de las tareas que les hayan sido asignadas, cuando finalicen sus respectivas tareas se realizara un merge desde las distintas ramas de desarrollo a la rama master. Adicionalmente, también contaremos con una rama de pruebas para testear el código completo antes de cada milestone. Una vez se haya comprobado el correcto funcionamiento del subsistema se realizará un push al repositorio oficial para integrarlo con los demás subsistemas.
Gestión de incidencias
Usaremos la herramienta que nos ofrece Github para el control de las incidencias.
Herramientas
Tecnologías elegidas
Subsistema: Almacenamiento de votos Lenguaje/Herramienta: Python 2.7; IDE: Pycharm Sistema de gestión de bibliotecas: pip Bibliotecas: Flask: 0.12.2 flask_restful: 0.3.6 MySQLdb: 1.2.5 Base de datos: MySQL Community Server 5.7.19
Formato general para detallar incidencias
Las incidencias pueden emplearse no solo para fallos.
Título: <breve título sobre la incidencia> Prioridad: a seleccionar entre distintos valores: urgente, alto, medio, bajo. Estado: pendiente, en curso, finalizado. Los dos primeros estados deberían meterse como etiquetas en GitHub, el último estado se prouduce cuando se cierra la incidencia en GitHub. Descripción: <descripción detallada del error> La descripción puede incluir imagenes o la salida emitida por el fallo. Etiquetas: <etiquetas de GitHub para clasificar las incidencias> enhancement: propuesta de mejora bug: fallos encontrados en el sistema help wanted: incidencia que puede ser resuelta por un miembro del equipo pero que ha sido atendida previamente por otro question: (a usar solo entre miembros del equipo) dudas sobre un commit en concreto, hay que referenciar el commit en cuestión
Modelo de datos
Los datos que se van a almacenar en nuestra base de datos son:
- Tabla votos:
- id: (int) identificador del voto [pk, autoincrementable] - token_usuario: (String) identificador del usuario que realiza el voto [fk, not null] - token_pregunta: (String) identificador de la pregunta a la que está respondiendo [fk, not null] - token_respuesta: (String) identificador de la respuesta [fk] - token_votacion: (String) identificador de la votacion [fk]
- Los datos relativos a la votación los recibiremos cifrados, y para garantizar la anonimización de cada voto añadiremos una segunda capa de encriptación antes de almacenarlos.
- Tabla autenticacion:
- token_bd: (String) Token para autenticarse y acceder a nuestra BBDD
API
Las especificaciones de la API podrían variar posteriormente, ya que es posible que alguno los grupos de los que depende este módulo hicieran modificaciones en su modelo de datos a lo largo del desarrollo, lo cuál afectaría al formato de nuestra API.
Dependencias
Este módulo tiene dependencias con los siguientes subsistemas:
- Autenticación: Necesitaremos obtener los datos de autenticación para que un usuario pueda verificar si su voto se registró correctamente,
- Cabinas de votación: Necesitaremos recibir información de todas las cabinas de votaciones para poder almacenar los votos en nuestra base de datos.
- Recuento: El módulo de recuento necesitará obtener todos los votos almacenados en nuestra base de datos para proceder a contabilizarlos.
Comprobar voto
URL:
https://almacenamiento.nvotesus.es/api/get/comprobar_voto/{token_bd}/{token_usuario}/{token_votación}
Descripción
Se comprueba si un determinado usuario ha votado o no en esa votación.
Petición HTTP
GET
Parámetros de petición:
* token_bd: Token para verificar que el usuario que realiza la petición tiene permiso de acceso a nuestra base de datos (String) * token_usuario: Identificador del usuario (String) * token_votación: Identificador de la votación (String)
Ejemplo de petición:
https://almacenamiento.nvotesus.es/api/get/comprobar_voto/1/1/1
Respuesta
Nombre | Tipo | Descripción |
---|---|---|
result | JSON | Objeto voto |
msg | String | 200 OK |
Nombre | Tipo | Descripción |
result | Boolean | Código de error |
msg | String | 404 NOT FOUND El usuario no ha realizado ningun voto en esta votacion. |
Ejemplo de respuesta
{ "1": { "id": "...", "token_usuario": "1", "token_pregunta": "...", "token_respuesta": "..." } }
{ "code": "404 NOT FOUND" "msg": "El usuario no ha realizado ningun voto en esta votacion." }
Comprobar voto pregunta
URL:
https://almacenamiento.nvotesus.es/api/get/comprobar_voto_pregunta/{token_bd}/{token_usuario}/{token_votación}/{token_pregunta}
Descripción
Se comprueba si un determinado usuario ha votado o no en una determinada pregunta de una votación.
Petición HTTP
GET
Parámetros de petición:
* token_bd: Token para verificar que el usuario que realiza la petición tiene permiso de acceso a nuestra base de datos (String) * token_usuario: Identificador del usuario (String) * token_pregunta: Identificador de la pregunta (String) * token_votación: Identificador de la votación (String)
Ejemplo de petición:
https://almacenamiento.nvotesus.es/api/get/comprobar_voto_pregunta/1/1/1/1
Respuesta
Nombre | Tipo | Descripción |
---|---|---|
result | JSON | Objeto voto |
msg | String | 200 OK |
Nombre | Tipo | Descripción |
result | Boolean | Código de error |
msg | String | 404 NOT FOUND El usuario no ha realizado ningun voto en esta pregunta de esta votacion. |
Ejemplo de respuesta
{ "1": { "id": "...", "token_usuario": "1", "token_pregunta": "1", "token_respuesta": "..." } }
{ "code": "404 NOT FOUND" "msg": "El usuario no ha realizado ningun voto en esta votacion." }
Almacenar voto
URL:
https://almacenamiento.nvotesus.es/api/post/almacenar_voto/{token_bd}/{token_usuario}/{token_pregunta}/{token_respuesta}/{token_votacion}
Parámetros de petición:
* token_bd: Token para verificar que el usuario que realiza la petición tiene permiso de acceso a nuestra base de datos (String) * token_usuario: Identificador del usuario (String) * token_pregunta: Identificador de la pregunta (String) * token_respuesta: Identificador de la respuesta (String) * token_votacion: Identificador de la votación (String)
Descripción
Almacena el voto pedido en la base de datos.
Petición HTTP
POST
Ejemplo de petición
https://almacenamiento.nvotesus.es/api/post/almacenar_voto/1/1/1/1/1
Respuesta:
Nombre | Tipo | Descripción |
---|---|---|
result | Boolean | Código de éxito |
msg | String | 200 OK El voto se ha almacenado satisfactoriamente. |
Nombre | Tipo | Descripción |
result | Boolean | Código de error |
msg | String | 400 BAD REQUEST Un usuario sólo puede votar una vez a una pregunta. |
Ejemplo de respuesta:
{ "code": "200 OK" "message": "El voto se ha almacenado satisfactoriamente." }
{ "code": "400 BAD REQUEST" "message": "Un usuario sólo puede votar una vez a una pregunta." }
Obtener votos
URL:
https://almacenamiento.nvotesus.es/api/get/obtener_todo/{token_bd}/{token_pregunta}/{token_votacion}
Parámetros de petición:
* token_bd: Token para verificar que el usuario que realiza la petición tiene permiso de acceso a nuestra base de datos (String) * token_pregunta: Identificador de la pregunta (String) * token_votación: Identificador de la votación (String)
Descripción
Obtener todos los votos de una pregunta en una determinada votación.
Ejemplo de petición:
https://almacenamiento.nvotesus.es/api/get/obtener_todo/1/1/1
Respuesta:
Nombre | Tipo | Descripción |
---|---|---|
result | JSON | Objetos votos |
msg | String | 200 OK |
Nombre | Tipo | Descripción |
result | Boolean | Código de error |
msg | String | 404 NOT FOUND |
Ejemplo de respuesta
{ "1": { "id": "...", "token_usuario": "...", "token_pregunta": "...", "token_respuesta": "..." } "2": { "id": "...", "token_usuario": "...", "token_pregunta": "...", "token_respuesta": "..." } }
{ "code": "404 NOT FOUND" "message": "..." }