Skip to content
Snippets Groups Projects
Commit 26cd9e83 authored by josborg's avatar josborg
Browse files

cambio del modelo TODO

parent 97e38c73
Branches
No related tags found
No related merge requests found
Showing
with 182 additions and 63 deletions
......@@ -10,6 +10,7 @@ import { AdminComponent } from './admin/admin.component';
const routes: Routes = [
{ path: 'client/encuestas', component: EncuestasListarComponent },
{ path: 'client/encuestas/new', component: EncuestasEditarComponent },
{ path: 'client/encuestas/:id/edit', component: EncuestasEditarComponent },
{ path: 'client/encuestas/:id/preguntas', component: PreguntasComponent },
{ path: 'client/encuestas/:id/estadisticas', component: EstadisticasComponent },
{ path: 'client/auth', component: AuthComponent },
......
......@@ -14,9 +14,17 @@
</fieldset>
<div class="col-sm-1"></div>
<fieldset class="form-group ms-5 ps-3 col-sm-5">
<p>deadline</p>
<p>estado de la encuesta</p>
<p>tipo de ranking</p>
<p>estado de la encuesta</p>
<input type="text" class="form-control" [(ngModel)]="encuesta.status" required name="status" />
<p>Tiempo maxTiempo para responder</p>
<input type="number" class="form-control" [(ngModel)]="encuesta.maxTiempo" required name="maxTiempo" />
<p>Fecha y hora a la que se abrira la encuaesta</p>
<input type="date" class="form-control" [(ngModel)]="encuesta.inicio" required name="inicio" />
<p>Fecha y hora a la que se cerrará</p>
<input type="date" class="form-control" [(ngModel)]="encuesta.fin" required name="fin" />
</fieldset>
</div>
<div class="row p-4">
......
......@@ -84,12 +84,11 @@ export class EncuestasEditarComponent implements OnInit {
//Se ejecuta al realizar en el template la acción de enviar el formulario
onEncuestaSubmit() {
if (this.id) { // si existe id estamos en edicion, si no en añadir
//this.editEncuesta();
this.editEncuesta();
} else { // Parte añadir un pedido
//this.addEncuesta();
}
this.addEncuesta();
}
}
// Edita el contenido del pedido
editEncuesta(){
......
......@@ -21,11 +21,13 @@
<td>{{encuesta.code}}</td>
<td>{{encuesta.name}}</td>
<td>{{encuesta.createdAt}}</td>
<td><a id="editButton" class="btn btn-warning mb-2 btn-block" [routerLink]="['/client/encuestas/', encuesta.id, 'preguntas']">Ver</a></td>
<td><a id="editButton" class="btn btn-primary mb-2 btn-block" [routerLink]="['/client/encuestas/', encuesta.id, 'preguntas']">Ver</a>
<a id="" class="btn btn-warning mb-2 btn-block" [routerLink]="['/client/encuestas/', encuesta.id, 'edit']">Edit</a></td>
</tr>
</tbody>
</table>
<button class="btn btn-primary mb-2 btn-block" [routerLink]="['/client/encuestas/new']">Nueva</button>
</div>
</div>
</div>
......
......@@ -33,12 +33,13 @@ export class PreguntasComponent implements OnInit {
newSolucion = {
id: 0,
user: "",
idEncuesta: 0,
respuestas: [],
inicio: 0,
fin: 0,
diff: 0
diff: 0,
user: "",// Nickname del usuario que ha realizado la solicion
anonymous: false // Opcion de si la solucion es anonima o no
};
solucion = this.newSolucion as Solucion;
......@@ -48,7 +49,9 @@ export class PreguntasComponent implements OnInit {
idEncuesta: 0,
idPregunta: 0,
idOpcion: 0,
tiempo: 0
tiempo: 0,
correct: false // de se ha acertado esta valor sera true pero que sea false no significara que se ha fallado
// necesariamete si no que todavia no se pude conocer si se ha hacertado o no
};
respuesta = this.newRespuesta as Respuesta;
......@@ -89,7 +92,7 @@ export class PreguntasComponent implements OnInit {
this.r = undefined;
this.respuesta.idPregunta = this.preguntas[this.i].id;
this.solucion.respuestas.push(this.respuesta);
this.respuesta = <Respuesta>{ id: 0, idEncuesta: 0, idPregunta: 0, idOpcion: 0, tiempo: 0};
this.respuesta = <Respuesta>{ id: 0, idEncuesta: 0, idPregunta: 0, idOpcion: 0, tiempo: 0, correct: false};
console.log(this.solucion.respuestas.length);
......@@ -161,6 +164,4 @@ export class PreguntasComponent implements OnInit {
clearInterval(this.interval);
}
}
......@@ -2,14 +2,14 @@ import { Estado } from "./app.estados-model";
import { Pregunta } from "./app.preguntas-model";
export interface Encuesta {
id: Number,
name: String,
code: String,
descripcion: String,
createdAt: Date,
preguntas: Pregunta[],
inicio: Date,
fin: Date,
maxTiempo: Number,
status:Estado
id: Number,// Numero que idintifica al encuasta
name: String,// Titilo de la enciasta
code: String,// Codigo afabético en mayusculas que identifica a cada encuasta
descripcion: String,// Descricion de la encuasta
createdAt: Date,//Fecha de creacion de la encuasta
preguntas: Pregunta[],//Pregintas de las que consta la encuasta
inicio: Date,// Hora a la que se habre la encuaesta
fin: Date,// HOra a la que se cierra
maxTiempo: Number,//Timpo maximo para responder en segundos
status:Estado//Estado de la encuasta
}
export enum Estado {
CERRADA,
ABIERTA,
FINALIZADA
CERRADA, // la encuasta no se pude realizar pero si editar por el creasor de la misma
ABIERTA, // la enciasta de puede responder
FINALIZADA//la encuesta no se pude ni contestar ni editar
}
\ No newline at end of file
export interface Respuesta {
id: Number,
idEncuesta: Number,
idPregunta: Number,
idOpcion: Number,
tiempo: Number
id: Number,//identificador de la respuesta
idEncuesta: Number, // id de la encuasta a la que se refiere la respuesta
idPregunta: Number, // id de la pregunta a la que se refiere la respuesta
idOpcion: Number, // id de la opcion seleceionodada como respuesta
tiempo: Number, //tiempo que se ha tarda de responder
correct: boolean // de se ha acertado esta valor sera true pero que sea false no significara que se ha fallado
// necesariamete si no que todavia no se pude conocer si se ha hacertado o no
}
\ No newline at end of file
import { Respuesta } from "./app.respuestas-model";
export interface Solucion {
id: Number,
idEncuesta: Number,
respuestas: Respuesta[]
inicio: Number,
fin: Number,
diff: number,
user: string
id: Number,//Numeor que idintifica la solucion
idEncuesta: Number, // Id de la encasta a la que esta asociada solucion creada
respuestas: Respuesta[] // respuastas a las preguntas de la encuesta que constituyen al solucion
inicio: Number, // Mometo en el que se empieza a realizar la solucion
fin: Number, // Modmenro en el que se envia la solucion
diff: number, // Diferancia entre de tiempos fin menos inicio
user: string // Nickname del usuario que ha realizado la solicion
anonymous: boolean // Opcion de si la solucion es anonima o no
}
package com.uva.surveys.controller;
import java.sql.Date;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
//import java.util.Optional;
......@@ -10,6 +12,7 @@ import com.uva.surveys.model.Solucion;
import com.uva.surveys.model.Respuesta;
import com.uva.surveys.model.Opcion;
import com.uva.surveys.model.Encuesta;
import com.uva.surveys.model.Estado;
import com.uva.surveys.model.Link;
import com.uva.surveys.repository.EncuestaRepository;
import com.uva.surveys.repository.LinkRepository;
......@@ -27,7 +30,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
@RestController
......@@ -147,6 +150,41 @@ public class EncuestaController {
return list;
}
/**
* Edita la encuasta con el id especificado
* una peticion PUT:/encuestas/:id
*
* @param enable
* @return
*/
@PutMapping(/*consumes = MediaType.APPLICATION_JSON_VALUE*/ value= "/{id}")
public String putEncuesta(@PathVariable Integer id, @RequestBody Encuesta newEncuesta) {
try {
List<Pregunta> preguntas = newEncuesta.getPreguntas();
for (Pregunta pregunta : preguntas){
List<Opcion> opciones = pregunta.getOpciones();
for (Opcion opcion : opciones) {
opcion.setCorrect(opcionRepository.findById(opcion.getId()).get().getCorrect());
opcion.setPregunta(pregunta);
}
pregunta.setEncuesta(newEncuesta);
}
encuestaRepository.saveAndFlush(newEncuesta);
return "Nuevo registro creado";
} catch (Exception e) {
// Se deja esta parte comentada como alternativa a la gestion de errores
// propuesta
// throw new ResponseStatusException(HttpStatus.UNPROCESSABLE_ENTITY, "Error al
// crear el nuevo registro.");
// Se usa este sistema de gestión de errores porque es mas sencillo hacer que el
// cliente reciba el mensaje de error
e.printStackTrace();
throw new EncuestaException("Error al crear el nuevo registro.");
}
}
/**
* Borra el encuaesta con id param{id} apartir de
* una peticion DELETE:/encuestas/{id}
......@@ -200,6 +238,14 @@ public class EncuestaController {
public String newSolucion(@RequestBody Solucion newSolucion, @PathVariable Integer id) {
try {
Date date = Date.valueOf(LocalDate.now());
Encuesta encuesta = encuestaRepository.findById(newSolucion.getIdEncuesta()).get();
if(date.after(encuesta.getInicio()) && date.before(encuesta.getFin())){ // no abierta
return "La encuasta no esta abierta";
}else if (encuesta.getStatus().equals(Estado.ABIERTA)){
List<Respuesta> respuestas = newSolucion.getRespuestas();
ArrayList<Integer> idOpcionesCorrectas = new ArrayList<>();
......@@ -223,6 +269,7 @@ public class EncuestaController {
solucionRepository.saveAndFlush(newSolucion);
return "Nuevo registro creado";
}
} catch (Exception e) {
// Se deja esta parte comentada como alternativa a la gestion de errores
......@@ -234,6 +281,7 @@ public class EncuestaController {
e.printStackTrace();
throw new EncuestaException("Error al crear el nuevo registro.");
}
return null;
}
......@@ -245,8 +293,23 @@ public class EncuestaController {
* @return
*/
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE, value = "/{id}/soluciones")
public List<Solucion> getRespuestaByIdEncuesta(@PathVariable Integer id) {
public List<Solucion> getSolucionesByIdEncuesta(@PathVariable Integer id) {
Encuesta encuesta = encuestaRepository.findById(id).get();
List<Solucion> soluciones = solucionRepository.findByIdEncuesta(id);
for(Solucion solucion: soluciones){
if(!encuesta.getStatus().equals(Estado.FINALIZADA)){
List<Respuesta> respuestas = solucion.getRespuestas();
for(Respuesta respuesta: respuestas){
respuesta.setCorrect(false);
}
solucion.setRespuestas(respuestas);
}
if(solucion.getAnonymous()){
solucion.setUser("NoName");
}
}
return soluciones;
}
......
......@@ -28,24 +28,32 @@ public class Encuesta {
private String name;
@Size(max = 10) // si no se pone esta anotación lo creo por defecto con size=255
private String code;
@Size(max = 255)
private String descripcion;
private Date created_at;
@OneToMany(mappedBy = "encuesta", fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
private List<Pregunta> preguntas;//OJO
private Date created_at;
private Date inicio;
private Date fin;
private Integer maxTiempo;
private Estado status;
Encuesta() {
this.created_at = Date.valueOf(LocalDate.now());
}
Encuesta(String name, Estado status, String code,
List<Pregunta> preguntas) {
Encuesta(String name, Estado status, String code, Date inicio, Date fin,
List<Pregunta> preguntas, Integer maxTiempo) {
this.name = name;
this.code = code;
this.status = status;
this.preguntas = preguntas;
this.created_at = Date.valueOf(LocalDate.now());
this.inicio = inicio;
this.fin = fin;
this.maxTiempo = maxTiempo;
}
public Integer getId() {
......@@ -88,6 +96,30 @@ public class Encuesta {
this.created_at = created_at;
}
public Date getInicio() {
return this.inicio;
}
public void setInicio(Date inicio) {
this.inicio = inicio;
}
public Date getFin() {
return this.fin;
}
public void setFin(Date fin) {
this.fin = fin;
}
public Integer getMaxTiempo(){
return this.maxTiempo;
}
public void setMaxTiempo(Integer maxTiempo){
this.maxTiempo = maxTiempo;
}
public Estado getStatus() {
return this.status;
}
......
......@@ -24,24 +24,26 @@ public class Solucion {
@Id
@GeneratedValue
private Integer id;
private String user;
private Integer idEncuesta;
@OneToMany(mappedBy = "solucion", fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
private List<Respuesta> respuestas;//OJO
private Long inicio;
public Long fin;
private Long fin;
private String user;
private boolean anonymous;
Solucion() {
}
Solucion(Integer idEncuesta, String user, List<Respuesta> elementos, Long inicio, Long fin) {
Solucion(Integer idEncuesta, String user, List<Respuesta> elementos, Long inicio, Long fin, boolean anonymous) {
this.idEncuesta = idEncuesta;
this.user = user;
this.inicio = inicio;
this.fin = fin;
this.anonymous = anonymous;
}
public Integer getId() {
......@@ -96,4 +98,12 @@ public class Solucion {
return getFin() - getInicio();
}
public boolean getAnonymous() {
return this.anonymous;
}
public void setAnonymous(boolean anonymous) {
this.anonymous = anonymous;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment