B. Carpeta « srv / bd »

Versión para imprimir.

1. srv / bd / Bd.php

1<?php
2
3require_once __DIR__ . "/../modelo/Pasatiempo.php";
4
5class Bd
6{
7
8 private static ?PDO $conexion = null;
9
10 static function getConexion(): PDO
11 {
12 if (self::$conexion === null) {
13 self::$conexion = new PDO(
14 // cadena de conexión
15 "sqlite:sincronizacion.db",
16 // usuario
17 null,
18 // contraseña
19 null,
20 // Opciones: conexiones persistentes y lanza excepciones.
21 [PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
22 );
23
24 self::$conexion->exec(
25 'CREATE TABLE IF NOT EXISTS PASATIEMPO (
26 PAS_UUID TEXT NOT NULL,
27 PAS_NOMBRE TEXT NOT NULL,
28 PAS_MODIFICACION INTEGER NOT NULL,
29 PAS_ELIMINADO INTEGER NOT NULL,
30 CONSTRAINT PAS_PK
31 PRIMARY KEY(PAS_UUID),
32 CONSTRAINT PAS_UUID_NV
33 CHECK(LENGTH(PAS_UUID) > 0),
34 CONSTRAINT PAS_NOM_NV
35 CHECK(LENGTH(PAS_NOMBRE) > 0)
36 )'
37 );
38 }
39
40 return self::$conexion;
41 }
42}
43

2. srv / bd / pasatiempoAgrega.php

1<?php
2
3require_once __DIR__ . "/Bd.php";
4require_once __DIR__ . "/../modelo/Pasatiempo.php";
5
6function pasatiempoAgrega(Pasatiempo $modelo)
7{
8
9 $modelo->valida();
10
11 $conexion = Bd::getConexion();
12
13 $conexion->prepare(
14 "INSERT INTO PASATIEMPO
15 (PAS_UUID, PAS_NOMBRE, PAS_MODIFICACION, PAS_ELIMINADO)
16 VALUES
17 (:uuid, :nombre, :modificacion, :eliminado)"
18 )
19 ->execute([
20 ":uuid" => $modelo->uuid,
21 ":nombre" => $modelo->nombre,
22 ":modificacion" => $modelo->modificacion,
23 ":eliminado" => $modelo->eliminado ? 1 : 0
24 ]);
25}
26

3. srv / bd / pasatiempoBusca.php

1<?php
2
3require_once __DIR__ . "/../../lib/php/fetch.php";
4require_once __DIR__ . "/Bd.php";
5require_once __DIR__ . "/../modelo/Pasatiempo.php";
6
7function pasatiempoBusca(string $uuid): false|Pasatiempo
8{
9
10 $conexion = Bd::getConexion();
11
12 return fetch(
13 $conexion->prepare(
14 "SELECT
15 PAS_UUID AS uuid,
16 PAS_NOMBRE AS nombre,
17 PAS_MODIFICACION AS modificacion,
18 PAS_ELIMINADO AS eliminado
19 FROM PASATIEMPO
20 WHERE PAS_UUID = :uuid"
21 ),
22 [":uuid" => $uuid],
23 PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE,
24 Pasatiempo::class
25 );
26}
27

4. srv / bd / pasatiempoConsultaNoEliminados.php

1<?php
2
3require_once __DIR__ . "/../../lib/php/fetchAll.php";
4require_once __DIR__ . "/Bd.php";
5require_once __DIR__ . "/../modelo/Pasatiempo.php";
6
7/** @return Pasatiempo[] */
8function pasatiempoConsultaNoEliminados()
9{
10 $conexion = Bd::getConexion();
11
12 return fetchAll(
13 $conexion->query(
14 "SELECT
15 PAS_UUID AS uuid,
16 PAS_NOMBRE AS nombre,
17 PAS_MODIFICACION AS modificacion,
18 PAS_ELIMINADO AS eliminado
19 FROM PASATIEMPO
20 WHERE PAS_ELIMINADO = 0
21 ORDER BY PAS_NOMBRE"
22 ),
23 [],
24 PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE,
25 Pasatiempo::class
26 );
27}
28

5. srv / bd / pasatiempoModifica.php

1<?php
2
3require_once __DIR__ . "/Bd.php";
4require_once __DIR__ . "/../modelo/Pasatiempo.php";
5
6function pasatiempoModifica(Pasatiempo $modelo)
7{
8
9 $modelo->valida();
10
11 $conexion = Bd::getConexion();
12
13 $conexion->prepare(
14 "UPDATE PASATIEMPO
15 SET
16 PAS_NOMBRE = :nombre,
17 PAS_MODIFICACION = :modificacion,
18 PAS_ELIMINADO = :eliminado
19 WHERE PAS_UUID = :uuid"
20 )
21 ->execute([
22 ":uuid" => $modelo->uuid,
23 ":nombre" => $modelo->nombre,
24 ":modificacion" => $modelo->modificacion,
25 ":eliminado" => $modelo->eliminado ? 1 : 0
26 ]);
27}
28