Diferencia entre revisiones de «Administración de votaciones - 17 18 - G2»
(→Formato de commits) |
(→Miembros y contacto) |
||
(No se muestran 53 ediciones intermedias de 4 usuarios) | |||
Línea 1: | Línea 1: | ||
+ | = Entregables = | ||
+ | |||
+ | https://drive.google.com/file/d/1Ure7m5MRAu0DDYnDgXZ-5GDsfzve3uyk/view | ||
+ | |||
= Miembros y contacto = | = Miembros y contacto = | ||
− | * Pablo Tinoco Castillo, ''ptinococastillo@gmail.com'' '''Coordinador''' | + | * Pablo Tinoco Castillo - Grupo 1, ''ptinococastillo@gmail.com'' '''Coordinador''' |
− | * Francisco Fernández Angulo | + | * Francisco Fernández Angulo -Grupo 1 |
− | * Jesús Martos Alé | + | * Jesús Martos Alé - Grupo 2 |
− | * Miguel Medrano Gil | + | * Miguel Medrano Gil - Grupo 2 |
− | * Gonzalo Trabado García | + | * Gonzalo Trabado García - Grupo 2 |
= Especificaciones = | = Especificaciones = | ||
Línea 17: | Línea 21: | ||
* Repositorio del proyecto: https://github.com/EGC-G2-Trabajo-1718/AdministracionVotaciones | * Repositorio del proyecto: https://github.com/EGC-G2-Trabajo-1718/AdministracionVotaciones | ||
* Página Opera: http://opera.eii.us.es/egc/public/trabajo/ver/id/98 | * Página Opera: http://opera.eii.us.es/egc/public/trabajo/ver/id/98 | ||
− | |||
== Tecnología usada == | == Tecnología usada == | ||
Línea 25: | Línea 28: | ||
'''Sistema de gestión de bibliotecas''': Maven | '''Sistema de gestión de bibliotecas''': Maven | ||
'''Bibliotecas''': | '''Bibliotecas''': | ||
− | '''Jackson (Para API)''' | + | '''Jackson (Para API) además de Spring''' |
− | '''Necesita Base de datos''': Sí, se usará | + | '''Necesita Base de datos''': Sí, se usará MySQL5.5 Workbench. Habrá 3 tablas (Votación, Pregunta Respuesta). |
== Estructura de datos == | == Estructura de datos == | ||
Línea 67: | Línea 70: | ||
Para terminar, nuestro módulo deberá poder ofrecer la información completa de la votación al módulo de "Cabina de votación" para que se lleve a cabo. Para ello, ofreceremos una API que procedemos a definir. | Para terminar, nuestro módulo deberá poder ofrecer la información completa de la votación al módulo de "Cabina de votación" para que se lleve a cabo. Para ello, ofreceremos una API que procedemos a definir. | ||
− | == Obtención de una votación == | + | Es probable que otros subsistemas necesiten funciones API que no ofrezcamos, por lo que crearemos los métodos necesarios que puedan ir surgiendo durante el proyecto. |
+ | |||
+ | == Votación == | ||
+ | Definimos las API que dependerán del objeto "Votación" | ||
+ | |||
+ | === Obtención de una votación === | ||
Se hace una petición GET con los parámetros siguientes y se devolverá un JSON con la siguiente información. | Se hace una petición GET con los parámetros siguientes y se devolverá un JSON con la siguiente información. | ||
Línea 90: | Línea 98: | ||
"fecha_ini": "31/07/2017 07:07", | "fecha_ini": "31/07/2017 07:07", | ||
"fecha_fin": "31/08/2017 07:07" | "fecha_fin": "31/08/2017 07:07" | ||
+ | "id_preguntas": "[2,3]" | ||
+ | |||
} | } | ||
} | } | ||
− | == Creación de una votación == | + | === Creación de una votación === |
Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | ||
'''URL:''' | '''URL:''' | ||
− | http://egc-votacion1718.es/api/ | + | http://egc-votacion1718.es/api/post/votacionCreate |
'''Parámetros:''' | '''Parámetros:''' | ||
Línea 107: | Línea 117: | ||
* fecha_ini: fecha de inicio de la votación | * fecha_ini: fecha de inicio de la votación | ||
* fecha_fin: fecha de fin de la votación | * fecha_fin: fecha de fin de la votación | ||
+ | * clave: clave para asignar a la votación | ||
+ | |||
'''Ejemplo:''' | '''Ejemplo:''' | ||
− | POST http://egc-votacion1718.es/api/ | + | POST http://egc-votacion1718.es/api/votacionCreate.json?id_censo=1&id_grupo=2&titulo=Prueba&descripcion=Descripcion&fecha_ini=10/10/17 10:30&fecha_fin=11/10/17 10:30 |
'''Formato JSON:''' | '''Formato JSON:''' | ||
Línea 121: | Línea 133: | ||
"fecha_ini": "31/07/2017 07:07", | "fecha_ini": "31/07/2017 07:07", | ||
"fecha_fin": "31/08/2017 07:07" | "fecha_fin": "31/08/2017 07:07" | ||
+ | "clave": "clave" | ||
} | } | ||
} | } | ||
− | == Edición de una votación== | + | === Edición de una votación=== |
Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | ||
'''URL:''' | '''URL:''' | ||
− | http://egc-votacion1718.es/api/post/ | + | http://egc-votacion1718.es/api/post/editVotacion.json |
'''Parámetros:''' | '''Parámetros:''' | ||
Línea 139: | Línea 152: | ||
* fecha_ini: fecha de inicio de la votación | * fecha_ini: fecha de inicio de la votación | ||
* fecha_fin: fecha de fin de la votación | * fecha_fin: fecha de fin de la votación | ||
+ | * clave: clave de la votación | ||
Aquellos parámetros que no se introduzcan no se modificarán. | Aquellos parámetros que no se introduzcan no se modificarán. | ||
'''Ejemplo:''' | '''Ejemplo:''' | ||
− | POST http://egc-votacion1718.es/api/post/ | + | POST http://egc-votacion1718.es/api/post/editVotacion.json?id=1&titulo=Titulo_modificado |
'''Formato JSON:''' | '''Formato JSON:''' | ||
Línea 157: | Línea 171: | ||
"fecha_ini": "31/07/2017 07:07", | "fecha_ini": "31/07/2017 07:07", | ||
"fecha_fin": "31/08/2017 07:07" | "fecha_fin": "31/08/2017 07:07" | ||
+ | "clave": "clave" | ||
} | } | ||
} | } | ||
− | == Eliminación de una votación == | + | === Eliminación de una votación === |
Se hace una petición DELETE (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | Se hace una petición DELETE (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | ||
'''URL:''' | '''URL:''' | ||
− | http://egc-votacion1718.es/api/ | + | http://egc-votacion1718.es/api/post/votacionDelete.json |
'''Parámetros:''' | '''Parámetros:''' | ||
Línea 171: | Línea 186: | ||
'''Ejemplo:''' | '''Ejemplo:''' | ||
− | DELETE http://egc-votacion1718.es/api/ | + | DELETE http://egc-votacion1718.es/api/post/votacionDelete.json?id=1 |
'''Formato JSON:''' | '''Formato JSON:''' | ||
{ | { | ||
Línea 178: | Línea 193: | ||
} | } | ||
− | == Obtención de una pregunta == | + | == Pregunta == |
+ | Definimos las API que dependerán del objeto "Pregunta" | ||
+ | |||
+ | === Obtención de una pregunta === | ||
Se hace una petición GET con los parámetros siguientes y se devolverá un JSON con la siguiente información. | Se hace una petición GET con los parámetros siguientes y se devolverá un JSON con la siguiente información. | ||
Línea 197: | Línea 215: | ||
"id_votacion": "1", | "id_votacion": "1", | ||
"texto_pregunta": "¿Prefieres consola o pc?", | "texto_pregunta": "¿Prefieres consola o pc?", | ||
− | "tipo_pregunta": " | + | "tipo_pregunta": "Abierta", |
"id_dependencia": "2", | "id_dependencia": "2", | ||
+ | "id_respuestas":"[2,5]" | ||
} | } | ||
} | } | ||
− | == Creación de una pregunta == | + | === Obtención de todas las preguntas de una votación === |
+ | |||
+ | Se hace una petición GET con la id de la votación y se devolverá un JSON con un array de votaciones. | ||
+ | |||
+ | '''URL:''' | ||
+ | http://egc-votacion1718.es/api/get/preguntas.json | ||
+ | |||
+ | '''Parámetros:''' | ||
+ | * id: Identificador de la votacion. | ||
+ | |||
+ | '''Ejemplo:''' | ||
+ | GET http://egc-votacion1718.es/api/get/respuestas.json?id=1 | ||
+ | |||
+ | '''Formato JSON:''' | ||
+ | |||
+ | [{ | ||
+ | "id": "7", | ||
+ | "id_votacion": "1", | ||
+ | "texto_pregunta": "¿Prefieres consola o pc?", | ||
+ | "tipo_pregunta": "Abierta", | ||
+ | "id_dependencia": "2", | ||
+ | "id_respuestas":"[2,5]", | ||
+ | }, | ||
+ | { | ||
+ | |||
+ | "id": "8", | ||
+ | "id_votacion": "1", | ||
+ | "texto_pregunta": "¿Que consola prefieres?", | ||
+ | "tipo_pregunta": "Abierta", | ||
+ | "id_dependencia": "7", | ||
+ | "id_respuestas":"[1,9]" | ||
+ | }] | ||
+ | |||
+ | === Creación de una pregunta === | ||
Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | ||
'''URL:''' | '''URL:''' | ||
− | http://egc-votacion1718.es/api/ | + | http://egc-votacion1718.es/api/post/preguntaCreate |
Línea 218: | Línea 270: | ||
'''Ejemplo:''' | '''Ejemplo:''' | ||
− | POST http://egc-votacion1718. | + | POST http://egc-votacion1718.esapi/post/preguntaCreate?id_votacion=1&texto_pregunta=Ejemplo&tipo_pregunta=Abierta&id_dependencia=2 |
'''Formato JSON:''' | '''Formato JSON:''' | ||
Línea 231: | Línea 283: | ||
} | } | ||
− | == Edición de una pregunta== | + | === Edición de una pregunta=== |
Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | ||
'''URL:''' | '''URL:''' | ||
− | http://egc-votacion1718.es/api/post/ | + | http://egc-votacion1718.es/api/post/preguntaEdit.json |
'''Parámetros:''' | '''Parámetros:''' | ||
− | + | ||
− | + | * id: identificador de la pregunta a editar | |
+ | * id_votación: identificador de la votación a la que pertenece | ||
* texto_pregunta: texto de la pregunta que se realiza | * texto_pregunta: texto de la pregunta que se realiza | ||
* tipo_pregunta: parametro para establecer el tipo de pregunta | * tipo_pregunta: parametro para establecer el tipo de pregunta | ||
* id_dependencia: parametro para identificar si la pregunta depende de otra | * id_dependencia: parametro para identificar si la pregunta depende de otra | ||
+ | * respuestas: parametro para identificar las respuestas asociadas (Por id, ejemplo: [1,2]) | ||
Línea 261: | Línea 315: | ||
"tipo_pregunta": "Abiera", | "tipo_pregunta": "Abiera", | ||
"id_dependencia": "2", | "id_dependencia": "2", | ||
+ | "respuestas": "[1,2]" | ||
} | } | ||
− | + | ||
− | == Eliminación de una pregunta == | + | === Eliminación de una pregunta === |
Se hace una petición DELETE (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | Se hace una petición DELETE (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | ||
'''URL:''' | '''URL:''' | ||
− | http://egc-votacion1718.es/api/ | + | http://egc-votacion1718.es/api/post/preguntaDelete.json |
'''Parámetros:''' | '''Parámetros:''' | ||
Línea 274: | Línea 329: | ||
'''Ejemplo:''' | '''Ejemplo:''' | ||
− | DELETE http://egc-votacion1718.es/api/ | + | DELETE http://egc-votacion1718.es/api/post/preguntaDelete.json?id=1 |
'''Formato JSON:''' | '''Formato JSON:''' | ||
{ | { | ||
Línea 281: | Línea 336: | ||
} | } | ||
− | == Obtención de una respuesta == | + | == Respuesta == |
+ | Definimos las API que dependerán del objeto "Respuesta" | ||
+ | |||
+ | === Obtención de una respuesta === | ||
Se hace una petición GET con los parámetros siguientes y se devolverá un JSON con la siguiente información. | Se hace una petición GET con los parámetros siguientes y se devolverá un JSON con la siguiente información. | ||
Línea 303: | Línea 361: | ||
} | } | ||
− | == Creación de una respuesta == | + | === Obtención de todas las respuestas de una pregunta === |
+ | |||
+ | Se hace una petición GET con la id de la preguntay se devolverá un JSON con un array de respuestas. | ||
+ | |||
+ | '''URL:''' | ||
+ | http://egc-votacion1718.es/api/get/respuestas.json | ||
+ | |||
+ | '''Parámetros:''' | ||
+ | * id: Identificador de la pregunta. | ||
+ | |||
+ | '''Ejemplo:''' | ||
+ | GET http://egc-votacion1718.es/api/get/respuestas.json?id=1 | ||
+ | |||
+ | '''Formato JSON:''' | ||
+ | |||
+ | [{ | ||
+ | "id": "3", | ||
+ | "id_pregunta": "1", | ||
+ | "texto_respuesta": "¿Prefieres consola o pc?", | ||
+ | "seleccionada": "true", | ||
+ | }, | ||
+ | { | ||
+ | |||
+ | "id": "4", | ||
+ | "id_pregunta": "1", | ||
+ | "texto_respuesta": "¿Que consola prefieres?", | ||
+ | "seleccionada": "true", | ||
+ | }] | ||
+ | |||
+ | === Creación de una respuesta === | ||
Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | ||
'''URL:''' | '''URL:''' | ||
− | http://egc-votacion1718.es/api/ | + | http://egc-votacion1718.es/api/post/respuestaCreate |
Línea 313: | Línea 400: | ||
* id_pregunta: identificador de la pregunta a la que pertenece | * id_pregunta: identificador de la pregunta a la que pertenece | ||
* texto_respuesta: texto de la respuesta que se puede seleccionar | * texto_respuesta: texto de la respuesta que se puede seleccionar | ||
− | * seleccionada: parametro para indicar si esa pregunta se puede seleccionar | + | * seleccionada: parametro para indicar si esa pregunta se puede seleccionar (Inicialmente estará a false y al crearse no podrá editarse) |
'''Ejemplo:''' | '''Ejemplo:''' | ||
− | POST http://egc-votacion1718.es/api/ | + | POST http://egc-votacion1718.es/api/post/respuestaCreate?id_pregunta=1&texto_respuesta=Ejemplo |
'''Formato JSON:''' | '''Formato JSON:''' | ||
Línea 324: | Línea 411: | ||
"id_pregunta": "1", | "id_pregunta": "1", | ||
"texto_respuesta": "Consola", | "texto_respuesta": "Consola", | ||
− | "seleccionada": " | + | "seleccionada": "false", |
} | } | ||
} | } | ||
− | == Edición de una respuesta== | + | === Edición de una respuesta=== |
Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | ||
'''URL:''' | '''URL:''' | ||
− | http://egc-votacion1718.es/api/post/ | + | http://egc-votacion1718.es/api/post/respuestaEdit.json |
'''Parámetros:''' | '''Parámetros:''' | ||
Línea 343: | Línea 430: | ||
'''Ejemplo:''' | '''Ejemplo:''' | ||
− | POST http://egc-votacion1718.es/api/post/ | + | POST http://egc-votacion1718.es/api/post/respuestaEdit.json?id=1&id_pregunta=3&texto_respuesta=Prueba&seleccionada=true |
'''Formato JSON:''' | '''Formato JSON:''' | ||
Línea 355: | Línea 442: | ||
"seleccionada": "true", | "seleccionada": "true", | ||
} | } | ||
− | + | ||
− | == Eliminación de una respuesta == | + | === Eliminación de una respuesta === |
Se hace una petición DELETE (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | Se hace una petición DELETE (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información. | ||
'''URL:''' | '''URL:''' | ||
− | http://egc-votacion1718.es/api/ | + | http://egc-votacion1718.es/api/post/respuesta.json |
'''Parámetros:''' | '''Parámetros:''' | ||
Línea 367: | Línea 454: | ||
'''Ejemplo:''' | '''Ejemplo:''' | ||
− | DELETE http://egc-votacion1718.es/api/ | + | DELETE http://egc-votacion1718.es/api/post/respuesta.json?id=1 |
'''Formato JSON:''' | '''Formato JSON:''' | ||
{ | { | ||
Línea 375: | Línea 462: | ||
=Template= | =Template= | ||
− | + | En este apartado se mostrarán los templates de las distintas vistas que nuestro subsistema requiere | |
+ | ==Template Creación== | ||
+ | Esta sería la plantilla para el formulario que permitiría crear una votación. | ||
+ | <nowiki> | ||
+ | <html lang="es"> | ||
+ | <head> | ||
+ | <meta charset="utf-8"/> | ||
+ | <title>Administracion de votaciones</title> | ||
+ | </head> | ||
+ | <body> | ||
+ | <form method="post"> | ||
+ | <label for="titulo">Name:</label> | ||
+ | <input name="titulo" type="text" value=""/> | ||
+ | <br /> | ||
+ | <div> | ||
+ | <label for="censo">Censo:</label> | ||
+ | <select id="censo" name="id_censo" required> | ||
+ | <option value="">Seleccione un grupo</option> | ||
+ | <option value="id_c1">Censo A</option> | ||
+ | <option value="id_c2">Censo B</option> | ||
+ | <option value="id_c3">Censo C</option> | ||
+ | <option value="id_c4">...</option> | ||
+ | </select> | ||
+ | </div> | ||
+ | <div> | ||
+ | <label for="votacion"> Votación:</label> | ||
+ | <select id="votacion" name="id_votacion" required> | ||
+ | <option value="">Seleccione una votación</option> | ||
+ | <option value="id_v1">Votación tipo A</option> | ||
+ | <option value="id_v2">Votación tipo B</option> | ||
+ | <option value="id_v3">Votación tipo C</option> | ||
+ | <option value="id_v4">...</option> | ||
+ | </select> | ||
+ | </div> | ||
+ | <label for="pregunta1">Pregunta 1: ¿ Asistió a las jornadas de EGC ?</label> | ||
+ | <input type="radio" name="respuesta1" value="si" checked> Sí<br> | ||
+ | <input type="radio" name="respuesta1" value="no" checked> No<br> | ||
+ | {% if respuesta1.value=="si" %} | ||
+ | <label for="pregunta2">Pregunta 2: Califique la organización de estas</label> | ||
+ | <input type="radio" name="respuesta2" value="excelente" checked> excelente<br> | ||
+ | <input type="radio" name="respuesta2" value="muy buena" checked> muy buena<br> | ||
+ | <input type="radio" name="respuesta2" value="buenisima" checked> buenisima<br> | ||
+ | <input name="" type="submit" value="Save"/> | ||
+ | </form> | ||
+ | </body> | ||
+ | </html> | ||
+ | </nowiki> | ||
− | = Gestión = | + | = Gestión de grupo = |
== Gestión de la comunicación == | == Gestión de la comunicación == | ||
Línea 391: | Línea 524: | ||
* En revisión: Se añadirán las tareas finalizadas a falta de una revisión por el resto del equipo. | * En revisión: Se añadirán las tareas finalizadas a falta de una revisión por el resto del equipo. | ||
* Hecho: Se añadirán las tareas terminadas una vez revisadas. | * Hecho: Se añadirán las tareas terminadas una vez revisadas. | ||
− | |||
== Gestión del código == | == Gestión del código == | ||
Línea 402: | Línea 534: | ||
Diferenciaremos dos tipos básicos(types). Luego un breve título que resuma la funcionalidad de dicho commit. En la descripción añadiremos a que funcionalidad pertenece y una descripción. Al final del commit podemos añadir a que incidencia pertenece, si procede. | Diferenciaremos dos tipos básicos(types). Luego un breve título que resuma la funcionalidad de dicho commit. En la descripción añadiremos a que funcionalidad pertenece y una descripción. Al final del commit podemos añadir a que incidencia pertenece, si procede. | ||
− | Types: add | + | Types: |
− | Ejemplos de funcionalidades: Editar votación,Crear votación, Borrar votación y Desarrolllo API. '' | + | |
+ | add: Una nueva caracteristica. | ||
+ | fix: Se soluciono un bug. | ||
+ | docs: Se realizaron cambios en la documentacion. | ||
+ | style: Se aplico formato, comas y puntos faltantes, etc; Sin cambios en el codigo. | ||
+ | refactor: Refactorizacion del codigo en produccion. | ||
+ | test: Se añadieron pruebas, refactorizacion de pruebas; Sin cambios en el codigo. | ||
+ | chore: Actualizacion de tareas de build, configuracion del admin. de paquetes; Sin cambios en el codigo. | ||
+ | |||
+ | Ejemplos de funcionalidades: Editar votación,Crear votación, Borrar votación y Desarrolllo API. ''Las funcionalidades pueden ser genéricas o específicas.'' | ||
A continuación se detalla un ejemplo: | A continuación se detalla un ejemplo: |
Revisión actual del 00:45 15 ene 2018
Contenido
Entregables
https://drive.google.com/file/d/1Ure7m5MRAu0DDYnDgXZ-5GDsfzve3uyk/view
Miembros y contacto
- Pablo Tinoco Castillo - Grupo 1, ptinococastillo@gmail.com Coordinador
- Francisco Fernández Angulo -Grupo 1
- Jesús Martos Alé - Grupo 2
- Miguel Medrano Gil - Grupo 2
- Gonzalo Trabado García - Grupo 2
Especificaciones
Objetivo del subsistema
- Gestionar la creación de una votación
- Gestionar la edición de una votación
- Gestionar el borrado de una votación
Consideraciones
- Repositorio del proyecto: https://github.com/EGC-G2-Trabajo-1718/AdministracionVotaciones
- Página Opera: http://opera.eii.us.es/egc/public/trabajo/ver/id/98
Tecnología usada
Subsistema: Administración de votaciones Lenguaje/Herramienta: Java 1.8 -> Eclipse Jee Neon 3 Sistema de gestión de bibliotecas: Maven Bibliotecas: Jackson (Para API) además de Spring Necesita Base de datos: Sí, se usará MySQL5.5 Workbench. Habrá 3 tablas (Votación, Pregunta Respuesta).
Estructura de datos
Haremos uso de la tablas votación, pregunta y respuesta:
Votación: - id: (int) identificador de la votación [pk, autoincrementable] - id_censo: (int) identificador del censo [fk, not null] - id_grupo: (int) identificador del grupo que puede votar en la votación [fk, not null] - titulo: (string/varchar) titulo de la votación a crear [blank, not null] - descripcion: (string/varchar) descripción de los objetivos de la votación [blank, not null] - fecha_ini: (datetime) fecha de inicio de la votación [not null, default=fecha_actual] - fecha_fin: (datetime) fecha de fin de la votación[not null] - clave: (String) clave que se usará para cifrar los votos [not null] Pregunta: - id: (int) identificador de la pregunta [pk, autoincrementable] - id_votacion: (int) identificador de la votación a la que pertenece [fk, not null] - texto_pregunta: (string/varchar) texto de la pregunta que se realiza [blank, not null] - tipo_pregunta: (string/varchar ?) parametro para establecer el tipo de pregunta (Abierta, cerrada) [blank, not null] - id_dependencia: (int) identificador para definir dependencias entre preguntas [fk] Respuesta: - id: (int) identificador de la respuesta [pk, autoincrementable] - id_pregunta: (int) identificador de la pregunta [fk, not null] - texto_respuesta: (string/varchar) texto de la respuesta [blank, not null]
Esta sería la estructura de las tablas sobre las que trabajaríamos, una votación tendrá varias preguntas que podrán ser abiertas o cerradas, y estas a su vez podrán depender de otras preguntas. Las preguntas podrán tener una o más respuestas.
API
Las funcionalidades aquí descritas y especificadas no son finales. Debido a la diversidad de funcionalidades y necesidades de los otros grupos, éstas pueden variar a lo largo del desarrollo (sea debido al despliege, conflictos, etc).
Dependencias
En primer lugar estableceremos cuales van a ser las dependencias de nuestro módulo con otros.
Por una parte, necesitaremos información a cerca de si el usuario tiene los permisos necesarios para crear, editar o borrar una votación. Obtendremos esta información recibiendo los datos pertinentes del módulo de "Autenticación", para que a la hora de crear una votación se le asignen los permisos con los que se podrá crear.
Por otro lado, necesitamos saber qué usuarios van a poder votar en dicha votación. Para ello necesitaremos obtener esta información recibiendo los datos necesarios del módulo de "Censo", para que a la hora de crear la votación también podamos asignar al grupo de usuarios que podrán votar.
Para terminar, nuestro módulo deberá poder ofrecer la información completa de la votación al módulo de "Cabina de votación" para que se lleve a cabo. Para ello, ofreceremos una API que procedemos a definir.
Es probable que otros subsistemas necesiten funciones API que no ofrezcamos, por lo que crearemos los métodos necesarios que puedan ir surgiendo durante el proyecto.
Votación
Definimos las API que dependerán del objeto "Votación"
Obtención de una votación
Se hace una petición GET con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-votacion1718.es/api/get/votacion.json
Parámetros:
* id: Identificador de la votación.
Ejemplo:
GET http://egc-votacion1718.es/api/get/votacion.json?id=1
Formato JSON:
{ "votacion": { "id": "1", "id_censo": "288", "id_grupo": "31", "titulo": "Votación sobre consolas", "descripción": "En esta votación comprobaremos si hay mas gamers de PC o consolas", "fecha_ini": "31/07/2017 07:07", "fecha_fin": "31/08/2017 07:07" "id_preguntas": "[2,3]"
} }
Creación de una votación
Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-votacion1718.es/api/post/votacionCreate
Parámetros:
* id_censo: identificador del censo * id_grupo: identificador del grupo que puede votar en la votación * titulo: titulo de la votación a crear * descripcion: descripción de los objetivos de la votación * fecha_ini: fecha de inicio de la votación * fecha_fin: fecha de fin de la votación * clave: clave para asignar a la votación
Ejemplo:
POST http://egc-votacion1718.es/api/votacionCreate.json?id_censo=1&id_grupo=2&titulo=Prueba&descripcion=Descripcion&fecha_ini=10/10/17 10:30&fecha_fin=11/10/17 10:30
Formato JSON:
{ "votacion": { "id": "1", "id_censo": "288", "id_grupo": "31", "titulo": "Votación sobre consolas", "descripción": "En esta votación comprobaremos si hay mas gamers de PC o consolas", "fecha_ini": "31/07/2017 07:07", "fecha_fin": "31/08/2017 07:07" "clave": "clave" } }
Edición de una votación
Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-votacion1718.es/api/post/editVotacion.json
Parámetros:
* id: identificador de la votación * id_censo: identificador del censo * id_grupo: identificador del grupo que puede votar en la votación * titulo: titulo de la votación a crear * descripcion: descripción de los objetivos de la votación * fecha_ini: fecha de inicio de la votación * fecha_fin: fecha de fin de la votación * clave: clave de la votación
Aquellos parámetros que no se introduzcan no se modificarán.
Ejemplo:
POST http://egc-votacion1718.es/api/post/editVotacion.json?id=1&titulo=Titulo_modificado
Formato JSON:
{ "exito": true, "mensaje": "Editado con éxito", "votacion": { "id": "1", "id_censo": "288", "id_grupo": "31", "titulo": "Votación sobre consolas", "descripción": "En esta votación comprobaremos si hay mas gamers de PC o consolas", "fecha_ini": "31/07/2017 07:07", "fecha_fin": "31/08/2017 07:07" "clave": "clave" } }
Eliminación de una votación
Se hace una petición DELETE (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-votacion1718.es/api/post/votacionDelete.json
Parámetros:
* id: Identificador de la votación a eliminar.
Ejemplo:
DELETE http://egc-votacion1718.es/api/post/votacionDelete.json?id=1
Formato JSON:
{ "exito": true, "mensaje": "Eliminado con éxito" }
Pregunta
Definimos las API que dependerán del objeto "Pregunta"
Obtención de una pregunta
Se hace una petición GET con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-votacion1718.es/api/get/pregunta.json
Parámetros:
* id: Identificador de la pregunta.
Ejemplo:
GET http://egc-votacion1718.es/api/get/pregunta.json?id=7
Formato JSON:
{ "pregunta": { "id": "7", "id_votacion": "1", "texto_pregunta": "¿Prefieres consola o pc?", "tipo_pregunta": "Abierta", "id_dependencia": "2", "id_respuestas":"[2,5]" } }
Obtención de todas las preguntas de una votación
Se hace una petición GET con la id de la votación y se devolverá un JSON con un array de votaciones.
URL:
http://egc-votacion1718.es/api/get/preguntas.json
Parámetros:
* id: Identificador de la votacion.
Ejemplo:
GET http://egc-votacion1718.es/api/get/respuestas.json?id=1
Formato JSON:
[{ "id": "7", "id_votacion": "1", "texto_pregunta": "¿Prefieres consola o pc?", "tipo_pregunta": "Abierta", "id_dependencia": "2", "id_respuestas":"[2,5]", }, { "id": "8", "id_votacion": "1", "texto_pregunta": "¿Que consola prefieres?", "tipo_pregunta": "Abierta", "id_dependencia": "7", "id_respuestas":"[1,9]" }]
Creación de una pregunta
Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-votacion1718.es/api/post/preguntaCreate
Parámetros:
* id_votación: identificador de la votación a la que pertenece * texto_pregunta: texto de la pregunta que se realiza * tipo_pregunta: parametro para establecer el tipo de pregunta * id_dependencia: parametro para identificar si la pregunta depende de otra
Ejemplo:
POST http://egc-votacion1718.esapi/post/preguntaCreate?id_votacion=1&texto_pregunta=Ejemplo&tipo_pregunta=Abierta&id_dependencia=2
Formato JSON:
{ "pregunta": { "id": "7", "id_votacion": "1", "texto_pregunta": "¿Prefieres consola o pc?", "tipo_pregunta": "Abiera", "id_dependencia": "2", } }
Edición de una pregunta
Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-votacion1718.es/api/post/preguntaEdit.json
Parámetros:
* id: identificador de la pregunta a editar * id_votación: identificador de la votación a la que pertenece
* texto_pregunta: texto de la pregunta que se realiza * tipo_pregunta: parametro para establecer el tipo de pregunta * id_dependencia: parametro para identificar si la pregunta depende de otra * respuestas: parametro para identificar las respuestas asociadas (Por id, ejemplo: [1,2])
Aquellos parámetros que no se introduzcan no se modificarán.
Ejemplo:
POST http://egc-votacion1718.es/api/post/edicionPregunta.json?id=1&id_votacion=3&texto_pregunta=Prueba&tipo_pregunta=Cerrada&id_dependencia=8
Formato JSON:
{ "exito": true, "mensaje": "Editado con éxito", "pregunta": { "id": "7", "id_votacion": "1", "texto_pregunta": "¿Prefieres consola o pc?", "tipo_pregunta": "Abiera", "id_dependencia": "2", "respuestas": "[1,2]" }
Eliminación de una pregunta
Se hace una petición DELETE (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-votacion1718.es/api/post/preguntaDelete.json
Parámetros:
* id: Identificador de la pregunta a eliminar.
Ejemplo:
DELETE http://egc-votacion1718.es/api/post/preguntaDelete.json?id=1
Formato JSON:
{ "exito": true, "mensaje": "Eliminado con éxito" }
Respuesta
Definimos las API que dependerán del objeto "Respuesta"
Obtención de una respuesta
Se hace una petición GET con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-votacion1718.es/api/get/respuesta.json
Parámetros:
* id: Identificador de la respuesta.
Ejemplo:
GET http://egc-votacion1718.es/api/get/respuesta.json?id=3
Formato JSON:
{ "respuesta": { "id": "3", "id_pregunta": "1", "texto_respuesta": "¿Prefieres consola o pc?", "seleccionada": "true", } }
Obtención de todas las respuestas de una pregunta
Se hace una petición GET con la id de la preguntay se devolverá un JSON con un array de respuestas.
URL:
http://egc-votacion1718.es/api/get/respuestas.json
Parámetros:
* id: Identificador de la pregunta.
Ejemplo:
GET http://egc-votacion1718.es/api/get/respuestas.json?id=1
Formato JSON:
[{ "id": "3", "id_pregunta": "1", "texto_respuesta": "¿Prefieres consola o pc?", "seleccionada": "true", }, { "id": "4", "id_pregunta": "1", "texto_respuesta": "¿Que consola prefieres?", "seleccionada": "true", }]
Creación de una respuesta
Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-votacion1718.es/api/post/respuestaCreate
Parámetros:
* id_pregunta: identificador de la pregunta a la que pertenece * texto_respuesta: texto de la respuesta que se puede seleccionar * seleccionada: parametro para indicar si esa pregunta se puede seleccionar (Inicialmente estará a false y al crearse no podrá editarse)
Ejemplo:
POST http://egc-votacion1718.es/api/post/respuestaCreate?id_pregunta=1&texto_respuesta=Ejemplo
Formato JSON:
{ "respuesta": { "id": "3", "id_pregunta": "1", "texto_respuesta": "Consola", "seleccionada": "false", } }
Edición de una respuesta
Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-votacion1718.es/api/post/respuestaEdit.json
Parámetros: * id: identificador de la respuesta a editar * id_pregunta: identificador de la pregunta a la que pertenece
* texto_respuesta: texto de la respuesta que se realiza * seleccionada: parametro para indicar si se ha seleccionado la respuesta
Aquellos parámetros que no se introduzcan no se modificarán.
Ejemplo:
POST http://egc-votacion1718.es/api/post/respuestaEdit.json?id=1&id_pregunta=3&texto_respuesta=Prueba&seleccionada=true
Formato JSON:
{ "exito": true, "mensaje": "Editado con éxito", "respuesta": { "id": "3", "id_pregunta": "1", "texto_respuesta": "¿Prefieres consola o pc?", "seleccionada": "true", }
Eliminación de una respuesta
Se hace una petición DELETE (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-votacion1718.es/api/post/respuesta.json
Parámetros:
* id: Identificador de la respuesta a eliminar.
Ejemplo:
DELETE http://egc-votacion1718.es/api/post/respuesta.json?id=1
Formato JSON:
{ "exito": true, "mensaje": "Eliminado con éxito" }
Template
En este apartado se mostrarán los templates de las distintas vistas que nuestro subsistema requiere
Template Creación
Esta sería la plantilla para el formulario que permitiría crear una votación.
<html lang="es"> <head> <meta charset="utf-8"/> <title>Administracion de votaciones</title> </head> <body> <form method="post"> <label for="titulo">Name:</label> <input name="titulo" type="text" value=""/> <br /> <div> <label for="censo">Censo:</label> <select id="censo" name="id_censo" required> <option value="">Seleccione un grupo</option> <option value="id_c1">Censo A</option> <option value="id_c2">Censo B</option> <option value="id_c3">Censo C</option> <option value="id_c4">...</option> </select> </div> <div> <label for="votacion"> Votación:</label> <select id="votacion" name="id_votacion" required> <option value="">Seleccione una votación</option> <option value="id_v1">Votación tipo A</option> <option value="id_v2">Votación tipo B</option> <option value="id_v3">Votación tipo C</option> <option value="id_v4">...</option> </select> </div> <label for="pregunta1">Pregunta 1: ¿ Asistió a las jornadas de EGC ?</label> <input type="radio" name="respuesta1" value="si" checked> Sí<br> <input type="radio" name="respuesta1" value="no" checked> No<br> {% if respuesta1.value=="si" %} <label for="pregunta2">Pregunta 2: Califique la organización de estas</label> <input type="radio" name="respuesta2" value="excelente" checked> excelente<br> <input type="radio" name="respuesta2" value="muy buena" checked> muy buena<br> <input type="radio" name="respuesta2" value="buenisima" checked> buenisima<br> <input name="" type="submit" value="Save"/> </form> </body> </html>
Gestión de grupo
Gestión de la comunicación
Se realizará la comunicación mediante la aplicación "Telegram", creando un grupo en el que se encuentran todos los miembros del equipo. Las reuniones no presenciales serán gestionadas telematicamente con "Skype". Cada semana todos los miembros se reunirán para hablar del estado actual, los problemas encontrados y los siguientes pasos a seguir.
Gestión del trabajo
La gestión del trabajo, la creación de tareas y la asignación de las mismas se harán mediante la plataforma "Trello". Se crearán los siguientes tableros:
* Lista de tareas: Se añadirán las tareas que se vayan identificando durante el desarrollo del trabajo. * En proceso: Se añadirán las tareas a este tablero una vez se asignen y se empiecen a trabajar. * En revisión: Se añadirán las tareas finalizadas a falta de una revisión por el resto del equipo. * Hecho: Se añadirán las tareas terminadas una vez revisadas.
Gestión del código
Gestionaremos el código a desarrollar mediante la plataforma "GitHub".
Formato de commits
El formato general de los commits parte de la siguiente base. Diferenciaremos dos tipos básicos(types). Luego un breve título que resuma la funcionalidad de dicho commit. En la descripción añadiremos a que funcionalidad pertenece y una descripción. Al final del commit podemos añadir a que incidencia pertenece, si procede.
Types:
add: Una nueva caracteristica. fix: Se soluciono un bug. docs: Se realizaron cambios en la documentacion. style: Se aplico formato, comas y puntos faltantes, etc; Sin cambios en el codigo. refactor: Refactorizacion del codigo en produccion. test: Se añadieron pruebas, refactorizacion de pruebas; Sin cambios en el codigo. chore: Actualizacion de tareas de build, configuracion del admin. de paquetes; Sin cambios en el codigo.
Ejemplos de funcionalidades: Editar votación,Crear votación, Borrar votación y Desarrolllo API. Las funcionalidades pueden ser genéricas o específicas.
A continuación se detalla un ejemplo:
Título del commit: fix: redirección errónea tras emitir voto. Cuerpo del commit: Emision Voto - Después de que el usuario emitiese su voto este era redireccionado a una URL no existente. Ahora el usuario es redireccionado al panel principal. Pie del commit: Closes #<número de la incidencia en GitHub>.
Gestión de ramas
Tendremos la rama "master" donde estará todo nuestro código estable, una rama "development" donde se unirán las ramas de desarrollo para ser validadas, y una vez validada pasará a la rama master. Por último cada miembro tendrá su propia rama de desarrollo (usuario UVUS), para evitar posibles errores a la hora de unir las ramas, cada miembro deberá de programar la funcionalidad o el trozo de código que se le ha sido asignado.
Gestión de incidencias
Gestionaremos las incidencias que vayan apareciendo durante el trabajo con la herramienta propia de GitHub.
Crearemos en primer lugar un Milestone en GitHub por cada Milestone de la asignatura para saber el plazo que tenemos para resolver la incidencia y a ellos asignaremos las incidencias (Según proceda). Usaremos las labels por defecto de GitHub, y crearemos nuevas si fuese necesario.
Plan de actuación
Las incidencias se tratarán con la siguiente nomenclatura:
Título: <breve título> Prioridad: a seleccionar: urgente, alto, medio, bajo. Estado: Open, En curso, Finalizado. Los dos primeros estados estarán por defecto al crear al issues, se considerará "En curso" cuando la issues este asignada y abierta. El último estado se prouduce cuando se cierra la incidencia en GitHub. Descripción: <descripción detallada de la incidencia> La descripción puede incluir imagenes o la salida emitida por la incidencia. Etiquetas: <etiquetas de GitHub para clasificar las incidencias> requirement: para el cumplimiento de requisitos de nuestro subsistema. 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. wontfix: incidencias que no serán resueltas por el momento.
El plan de actuación cuando se encuentre una incidencia será el siguiente:
- Se identificará cual es la incidencia.
- Añadiremos dicha incidencia con la nomenclatura descrita en github al proyecto, milestone y label que corresponda.
- En caso de no tener claro quien podría resolver la incidencia, se notificará al coordinador del grupo via "Telegram" para que la revise y asigne según su criterio; además de al resto del equipo por "Telegram".
- Una vez resuelta (Antes del plazo del Milestone asignado) se cerrará en "GitHub", previa validación del Coordinador y el creador de la issue. Se notificará por "Telegram" al equipo.