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

De Wiki de EGC
Saltar a: navegación, buscar
(Añadido un espaciado para mejorar la disposición del texto de las plantillas)
(Mejorado de nuevo el estilo, para permitir que la sección de especificación de la API quede con estilo de código, al igual que las plantillas HTML)
Línea 10: Línea 10:
  
 
'''Tecnologías que se usarán''':
 
'''Tecnologías que se usarán''':
Subsistema: Cabina de votación
+
Subsistema: Cabina de votación<br/>
Lenguaje/Herramienta: Node.js 9.2 (Javascript v8)
+
Lenguaje/Herramienta: Node.js 9.2 (Javascript v8)<br/>
Bibliotecas:  
+
Bibliotecas: <br/>
- restify: 6.3.4  
+
- restify: 6.3.4 <br/>
- rest: 2.0.0  
+
- rest: 2.0.0 <br/>
- lodash: 4.17.4  
+
- lodash: 4.17.4 <br/>
- async: 2.6.0  
+
- async: 2.6.0 <br/>
Sistema de gestión de bibliotecas: npm
+
Sistema de gestión de bibliotecas: npm<br/>
Base de datos: No (Aunque es necesaria alguna forma de verificar los votos a partir del usuario encriptado).
+
Base de datos: No (Aunque es necesaria alguna forma de verificar los votos a partir del usuario encriptado).<br/>
  
 
'''
 
'''
Línea 38: Línea 38:
 
Formato JSON Ejemplo: Obtención del voto 1
 
Formato JSON Ejemplo: Obtención del voto 1
  
{
+
    {
    "vote": {
+
        "vote": {
        "id": "1",
+
            "id": "1",
        "encrypted_user": "xgs5fdy2",
+
            "encrypted_user": "xgs5fdy2",
        "id_election": "165",
+
            "id_election": "165",
        "encrypted_answers": "..."
+
            "encrypted_answers": "..."
 +
        }
 
     }
 
     }
}
 
  
 
'''Consulta de votos''':
 
'''Consulta de votos''':
Línea 54: Línea 54:
 
Formato JSON Ejemplo: Buscando la votación 165
 
Formato JSON Ejemplo: Buscando la votación 165
  
{
+
    {
    "votos": {
+
        "votos": {
        "vote1": {
+
            "vote1": {
            "id": "1",
+
                "id": "1",
            "encrypted_user": "xgs5fdy2",
+
                "encrypted_user": "xgs5fdy2",
            "id_election": "165",
+
                "id_election": "165",
            "encrypted_anwers": "..."
+
                "encrypted_anwers": "..."
        },
+
            },
  
        "voto2": {
+
            "voto2": {
            "id": "2",
+
                "id": "2",
            "encrypted_user": "whedvsg3",
+
                "encrypted_user": "whedvsg3",
            "id_election": "165",
+
                "id_election": "165",
            "encrypted_anwers": "..."
+
                "encrypted_anwers": "..."
 +
            }
 
         }
 
         }
 
     }
 
     }
}
 
  
 
'''Creación de voto''':
 
'''Creación de voto''':
Línea 80: Línea 80:
 
Formato JSON Ejemplo: Creando un voto por el usuario 23, la votación 34, el grupo de usuarios 13.
 
Formato JSON Ejemplo: Creando un voto por el usuario 23, la votación 34, el grupo de usuarios 13.
  
{
+
    {
    "result": true,
+
        "result": true,
    "vote": {
+
        "vote": {
        "id": "1",
+
            "id": "1",
        "encrypted_user": "as5d8gr4",
+
            "encrypted_user": "as5d8gr4",
        "id_election": "34",
+
            "id_election": "34",
        "id_group": "13",
+
            "id_group": "13",
        "encrypted_answers": "..."
+
            "encrypted_answers": "..."
 +
        }
 
     }
 
     }
}
 
  
 
== Plantillas HTML ==
 
== Plantillas HTML ==
Línea 105: Línea 105:
 
'''Votación de la pregunta X'''
 
'''Votación de la pregunta X'''
  
<hX><-- Nombre de la encuesta --></hX><br/>
+
    <hX><-- Nombre de la encuesta --></hX><br/>
<\hr/><br/>
+
    <\hr/><br/>
<\p><-- Descripción de la encuesta --><\/p><br/>
+
    <\p><-- Descripción de la encuesta --><\/p><br/>
<\hr/><br/>
+
    <\hr/><br/>
<\p>Pregunta <-- X --><\/p><br/>
+
    <\p>Pregunta <-- X --><\/p><br/>  
