2 Commits

Author SHA1 Message Date
Juanjo cbdbd8bc4b Añadir tiempoRespuesta 2026-10-01 14:12:36 +02:00
jorge befc6a7cc1 Merge pull request 'add tiempo de respuesta' (#26) from add_tiempo into main
Reviewed-on: #26
2026-10-01 13:03:54 +02:00
4 changed files with 75 additions and 43 deletions
+9 -2
View File
@@ -229,7 +229,13 @@ class Juego
* - la respuesta pertenece a esa pregunta * - la respuesta pertenece a esa pregunta
* - el usuario no ha respondido ya esa pregunta * - el usuario no ha respondido ya esa pregunta
*/ */
public static function registrarRespuesta($idPartida, $idUsuario, $idPartidaxPregunta, $idRespuesta) public static function registrarRespuesta(
$idPartida,
$idUsuario,
$idPartidaxPregunta,
$idRespuesta,
$tiempoRespuesta
)
{ {
$conexion = conexionBD(); $conexion = conexionBD();
if (is_array($conexion)) { if (is_array($conexion)) {
@@ -298,7 +304,8 @@ class Juego
null, null,
$idPartidaxPregunta, $idPartidaxPregunta,
$idUsuario, $idUsuario,
$idRespuesta $idRespuesta,
$tiempoRespuesta
); );
$guardado = $almacenada->guardarRespuesta(); $guardado = $almacenada->guardarRespuesta();
+2
View File
@@ -24,6 +24,8 @@ class Respuesta{
$consulta->bindParam(':idPregunta', $this->idPregunta); $consulta->bindParam(':idPregunta', $this->idPregunta);
$consulta->bindParam(':nombreRespuesta', $this->nombreRespuesta); $consulta->bindParam(':nombreRespuesta', $this->nombreRespuesta);
$consulta->bindParam(':correcta', $this->correcta); $consulta->bindParam(':correcta', $this->correcta);
$consulta->execute(); $consulta->execute();
$respuesta = [ $respuesta = [
'exito' => 'La respuesta se guardó correctamente.', 'exito' => 'La respuesta se guardó correctamente.',
+33 -23
View File
@@ -7,43 +7,53 @@ class RespuestaAlmacenada {
public $idPartidaxPregunta; public $idPartidaxPregunta;
public $idUsuario; public $idUsuario;
public $idRespuesta; public $idRespuesta;
public $tiempoRespuesta;
public function __construct($idRespuestaAlmacenada = null, $idPartidaxPregunta = null, $idUsuario = null, $idRespuesta = null) { public function __construct($idRespuestaAlmacenada = null, $idPartidaxPregunta = null, $idUsuario = null, $idRespuesta = null, $tiempoRespuesta = null) {
$this->idRespuestaAlmacenada = $idRespuestaAlmacenada; $this->idRespuestaAlmacenada = $idRespuestaAlmacenada;
$this->idPartidaxPregunta = $idPartidaxPregunta; $this->idPartidaxPregunta = $idPartidaxPregunta;
$this->idUsuario = $idUsuario; $this->idUsuario = $idUsuario;
$this->idRespuesta = $idRespuesta; $this->idRespuesta = $idRespuesta;
$this->tiempoRespuesta = $tiempoRespuesta;
} }
/** /**
* Guarda la respuesta que ha seleccionado un usuario en una pregunta de la partida. * Guarda la respuesta que ha seleccionado un usuario en una pregunta de la partida.
*/ */
public function guardarRespuesta() { public function guardarRespuesta() {
$conexion = conexionBD(); $conexion = conexionBD();
if (is_array($conexion)) return $conexion;
try { if (is_array($conexion)) {
$sql = "INSERT INTO respuestaalmacenada (idPartidaxPregunta, idUsuario, idRespuesta) return $conexion;
VALUES (:idPartidaxPregunta, :idUsuario, :idRespuesta)";
$consulta = $conexion->prepare($sql);
$consulta->bindParam(':idPartidaxPregunta', $this->idPartidaxPregunta);
$consulta->bindParam(':idUsuario', $this->idUsuario);
$consulta->bindParam(':idRespuesta', $this->idRespuesta);
$consulta->execute();
return [
'exito' => 'Respuesta del usuario almacenada correctamente.',
'exito_tecnico' => $conexion->lastInsertId()
];
} catch (PDOException $error) {
return [
'error' => 'Ocurrió un error al guardar la respuesta del jugador.',
'error_tecnico' => $error->getMessage()
];
}
} }
try {
$sql = "INSERT INTO respuestaalmacenada
(idPartidaxPregunta, idUsuario, idRespuesta, tiempoRespuesta)
VALUES
(:idPartidaxPregunta, :idUsuario, :idRespuesta, :tiempoRespuesta)";
$consulta = $conexion->prepare($sql);
$consulta->bindParam(':idPartidaxPregunta', $this->idPartidaxPregunta);
$consulta->bindParam(':idUsuario', $this->idUsuario);
$consulta->bindParam(':idRespuesta', $this->idRespuesta);
$consulta->bindParam(':tiempoRespuesta', $this->tiempoRespuesta);
$consulta->execute();
return [
'exito' => 'Respuesta almacenada correctamente.'
];
} catch (PDOException $error) {
return [
'error' => 'Ocurrió un error al guardar la respuesta.',
'error_tecnico' => $error->getMessage()
];
}
}
/** /**
* Obtiene los aciertos totales de un usuario en una partida específica. * Obtiene los aciertos totales de un usuario en una partida específica.
* Útil para calcular las estadísticas individuales al terminar el juego. * Útil para calcular las estadísticas individuales al terminar el juego.
+31 -18
View File
@@ -74,34 +74,47 @@ switch ($orden) {
case 'responder': case 'responder':
if (!isset($_POST['idPartidaxPregunta']) || !isset($_POST['idRespuesta'])){ if (
echo json_encode([ !isset($_POST['idPartidaxPregunta']) ||
'error' => 'Faltan datos para registrar la respuesta.' !isset($_POST['idRespuesta']) ||
]); !isset($_POST['tiempoRespuesta'])
) {
echo json_encode([
'error' => 'Faltan datos para registrar la respuesta.'
]);
break; break;
} }
$idPartidaxPregunta = intval($_POST['idPartidaxPregunta']); $idPartidaxPregunta = intval($_POST['idPartidaxPregunta']);
$idRespuesta = intval($_POST['idRespuesta']);
$tiempoRespuesta = intval($_POST['tiempoRespuesta']);
$idRespuesta = intval($_POST['idRespuesta']); if (
$idPartidaxPregunta <= 0 ||
if ($idPartidaxPregunta <= 0 || $idRespuesta <= 0){ $idRespuesta <= 0 ||
$tiempoRespuesta < 0
echo json_encode([ ) {
'error' => 'Los datos de la respuesta no son válidos.' echo json_encode([
]); 'error' => 'Los datos de la respuesta no son válidos.'
]);
break; break;
} }
// Registramos la respuesta del usuario // Registramos la respuesta del usuario junto con su tiempo de respuesta
$resultado = Juego::registrarRespuesta($idPartida, $idUsuario, $idPartidaxPregunta, $idRespuesta); $resultado = Juego::registrarRespuesta(
$idPartida,
$idUsuario,
$idPartidaxPregunta,
$idRespuesta,
$tiempoRespuesta
);
echo json_encode($resultado); echo json_encode($resultado);
break; break;
// Finalizar la partida y registrar los aciertos del usuario // Finalizar la partida y registrar los aciertos del usuario