]> git.leonardobizzoni.com Git - highschool-graduation-project/commitdiff
Doc + createMigration script
authorLeonardoBizzoni <leo2002714@gmail.com>
Mon, 18 Apr 2022 09:32:18 +0000 (11:32 +0200)
committerLeonardoBizzoni <leo2002714@gmail.com>
Mon, 18 Apr 2022 09:32:18 +0000 (11:32 +0200)
README.org
scripts/createMigration.sh [new file with mode: 0755]
www/core/Database.php

index 0517831d2d02e6f4646f62bb0cbd9685884b7cc0..4e0bd79791022da34f78cb6d37735530a0ebc03a 100644 (file)
@@ -210,18 +210,33 @@ if ($ruleName == self::RULE_MATCH && $value != $this->{$rule["match"]}) {
 #+end_src
 
 *** Database class
-Utilizza PDO per effettuare la connessione al server mariadb in esecuzione nel docker container.
+Il compito della Database class è quello di effettuare una connessione al server mariadb in esecuzione sul docker container ed applicare delle [[./www/Migrations][migration]].
 Sia le credenziali di accesso al database che il domain service name (DSN) sono salvate nel file "www/.env" (vedi [[./www/.env.example][.env.example]]) e per leggerle si utilizza il package [[https://github.com/vlucas/phpdotenv][phpdotenv]].
 
-Installazione:
+Installazione phpdotenv:
 #+begin_src bash
 cd www
 composer require vlucas/phpdotenv
 #+end_src
 
+Attraverso il metodo "applyMigrations()" la Database class è in grado di:
+- creare la migration table se non esiste nel DB
+- selezionare le migration presenti nella migration table
+- per ogni migration non presente nel DB, creare un'istanza ed esegue il metodo "up()"
+
 ** Migrations
-Contengono i cambiamenti efftuati in ordine sul database.
-/Formato migration: touch "m_$(date +%s)_name.php"/
+
+È importante che le migration class siano ordinate e che seguano tutte lo stesso stile di nomeclatura.
+La creazione di una migration class può essere effettuata tramite lo script [[./scripts/createMigration.sh][createMigration]].
+#+begin_src bash
+./scripts/createMigration pathToMigrationsDir migrationName
+#+end_src
+
+Queste classi vengono istanziate dalla core class *Database* attraverso il metodo "applyMigrations()".
+
+Ogni migration class è formata da _almeno_ 2 metodi:
+- "up()": esegue del codice SQL per effettuare una modifica al DB
+- "down()": esegue del codice SQL per annullare la modifica
 
 ** Models
 Le classi "Model" gestiscono i dati presenti nel database e controlla che i dati seguano delle determinate regole.
diff --git a/scripts/createMigration.sh b/scripts/createMigration.sh
new file mode 100755 (executable)
index 0000000..5c7e694
--- /dev/null
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+name="m_$(date +%s)_$2"
+echo -e "<?php
+
+use app\\\core\\\Application;
+
+class $name
+{
+    public function up()
+    {
+        \$db = Application::\$app->db;
+        \$sql = \"\";
+        \$db->pdo->exec(\$sql);
+    }
+
+    public function down()
+    {
+        \$db = Application::\$app->db;
+        \$sql = \"\";
+        \$db->pdo->exec(\$sql);
+    }
+}
+?>" > "$1/$name.php"
index 8c070750f1f562f6abc8d1ea6c8ff36a915ea246..35c1c31da5d0807b2ac070256b14dd15566c583d 100644 (file)
@@ -71,11 +71,12 @@ CREATE TABLE IF NOT EXISTS migrations (
 
     public function saveMigration(array $migrations)
     {
-        $str = implode(",", array_map(fn($m) => "('$m')", $migrations));
+        $str = implode(",", array_map(fn ($m) => "('$m')", $migrations));
         $this->pdo->prepare("INSERT INTO migrations(migration) VALUES $str")->execute();
     }
 
-    protected function log(string $message) {
-        echo "[".date("Y/m/d H:m:s")."] - $message".PHP_EOL;
+    protected function log(string $message)
+    {
+        echo "[" . date("Y/m/d H:m:s") . "] - $message" . PHP_EOL;
     }
 }