<\span><-- Texto de la preguna X --><\/span><br/>
+
    <\span><-- Texto de la preguna X --><\/span><br/>
<% En el caso de que se trate de una lista de posibles opciones donde sólo se selecciona una %><br/>
+
    <% En el caso de que se trate de una lista de posibles opciones donde sólo se selecciona una %><br/>
    <select><br/>
+
        <select><br/>
        <option value="<-- Valor de la respuesta -->"><-- Texto de la respuesta --><br/>
+
            <option value="<-- Valor de la respuesta -->"><-- Texto de la respuesta --><br/>
    </select><br/>
+
        </select><br/>
<% En el caso de que se trate de una respuesta donde habrá que poner texto %><br/>
+
    <% En el caso de que se trate de una respuesta donde habrá que poner texto %><br/>
    <label...><-- Texto de la pregunta --></label><br/>
+
        <label...><-- Texto de la pregunta --></label><br/>
    <input value="<-- Valor de la pregunta -->" /><br/>
+
        <input value="<-- Valor de la pregunta -->" /><br/>
<% En el caso de existir una pregunta donde se requiera una selección y también un input de pregunta, mezclar las dos disposiciones anteriores %><br/>
+
    <% En el caso de existir una pregunta donde se requiera una selección y también un input de pregunta, mezclar las dos disposiciones anteriores %><br/>
<\hr/><br/>
+
    <\hr/><br/>
<button <% Botón de siguiente pregunta %>>Siguiente pregunta</button><br/>
+
    <button <% Botón de siguiente pregunta %>>Siguiente pregunta</button><br/>
  
 
'''Final de la votación de la encuesta'''
 
'''Final de la votación de la encuesta'''
  
<hX><-- Nombre de la encuesta --></hX><br/>
+
    <hX><-- Nombre de la encuesta --></hX><br/>
<\hr/><br/>
+
    <\hr/><br/>
<\p><-- Descripción de la encuesta --><\/p><br/>
+
    <\p><-- Descripción de la encuesta --><\/p><br/>
<\hr/><br/>
+
    <\hr/><br/>
<\p>Gracias por responder a <-- Nombre de la encuesta --><\/p><br/>
+
    <\p>Gracias por responder a <-- Nombre de la encuesta --><\/p><br/>
<button>Finalizar</button> <% Con este botón, se enviaría a la cabina de votación el voto y los credenciales del usuario que lo ha creado %><br/>
+
    <button>Finalizar</button> <% Con este botón, se enviaría a la cabina de votación el voto y los credenciales del usuario que lo ha creado %><br/>

Revisión del 13:14 27 nov 2017

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.

Obtención de un voto: Tipo: GET URL: http://egc-cabina.es/api/get/vote.json?id=x&id_election=y 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 URL: http://egc-cabina.es/api/get/votes.json?encrypted_user=x&id_election=y 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": "..."
           }
       }
   }

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:

Leyenda:

- <-- variable --> Esta sección será reemplazada por un texto que sea más cercano a lo especificado en el interior de la sección
- <% Comentario %> Comentario
- <hX> Un texto de alto tamaño
- <\hr/> Una barra horizontal u alguna otra forma de separación.
- <\p/> Un parrafo, preferible de una única linea
- <\span/> Un parrafo de varias lineas

Votación de la pregunta X

   <hX><-- Nombre de la encuesta --></hX>
<\hr/>
<\p><-- Descripción de la encuesta --><\/p>
<\hr/>
<\p>Pregunta <-- X --><\/p>
<\span><-- Texto de la preguna X --><\/span>
<% En el caso de que se trate de una lista de posibles opciones donde sólo se selecciona una %>
<select>
<option value="<-- Valor de la respuesta -->"><-- Texto de la respuesta -->
</select>
<% En el caso de que se trate de una respuesta donde habrá que poner texto %>
<label...><-- Texto de la pregunta --></label>
<input value="<-- Valor de la pregunta -->" />
<% En el caso de existir una pregunta donde se requiera una selección y también un input de pregunta, mezclar las dos disposiciones anteriores %>
<\hr/>
<button <% Botón de siguiente pregunta %>>Siguiente pregunta</button>

Final de la votación de la encuesta

   <hX><-- Nombre de la encuesta --></hX>
<\hr/>
<\p><-- Descripción de la encuesta --><\/p>
<\hr/>
<\p>Gracias por responder a <-- Nombre de la encuesta --><\/p>
<button>Finalizar</button> <% Con este botón, se enviaría a la cabina de votación el voto y los credenciales del usuario que lo ha creado %>