config_actions

{
    "GET/": {
        "controler": "getView",
        "view": "login",
        "title": "Authentification"
    },
    "GET/index": {
        "controler": "getView",
        "view": "index",
        "title": "Bienvenue dans le framework Node/Express R504",
        "path_minismall": "/home/supervisor/Documents/MiniSmall"
    },
    "GET/logout": {
        "controler": "logout",
        "view": "login",
        "title": "Bienvenue dans le framework Node/Express"
    },
    "GET/usersmg": {
        "controler": "nosql/populate",
        "modelName": "Users",
        "view": "usersCountry",
        "pop_ref": "country"
    },
    "GET/exosmg": {
        "controler": "nosql/finder",
        "modelName": "Exercices",
        "view": "exos"
    },
    "GET/exosJSONmg": {
        "controler": "nosql/finder",
        "modelName": "Exercices",
        "view": "exos",
        "return_type": "application/json"
    },
    "GET/countriesmg": {
        "controler": "nosql/finder",
        "modelName": "Countries",
        "view": "countries"
    },
    "GET/countriesJSONmg": {
        "controler": "nosql/finder",
        "modelName": "Countries",
        "view": "countries",
        "return_type": "application/json"
    },
    "GET/formUsermg": {
        "controler": "nosql/findByIdWithList",
        "modelName": "Users",
        "modelList": "Countries",
        "view": "formUser",
        "form_action": "/modifyUser"
    },
    "POST/modifyUsermg": {
        "controler": "nosql/updateById",
        "modelName": "Users",
        "view": "modifyUser"
    },
    "GET/newUsermg": {
        "controler": "nosql/finder",
        "modelName": "Users",
        "modelList": "Countries",
        "view": "formUser",
        "libelle": "creation"
    },
    "POST/createUsermg": {
        "controler": "nosql/insertOne",
        "modelName": "Users",
        "view": "users"
    },
    "GET/deleteUsermg": {
        "controler": "nosql/deleteById",
        "modelName": "Users",
        "view": "users"
    },
    "GET/users": {
        "controler": "sql/selectSQL",
        "sql_query": "SELECT * FROM users",
        "view": "Users/users",
        "title": "Liste des utilisateurs"
    },
    "GET/newUser": {
        "controler": "sql/selectListSchemas",
        "sql_list": [
            "SELECT * FROM countries"
        ],
        "tables_list": [
            "countries"
        ],
        "view": "Users/formUser",
        "form_action": "/createUser",
        "del_label": "Utilisateur",
        "libelle": "Création",
        "title": "Ajouter un Utilisateur à l'application :"
    },
    "POST/createUser": {
        "controler": "sql/insertSQL",
        "sql_query": "INSERT INTO users (name, firstName, login, mdp, function, office, date_naiss, addresse1, addresse2, cp, city, code_countries, mobile_phone, home_phone) VALUES( ?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
        "params_query": [
            "name",
            "firstName",
            "login",
            "mdp",
            "function",
            "office",
            "date_naiss",
            "addresse1",
            "addresse2",
            "cp",
            "city",
            "code_countries",
            "mobile_phone",
            "home_phone"
        ],
        "redirect": "/users"
    },
    "GET/formUser": {
        "controler": "sql/selectByIdAndListSchemas",
        "sql_query": "SELECT * FROM users WHERE id_users=?",
        "sql_list": [
            "SELECT * FROM countries"
        ],
        "tables_list": [
            "countries"
        ],
        "view": "Users/formUser",
        "form_action": "/modifyUser",
        "del_label": "Utilisateur",
        "libelle": "Modification",
        "title": "Modifier un Utilisateur de l'application :"
    },
    "POST/modifyUser": {
        "controler": "sql/updateSQL",
        "sql_query": "UPDATE users SET name=?, firstName=?, login=?, mdp=?, function=?, office=?, date_naiss=?, addresse1=?, addresse2=?, cp=?, city=?, code_countries=?, mobile_phone=?, home_phone=? WHERE id_users=?",
        "params_query": [
            "name",
            "firstName",
            "login",
            "mdp",
            "function",
            "office",
            "date_naiss",
            "addresse1",
            "addresse2",
            "cp",
            "city",
            "code_countries",
            "mobile_phone",
            "home_phone"
        ],
        "redirect": "/users"
    },
    "GET/tab_users": {
        "controler": "sql/selectSQL",
        "sql_query": "SELECT * FROM users",
        "view": "Users/tabusers"
    },
    "GET/deleteUser": {
        "controler": "sql/deleteSQLById",
        "sql_query": "DELETE FROM users WHERE id_users=?",
        "redirect": "/users"
    },
    "GET/jsonCountries": {
        "controler": "sql/selectSQL",
        "sql_query": "SELECT * FROM countries",
        "view": "Countries/tabcountries.hbs",
        "return_type": "application/json"
    },
    "GET/atomes": {
        "controler": "sql/selectSQL",
        "sql_query": "SELECT id, nom, symbole, numero, electron, masse_volumique, masse_atomique, is_radioactif FROM atome",
        "view": "Atomes/liste_atomes",
        "title": "Liste des atomes"
    },

    "GET/newAtome": {
        "controler": "sql/selectSQL",
        "sql_query": "SELECT * FROM atome LIMIT 0",
        "view": "Atomes/formAtome",
        "form_action": "/createAtome",
        "libelle": "Création",
        "title": "Créer un nouvel atome"
    },

    "POST/createAtome": {
        "controler": "sql/insertSQL",
        "sql_query": "INSERT INTO atome (nom, symbole, numero, electron, masse_volumique, masse_atomique, is_radioactif) VALUES (?, ?, ?, ?, ?, ?, ?)",
        "params_query": [
            "nom",
            "symbole",
            "numero",
            "electron",
            "masse_volumique",
            "masse_atomique",
            "is_radioactif"
        ],
        "redirect": "/atomes"
    },

    "GET/formAtome": {
        "controler": "sql/selectSQL",
        "sql_query": "SELECT id, nom, symbole, numero, electron, masse_volumique, masse_atomique, is_radioactif FROM atome WHERE id=?",
        "view": "Atomes/formAtome",
        "form_action": "/modifyAtome",
        "del_label": "Atome",
        "libelle": "Modification",
        "title": "Modifier un atome"
    },

    "POST/modifyAtome": {
        "controler": "sql/updateSQL",
        "sql_query": "UPDATE atome SET nom=?, symbole=?, numero=?, electron=?, masse_volumique=?, masse_atomique=?, is_radioactif=? WHERE id=?",
        "params_query": [
            "nom",
            "symbole",
            "numero",
            "electron",
            "masse_volumique",
            "masse_atomique",
            "is_radioactif"
        ],
        "redirect": "/atomes"
    },

    "GET/deleteAtome": {
        "controler": "sql/deleteSQLById",
        "sql_query": "DELETE FROM atome WHERE id=?",
        "redirect": "/atomes"
    },

    "GET/tabAtomes": {
        "controler": "sql/selectSQL",
        "sql_query": "SELECT id, nom, symbole, numero, electron, masse_volumique, masse_atomique, is_radioactif FROM atome",
        "view": "Atomes/tabAtome",
        "title": "Tableau des atomes"
    },

    "GET/jsonAtome": {
        "controler": "sql/selectSQL",
        "sql_query": "SELECT * FROM atome",
        "view": "Atomes/liste_atomes",
        "return_type": "application/json"
    }
}

