Diferencia entre revisiones de «Cabina de votaciones - 17 18 - G2»

De Wiki de EGC
Saltar a: navegación, buscar
(Plantillas HTML: Actualizadas con el formato de Jinja2)
(APIs y datos que se usarán y devolverán: Eliminados métodos que colisionaban con otros módulos)
Línea 39: Línea 39:
 
id_election: (int) identificador de la votación [fk, not null]<br/>
 
id_election: (int) identificador de la votación [fk, not null]<br/>
 
encrypted_answers: (string) es un string con el contenido de la votación cifrado.<br/>
 
encrypted_answers: (string) es un string con el contenido de la votación cifrado.<br/>
 
'''Obtención de un voto''':
 
Tipo: GET<br/>
 
URL: http://egc-cabina.es/api/get/vote.json?id=x&id_election=y<br/>
 
Parámetros:
 
            id_vote: Identificador del voto (x)
 
            id_election: Identificador de la elección del voto (y)
 
Formato JSON Ejemplo: Obtención del voto 1
 
 
    {
 
        "vote": {
 
            "id": "1",
 
            "encrypted_user": "xgs5fdy2",
 
            "id_election": "165",
 
            "encrypted_answers": "..."
 
        }
 
    }
 
 
'''Consulta de votos''':
 
Tipo: GET<br/>
 
URL: http://egc-cabina.es/api/get/votes.json?encrypted_user=x&id_election=y<br/>
 
Parámetros:
 
            encrypted_user: (opcional) Identificador del usuario encriptado. (x)
 
            id_election (opcional) Identificador de la votación (y)
 
Formato JSON Ejemplo: Buscando la votación 165
 
 
    {
 
        "votos": {
 
            "vote1": {
 
                "id": "1",
 
                "encrypted_user": "xgs5fdy2",
 
                "id_election": "165",
 
                "encrypted_anwers": "..."
 
            },
 
            "voto2": {
 
                "id": "2",
 
                "encrypted_user": "whedvsg3",
 
                "id_election": "165",
 
                "encrypted_anwers": "..."
 
            }
 
        }
 
    }
 
  
 
'''Consulta de permisos de voto'''
 
'''Consulta de permisos de voto'''

Revisión del 12:44 30 nov 2017

Objetivo del subsistema

Permitir la votación para las distintas votaciones disponibles en el sistema.

Consideraciones

Resumen del trabajo

Nuestro trabajo consistirá en realizar el apartado de cabina de votación que consiste en permitir mediante el uso de un conjunto de métodos la posibilidad de que los usuarios puedan votar anónimamente teniendo en cuenta las restricciones posibles que puedan existir.

Objetivo del subsistema

Nuestro trabajo consistirá en realizar el apartado de cabina de votación que consiste en permitir mediante el uso de un conjunto de métodos la posibilidad de que los usuarios puedan votar anónimamente teniendo en cuenta las restricciones posibles que puedan existir.

Tecnologías que se usarán: Subsistema: Cabina de votación
Lenguaje/Herramienta: Node.js 9.2 (Javascript v8)
Bibliotecas:
- restify: 6.3.4
- rest: 2.0.0
- lodash: 4.17.4
- async: 2.6.0
Sistema de gestión de bibliotecas: npm
Base de datos: No (Aunque es necesaria alguna forma de verificar los votos a partir del usuario encriptado).

APIs y datos que se usarán y devolverán

Estructura de un voto:

id: (int) identificador del voto [pk, autoincrementable]
encrypted_user: (string) identificador del usuario que ha votado de forma encriptada, es única y es posible verificar el voto (voto anónimo) [unique, not null]
id_election: (int) identificador de la votación [fk, not null]
encrypted_answers: (string) es un string con el contenido de la votación cifrado.

Consulta de permisos de voto Tipo: GET
URL: http://egc-cabina.es/api/check/vote.json?user=x&election=y
Parámetros:

           user: Nombre de usuario al que comprobar si puede votar
           election: Identificador de la votación a comprobar

Formato JSON Ejemplo, usuario "user" puede votar en "election":

   {
       "result": true,
       "reason": "can_vote"
   }

Otras consideraciones: "reason" determina la razón de por qué no puede votar y pueden ser alguno de los siguientes:

- "can_vote" El usuario puede votar.
- "already_voted" El usuario ha realizado su voto y la votación es de un sólo voto, por lo tanto no podrá votar.
- "cant_vote" El usuario no pertenece a un grupo de votación.

Creación de voto: Tipo: POST URL: http://egc-cabina.es/api/create/vote.json Parámetros: id_user: (int) Identificador del usuario (sin encriptar)

           id_election: (int) Identificador de la votación
           answers: (list[string]) Lista con las respuestas de la votación de forma ordenada (en la posición 1 estará la respuesta a la pregunta 1 de la votación)

Formato JSON Ejemplo: Creando un voto por el usuario 23, la votación 34, el grupo de usuarios 13.

   {
       "result": true,
       "vote": {
           "id": "1",
           "encrypted_user": "as5d8gr4",
           "id_election": "34",
           "id_group": "13",
           "encrypted_answers": "..."
       }
   }

Plantillas HTML

Se tiene pensado que el formato de la cabina de votación sea el siguiente:

Votación de la pregunta X

   {% block body %}
   <hX>{% election.nombre %}</hX>
<\hr/>
<\p>{% election.descripcion %}<\/p>
<\hr/>
{% for question in election.preguntas %} <\p>Pregunta {% question.nombre %}<\/p>
<\span>{% question.descripcion %}<\/span>
{% if question.tipo_pregunta == "Cerrada"
{% if questions.filter( {% for answer in question.respuestas %}
<select>
<option value="{% answer.seleccionada %}">{% answer.texto_pregunta %}
</select>
{% if question.tipo_pregunta == "Abierta" %}
<label...>{% question.texto_pregunta %}</label>
<input value="{% question.answers[0].texto_respuesta" />
<\hr/>
<button>Siguiente pregunta</button>

Final de la votación de la encuesta

   <hX>{% election.nombre %}</hX>
<\hr/>
<\p>{% election.descripcion %}<\/p>
<\hr/>
<\p>Gracias por responder a {% election.nombre %}<\/p>
<button>Finalizar</button>