From cc7986d48d3098a1738a3a88857929472e71ce84 Mon Sep 17 00:00:00 2001
From: Sofiane Lasri <alasri250@gmail.com>
Date: Mon, 21 Nov 2022 10:23:18 +0100
Subject: [PATCH] Ajout de la documentation.

---
 README.md        | 140 +++++++++++++++++++++++++++++++++++++++++++++++
 models/Objet.php |  69 +++++++++++++++++++----
 2 files changed, 198 insertions(+), 11 deletions(-)
 create mode 100644 README.md

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..cdc4a95
--- /dev/null
+++ b/README.md
@@ -0,0 +1,140 @@
+# Documentation
+## Objet
+Les fonctions publiques statiques retournent des arrays se basant sur ce format :
+````php
+[
+    "status" => "fail|success",
+    "message" => "message d'erreur"
+]
+``````
+
+### addObject
+Permet d'insérer un objet dans la base de données
+* @param String $tableName
+* @param array $columns
+* @return array|string[]
+
+Le paramètre ``$columns`` doit être un array indexé comme ceci :
+````php
+[
+    "index" => "valeur",
+    "index2" => "valeur2"
+]
+````
+
+Retourne en plus `pdoError` de l'index `message` en cas d'erreur.
+````php
+[
+    "status" => "fail",
+    "message" => "L'insertion de l'objet a échoué.",
+    "pdoError" => $e
+]
+````
+
+### describeObject
+Permet de décrire une table représentant un objet. Exécute ``SHOW FULL COLUMNS FROM $tableName`` sur le serveur.
+* @param $tableName
+* @return array
+
+Retourne ``columns``.
+````php
+[
+    "status" => "success",
+    "columns" => [
+        // Colonnes du retour de la commande sql
+    ]
+]
+````
+
+### modifyObject
+Permet la modification d'un objet dans la base de données
+* @param String $tableName
+* @param array $id
+* @param array $columns
+* @return array|string[]
+
+Le paramètre ``$id`` doit respecter ce format :
+````php
+[
+    "name"  => "nom_de_la_colonne",
+    "value" => "Valeur de la clé primaire"
+]
+````
+
+Le paramètre ``$columns`` doit être un array indexé comme ceci :
+````php
+[
+    "index" => "valeur",
+    "index2" => "valeur2"
+]
+````
+
+### getObject
+Permet la récupération d'un objet depuis la base de données
+* @param string $tableName
+* @param array $id
+* @return array|string[]
+
+Le paramètre ``$id`` doit respecter ce format :
+````php
+[
+    "name"  => "nom_de_la_colonne",
+    "value" => "Valeur de la clé primaire"
+]
+````
+
+Retourne ``data`` avec les colonnes de l'objet demandé.
+````php
+[
+    "status" => "success",
+    "message" => "Récupération réussie.",
+    "data" => [
+        // Colonnes
+    ]
+]
+````
+
+### verifyTableAndFormat
+Permet de vérifier le format du nom de la table et des nom des colonnes + vérifier l'existance de la table.
+* @param String $tableName
+* @param array|null $columns
+* @return array|string[]
+
+Le paramètre ``$columns`` est optionnel. Renverra en plus `pdoError` de l'index `message` en cas d'erreur si `$columns`
+a été utilisé.
+````php
+[
+    "status" => "fail",
+    "message" => "Le format du nom de la table est incorrect."
+]
+````
+````php
+[
+    "status" => "fail",
+    "message" => "La table $tableName ne semble pas exister.",
+    "pdoError" => $e
+]
+````
+````php
+[
+    "status" => "success",
+    "message" => "Validation réussie."
+]
+````
+
+## Routes
+Les pages sont générées à partir du paramètre url ``action=nomDeLaPage``.
+```php
+"lireAuteur"    => ControleurAuteur::lireAuteur(),
+"lireAuteurs"   => ControleurAuteur::lireAuteurs(),
+"creerObjet"    => ControleurObjet::createObject(),
+"lireAdherent"  => ControleurAdherent::lireAdherent(),
+"lireAdherents" => ControleurAdherent::lireAdherents(),
+"lireLivre"     => ControleurLivre::lireLivre(),
+"lireLivres"    => ControleurLivre::lireLivres(),
+"describeTable" => ControleurObjet::describeTable(),
+default         => ControleurAuteur::lireAuteur(),
+```
+
+### describeTable
+describeTable retourne le résultat de ``ControleurObjet::describeTable()`` au format JSON.
\ No newline at end of file
diff --git a/models/Objet.php b/models/Objet.php
index 67aef6b..43cd3e8 100644
--- a/models/Objet.php
+++ b/models/Objet.php
@@ -99,6 +99,13 @@ class Objet
         }
     }
 
+    /**
+     * Permet la modification d'un objet dans la base de données
+     * @param String $tableName
+     * @param array $id
+     * @param array $columns
+     * @return array|string[]
+     */
     public static function modifyObject(String $tableName, array $id, array $columns) : array
     {
         $result["status"] = "success";
@@ -132,13 +139,53 @@ class Objet
         return $result;
     }
 
+    /**
+     * Permet la récupération d'un objet depuis la base de données
+     * @param string $tableName
+     * @param array $id
+     * @return array|string[]
+     */
+    public static function getObject(string $tableName, array $id) : array
+    {
+        $validation = Objet::verifyTableAndFormat($tableName);
+        if($validation["status"] !== "success"){
+            return $validation;
+        }
+        if(empty($id["name"]) || empty($id["value"]) || !isAlphaNumeric($id["name"])){
+            return [
+                "status" => "fail",
+                "message" => "L'identifiant de la table envoyé est incorrect!"
+            ];
+        }
+
+        // On prépare la requête
+        $queryString = ("SELECT * FROM $tableName WHERE " . $id["name"] . "=?");
+        $insertQuery = Database::pdo()->prepare($queryString);
+        try{
+            // Et on l'exécute
+            $insertQuery->execute([$id["name"]]);
+        } catch (PDOException $e) {
+            return [
+                "status" => "fail",
+                "message" => "La récupération de l'objet a échoué.",
+                "pdoError" => $e
+            ];
+        }
+
+        return [
+            "status" => "success",
+            "message" => "Récupération réussie.",
+            "data" => $insertQuery->fetch(PDO::FETCH_ASSOC)
+        ];
+    }
+
     /**
      * Permet de vérifier le format du nom de la table et des nom des colonnes + vérifier l'existance de la table.
      * @param String $tableName
-     * @param array $columns
+     * @param array|null $columns
      * @return array|string[]
      */
-    public static function verifyTableAndFormat(string $tableName, array $columns) : array
+    public static function verifyTableAndFormat(string $tableName, array $columns = null) : array
     {
         // On va vérifier que $tableName est bien en format alphanumérique
         if(!isAlphaNumeric($tableName)){
@@ -159,15 +206,15 @@ class Objet
             ];
         }
 
-        // Nous pouvons commencer l'insertion
-
-        // On va vérifier que l'index de chaque est bien en format alphanumérique
-        foreach($columns as $index => $value){
-            if(!isAlphaNumeric($index)){
-                return [
-                    "status" => "fail",
-                    "message" => "Le format " . htmlspecialchars($index) . " est incorrect."
-                ];
+        if(!is_null($columns)){
+            // On va vérifier que l'index de chaque est bien en format alphanumérique
+            foreach($columns as $index => $value){
+                if(!isAlphaNumeric($index)){
+                    return [
+                        "status" => "fail",
+                        "message" => "Le format " . htmlspecialchars($index) . " est incorrect."
+                    ];
+                }
             }
         }
         return [
-- 
GitLab