nav

<ul>
        <li><a href="/index">Accueil</a></li>
        <li><a href="/users">Users</a></li>
        <li><a href="/tab_users">Tableau Users</a></li>
        <li><a href="/atomes">Atomes</a></li>
        <li><a href="/tabAtomes">Tableau Atomes</a></li>
        <li><a href="/jsonAtome">JSON Atomes</a></li>

        <!--li><a href="/tab_countries">Tableau Countries</a></li>
        <li><a href="/tab_communes">Tableau Communes</a></li>
        <li><a href="/formations">Liste des formations</a></li>
        <li><a href="/tabFormations">Tableau Formations</a></li>
        <li><a href="/formateurs">Liste des formateurs</a></li>
        <li><a href="/tabFormateurs">Tableau Formateurs</a></li>
        <li><a href="/logout">Déconnexion</a></li-->
</ul>  

formAtome.hbs

<div class="center">
    <h1>{{title}}</h1> <form action="{{form_action}}" method="post">
        
        <div class="inputbox">
            <input type="text" name="nom" value="{{data.nom}}" required>
            <span>Nom de l'atome</span>
        </div>

        <div class="inputbox">
            <input type="text" name="symbole" value="{{data.symbole}}" required>
            <span>Symbole</span>
        </div>

        <div class="inputbox">
            <input type="number" name="numero" value="{{data.numero}}">
            <span>Numéro Atomique</span>
        </div>

        <div class="inputbox">
            <input type="text" name="electron" value="{{data.electron}}" required>
            <span>Configuration Électronique</span>
        </div>

        <div class="inputbox">
            <input type="text" name="masse_volumique" value="{{data.masse_volumique}}" required>
            <span>Masse Volumique</span>
        </div>

        <div class="inputbox">
            <input type="text" name="masse_atomique" value="{{data.masse_atomique}}" required>
            <span>Masse Atomique</span>
        </div>

        <div class="inputbox">
            <label style="color:#FFF; font-size:0.8em;">Est Radioactif ?</label>
            <select name="is_radioactif" style="width:100%; margin-top:5px;">
                <option value="0" {{#compare data.is_radioactif 0 operator="=="}}selected{{/compare}}>Non</option>
                <option value="1" {{#compare data.is_radioactif 1 operator="=="}}selected{{/compare}}>Oui</option>
            </select>
        </div>

        <div class="inputbox">
            <input type="submit" value="Confirmer la {{libelle}}">
        </div>
    </form>

    {{#if data.id}}
    <div class="inputbox">
        <button onclick="window.location='/deleteAtome/{{data.id}}'" style="background-color: #ff4444;">
            Supprimer cet atome
        </button>
    </div>
    {{/if}}
</div>

<script>
    // Si on est en modification, on ajoute l'ID à l'action du formulaire
    {{#if data.id}}
        document.forms[0].action = "{{form_action}}/{{data.id}}";
    {{/if}}
</script>

liste_atomes.hbs

<div class="center">
    <h1>{{title}}</h1>

    <div class="inputbox">
        <select name="atomes" id="atomeSelect">
            {{#compare data null operator="=="}}
                <option value="rien">Il n'y a pas de données dans la base</option>
            {{else}}
                <option value="0">Sélectionner un atome pour modifier</option>
                {{#each data}}
                    <option value="{{this.id}}">{{this.nom}} ({{this.symbole}})</option>
                {{/each}}
            {{/compare}}
        </select>
    </div>

    <h2>ou</h2>

    <div class="inputbox">
        <button id="btnNewAtome">Créer un nouvel Atome</button>
    </div>
</div>

<script>
    // Gestion de la sélection pour modification
    var selectElement = document.getElementById('atomeSelect');
    selectElement.addEventListener('change', function (evt) {
        if(selectElement.value != 0 && selectElement.value != "rien") {
             // Redirige vers l'action GET/formAtome avec l'ID
            window.location = "/formAtome/" + selectElement.value;
        }
    });

    // Gestion du bouton de création
    var btnNew = document.getElementById('btnNewAtome');
    btnNew.addEventListener('click', function (evt) {
        window.location = "/newAtome";
    });
</script>

tabAtomes.hbs

<div class="inputbox">
  <table id="tabAtomes" class="display" style="width:100%">
    <thead>
      <tr>
        <th>id</th>
        <th>nom</th>
        <th>symbole</th>
        <th>numero</th>
        <th>electron</th>
        <th>masse_volumique</th>
        <th>masse_atomique</th>
        <th>is_radioactif</th>
      </tr>
    </thead>
    <tbody>
      {{#each data}}
        <tr>
          <td>{{this.id}}</td>
          <td>{{this.nom}}</td>
          <td>{{this.symbole}}</td>
          <td>{{this.numero}}</td>
          <td>{{this.electron}}</td>
          <td>{{this.masse_volumique}}</td>
          <td>{{this.masse_atomique}}</td>
          <td>{{this.is_radioactif}}</td>
        </tr>
      {{/each}}
    </tbody>
  </table>
</div>
<script>
  document.addEventListener('DOMContentLoaded', function () {
    let table = new DataTable('#tabAtomes');
  });
</script>

architecture des fichiers

image.png

Lancer le serveur node avec :