1 | <?php |
2 | |
3 | require_once __DIR__ . "/../../lib/php/ProblemDetails.php"; |
4 | |
5 | class Pasatiempo |
6 | { |
7 | |
8 | public int $id; |
9 | public string $nombre; |
10 | |
11 | public function __construct(string $nombre = "", int $id = 0) |
12 | { |
13 | $this->id = $id; |
14 | $this->nombre = $nombre; |
15 | } |
16 | |
17 | public function valida() |
18 | { |
19 | if ($this->nombre === "") |
20 | throw new ProblemDetails( |
21 | status: ProblemDetails::BadRequest, |
22 | type: "/error/faltanombre.html", |
23 | title: "Falta el nombre.", |
24 | ); |
25 | } |
26 | } |
27 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../lib/php/ejecutaServicio.php"; |
4 | require_once __DIR__ . "/../lib/php/JsonResponse.php"; |
5 | require_once __DIR__ . "/../lib/php/leeTexto.php"; |
6 | require_once __DIR__ . "/modelo/Pasatiempo.php"; |
7 | require_once __DIR__ . "/bd/pasatiempoAgrega.php"; |
8 | |
9 | ejecutaServicio(function () { |
10 | $nombre = leeTexto("nombre"); |
11 | $modelo = new Pasatiempo(nombre: $nombre === null ? "" : trim($nombre)); |
12 | pasatiempoAgrega($modelo); |
13 | $id = htmlentities($modelo->id); |
14 | return JsonResponse::created("/srv/srvPasatiempoBusca.php?id=$id", [ |
15 | "id" => ["value" => $modelo->id], |
16 | "nombre" => ["value" => $modelo->nombre], |
17 | ]); |
18 | }); |
19 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../lib/php/ejecutaServicio.php"; |
4 | require_once __DIR__ . "/../lib/php/ProblemDetails.php"; |
5 | require_once __DIR__ . "/../lib/php/pdFaltaId.php"; |
6 | require_once __DIR__ . "/../lib/php/leeEntero.php"; |
7 | require_once __DIR__ . "/bd/pasatiempoBusca.php"; |
8 | |
9 | ejecutaServicio(function () { |
10 | $id = leeEntero("id"); |
11 | if ($id === null) throw pdFaltaId(); |
12 | $modelo = pasatiempoBusca($id); |
13 | if ($modelo === false) { |
14 | $htmlId = htmlentities($id); |
15 | throw new ProblemDetails( |
16 | status: ProblemDetails::NotFound, |
17 | type: "/error/pasatiemponoencontrado.html", |
18 | title: "Pasatiempo no encontrado.", |
19 | detail: "No se encontró ningún pasatiempo con el id $htmlId.", |
20 | ); |
21 | } else { |
22 | return [ |
23 | "id" => ["value" => $modelo->id], |
24 | "nombre" => ["value" => $modelo->nombre], |
25 | ]; |
26 | } |
27 | }); |
28 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../lib/php/ejecutaServicio.php"; |
4 | require_once __DIR__ . "/bd/pasatiempoConsulta.php"; |
5 | |
6 | ejecutaServicio(function () { |
7 | $lista = pasatiempoConsulta(); |
8 | $render = ""; |
9 | foreach ($lista as $modelo) { |
10 | $id = htmlentities($modelo->id); |
11 | $nombre = htmlentities($modelo->nombre); |
12 | $render .= |
13 | "<li> |
14 | <p> |
15 | <a href='modifica.html?id=$id'>$nombre</a> |
16 | </p> |
17 | </li>"; |
18 | } |
19 | return ["lista" => ["innerHTML" => $render]]; |
20 | }); |
21 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../lib/php/ejecutaServicio.php"; |
4 | require_once __DIR__ . "/../lib/php/pdFaltaId.php"; |
5 | require_once __DIR__ . "/../lib/php/JsonResponse.php"; |
6 | require_once __DIR__ . "/../lib/php/leeEntero.php"; |
7 | require_once __DIR__ . "/bd/pasatiempoElimina.php"; |
8 | |
9 | ejecutaServicio(function () { |
10 | $id = leeEntero("id"); |
11 | if ($id === null) throw pdFaltaId(); |
12 | pasatiempoElimina($id); |
13 | return JsonResponse::noContent(); |
14 | }); |
15 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../lib/php/ejecutaServicio.php"; |
4 | require_once __DIR__ . "/../lib/php/pdFaltaId.php"; |
5 | require_once __DIR__ . "/../lib/php/leeEntero.php"; |
6 | require_once __DIR__ . "/../lib/php/leeTexto.php"; |
7 | require_once __DIR__ . "/modelo/Pasatiempo.php"; |
8 | require_once __DIR__ . "/bd/pasatiempoModifica.php"; |
9 | |
10 | ejecutaServicio(function () { |
11 | $id = leeEntero("id"); |
12 | if ($id === null) throw pdFaltaId(); |
13 | $nombre = leeTexto("nombre"); |
14 | $modelo = |
15 | new Pasatiempo(nombre: $nombre === null ? "" : trim($nombre), id: (int) $id); |
16 | pasatiempoModifica($modelo); |
17 | return [ |
18 | "id" => ["value" => $modelo->id], |
19 | "nombre" => ["value" => $modelo->nombre], |
20 | ]; |
21 | }); |
22 |
1 | <?php |
2 | |
3 | function bdCrea(PDO $con) |
4 | { |
5 | $con->exec( |
6 | 'CREATE TABLE IF NOT EXISTS PASATIEMPO ( |
7 | PAS_ID INTEGER, |
8 | PAS_NOMBRE TEXT NOT NULL, |
9 | CONSTRAINT PAS_PK |
10 | PRIMARY KEY(PAS_ID), |
11 | CONSTRAINT PAS_NOM_UNQ |
12 | UNIQUE(PAS_NOMBRE) |
13 | )' |
14 | ); |
15 | } |
16 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/bdCrea.php"; |
4 | |
5 | class Bd |
6 | { |
7 | |
8 | private static ?PDO $conexion = null; |
9 | |
10 | static function getConexion(): PDO |
11 | { |
12 | if (self::$conexion === null) { |
13 | |
14 | self::$conexion = new PDO( |
15 | // cadena de conexión |
16 | "sqlite:srvbd.db", |
17 | // usuario |
18 | null, |
19 | // contraseña |
20 | null, |
21 | // Opciones: conexiones persistentes y lanza excepciones. |
22 | [PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] |
23 | ); |
24 | |
25 | bdCrea(self::$conexion); |
26 | } |
27 | |
28 | return self::$conexion; |
29 | } |
30 | } |
31 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../modelo/Pasatiempo.php"; |
4 | require_once __DIR__ . "/Bd.php"; |
5 | |
6 | function pasatiempoAgrega(Pasatiempo $modelo) |
7 | { |
8 | $modelo->valida(); |
9 | $con = Bd::getConexion(); |
10 | $stmt = $con->prepare( |
11 | "INSERT INTO PASATIEMPO |
12 | (PAS_NOMBRE) |
13 | VALUES |
14 | (:nombre)" |
15 | ); |
16 | $stmt->execute([":nombre" => $modelo->nombre]); |
17 | /* Si usas una secuencia para generar el id, |
18 | * pasa como parámetro de lastInsertId el |
19 | * nombre de dicha secuencia, debes |
20 | * ejecutarlo antes del INSERT y pasarle el |
21 | * id generado al SQL. */ |
22 | $modelo->id = $con->lastInsertId(); |
23 | } |
24 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../modelo/Pasatiempo.php"; |
4 | require_once __DIR__ . "/Bd.php"; |
5 | |
6 | function pasatiempoBusca(int $id): false|Pasatiempo |
7 | { |
8 | $con = Bd::getConexion(); |
9 | $stmt = $con->prepare( |
10 | "SELECT |
11 | PAS_ID AS id, |
12 | PAS_NOMBRE AS nombre |
13 | FROM PASATIEMPO |
14 | WHERE PAS_ID = :id" |
15 | ); |
16 | $stmt->execute([":id" => $id]); |
17 | $stmt->setFetchMode( |
18 | PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, |
19 | Pasatiempo::class |
20 | ); |
21 | return $stmt->fetch(); |
22 | } |
23 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../../lib/php/recibeFetchAll.php"; |
4 | require_once __DIR__ . "/../modelo/Pasatiempo.php"; |
5 | require_once __DIR__ . "/Bd.php"; |
6 | |
7 | /** @return Pasatiempo[] */ |
8 | function pasatiempoConsulta() |
9 | { |
10 | $con = Bd::getConexion(); |
11 | $stmt = $con->query( |
12 | "SELECT |
13 | PAS_ID AS id, |
14 | PAS_NOMBRE AS nombre |
15 | FROM PASATIEMPO |
16 | ORDER BY PAS_NOMBRE" |
17 | ); |
18 | $resultado = $stmt->fetchAll( |
19 | PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, |
20 | Pasatiempo::class |
21 | ); |
22 | return recibeFetchAll($resultado); |
23 | } |
24 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/Bd.php"; |
4 | |
5 | function pasatiempoElimina(int $id) |
6 | { |
7 | $con = Bd::getConexion(); |
8 | $stmt = $con->prepare( |
9 | "DELETE FROM PASATIEMPO |
10 | WHERE PAS_ID = :id" |
11 | ); |
12 | $stmt->execute([":id" => $id]); |
13 | } |
14 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../modelo/Pasatiempo.php"; |
4 | require_once __DIR__ . "/Bd.php"; |
5 | |
6 | function pasatiempoModifica(Pasatiempo $modelo) |
7 | { |
8 | $modelo->valida(); |
9 | $con = Bd::getConexion(); |
10 | $stmt = $con->prepare( |
11 | "UPDATE PASATIEMPO |
12 | SET PAS_NOMBRE = :nombre |
13 | WHERE PAS_ID = :id" |
14 | ); |
15 | $stmt->execute([ |
16 | ":id" => $modelo->id, |
17 | ":nombre" => $modelo->nombre |
18 | ]); |
19 | } |
20 |