A. php / Bd.php

1
<?php
2
3
require_once __DIR__ . "/lib/rolBusca.php";
4
require_once __DIR__ . "/lib/rolAgrega.php";
5
6
class Bd
7
{
8
9
 private static ?PDO $pdo = null;
10
11
 static function pdo(): PDO
12
 {
13
  if (self::$pdo === null) {
14
15
   self::$pdo = new PDO(
16
    // cadena de conexión
17
    "sqlite:" . __DIR__ . "/srvamuchos.db",
18
    // usuario
19
    null,
20
    // contraseña
21
    null,
22
    // Opciones: pdos no persistentes y lanza excepciones.
23
    [PDO::ATTR_PERSISTENT => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
24
   );
25
26
   self::$pdo->exec(
27
    'CREATE TABLE IF NOT EXISTS USUARIO (
28
      USU_ID INTEGER,
29
      USU_SAN TEXT NOT NULL,
30
      CONSTRAINT USU_PK
31
       PRIMARY KEY(USU_ID),
32
      CONSTRAINT USU_SAN_UNQ
33
       UNIQUE(USU_SAN),
34
      CONSTRAINT USU_SAN_NV
35
       CHECK(LENGTH(USU_SAN) > 0)
36
     )'
37
   );
38
   self::$pdo->exec(
39
    'CREATE TABLE IF NOT EXISTS ROL (
40
      ROL_ID TEXT NOT NULL,
41
      ROL_DESCRIPCION TEXT NOT NULL,
42
      CONSTRAINT ROL_PK
43
       PRIMARY KEY(ROL_ID),
44
      CONSTRAINT ROL_ID_NV
45
       CHECK(LENGTH(ROL_ID) > 0),
46
      CONSTRAINT ROL_DESCR_UNQ
47
       UNIQUE(ROL_DESCRIPCION),
48
      CONSTRAINT ROL_DESCR_NV
49
       CHECK(LENGTH(ROL_DESCRIPCION) > 0)
50
     )'
51
   );
52
   self::$pdo->exec(
53
    'CREATE TABLE IF NOT EXISTS USU_ROL (
54
      USU_ID INTEGER NOT NULL,
55
      ROL_ID TEXT NOT NULL,
56
      CONSTRAINT USU_ROL_PK
57
       PRIMARY KEY(USU_ID, ROL_ID),
58
      CONSTRAINT USU_ROL_USU_FK
59
       FOREIGN KEY (USU_ID) REFERENCES USUARIO(USU_ID),
60
      CONSTRAINT USU_ROL_ROL_FK
61
       FOREIGN KEY (ROL_ID) REFERENCES ROL(ROL_ID)
62
     )'
63
   );
64
65
   self::$pdo->beginTransaction();
66
67
   if (rolBusca(self::$pdo, "Administrador") === false) {
68
    rolAgrega(
69
     bd: self::$pdo,
70
     id: "Administrador",
71
     descripcion: "Administra el sistema."
72
    );
73
   }
74
75
   if (rolBusca(self::$pdo, "Cliente") === false) {
76
    rolAgrega(
77
     bd: self::$pdo,
78
     id: "Cliente",
79
     descripcion: "Realiza compras."
80
    );
81
   }
82
83
   self::$pdo->commit();
84
  }
85
86
  return self::$pdo;
87
 }
88
}
89
skip_previous skip_next