[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"readme-html:EDM115-Org\u002FSenescalade:master":3},"\u003Cdiv align=\"center\">\n\u003Ch1 id=\"senescalade\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"senescalade\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#senescalade\">Senescalade\u003C\u002Fa>\u003C\u002Fh1>\n \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FEDM115-Org\u002FSenescalade\u002Fmaster\u002Fpublic\u002Fimages\u002Flogo-black-red-transparent.png\" alt=\"Senescalade\" width=\"200\" height=\"200\"> \n\u003Ch2 id=\"une-application-web-en-nuxt-pour-les-inscriptions-de-l-association-senescalade\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"une-application-web-en-nuxt-pour-les-inscriptions-de-l-association-senescalade\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#une-application-web-en-nuxt-pour-les-inscriptions-de-l-association-senescalade\">Une application web en Nuxt pour les inscriptions de l’association Senescalade\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002FEDM115-Org\u002FSenescalade\" alt=\"GitHub last commit\" loading=\"lazy\"> \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fchecks-status\u002FEDM115-Org\u002FSenescalade\u002Fmaster\" alt=\"GitHub branch status\" loading=\"lazy\"> \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frepo-size\u002FEDM115-Org\u002FSenescalade\" alt=\"GitHub repo size\" loading=\"lazy\"> \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flanguages\u002Fcount\u002FEDM115-Org\u002FSenescalade\" alt=\"GitHub language count\" loading=\"lazy\"> \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flanguages\u002Ftop\u002FEDM115-Org\u002FSenescalade\" alt=\"GitHub top language\" loading=\"lazy\">\u003Cbr>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fcreated-at\u002FEDM115-Org\u002FSenescalade\" alt=\"GitHub Created At\" loading=\"lazy\"> \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002FEDM115-Org\u002FSenescalade\" alt=\"GitHub License\" loading=\"lazy\"> \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FEDM115-Org\u002FSenescalade\" alt=\"GitHub Repo stars\" loading=\"lazy\">\u003Cbr>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fdocker\u002Fpulls\u002Fedm115\u002Fsenescalade\" alt=\"Docker Pulls\" loading=\"lazy\"> \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fdocker\u002Fimage-size\u002Fedm115\u002Fsenescalade\" alt=\"Docker Image Size\" loading=\"lazy\"> \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fdocker\u002Fv\u002Fedm115\u002Fsenescalade\" alt=\"Docker Image Version\" loading=\"lazy\">\u003Cbr>\n\u003Ca href=\"https:\u002F\u002Fapp.deepsource.com\u002Fgh\u002FEDM115-org\u002FSenescalade\u002F\" target=\"_blank\" rel=\"noopener noreferrer\">\u003Cimg src=\"https:\u002F\u002Fapp.deepsource.com\u002Fgh\u002FEDM115-org\u002FSenescalade.svg\u002F?label=active+issues&amp;show_trend=true&amp;token=WF6hxNEht95_hyiFpZdVK2h6\" alt=\"DeepSource\" loading=\"lazy\">\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003Ch2 id=\"presentation\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"presentation\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#presentation\">Présentation\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Senescalade\u003C\u002Fstrong> est une application web permettant aux membres de l’association Senescalade de s’inscrire en début d’année. Les nouveaux membres peuvent créer un compte et inscrire les grimpeurs, tandis que les membres déjà inscrits peuvent se connecter et se réinscrire facilement.\u003Cbr>\nL’application est développée en Nuxt.js, un framework basé sur Vue.js, utilise Vuetify pour le style et Pinia pour le store, et utilise une base de données MySQL pour stocker les informations des membres et des événements. Chaque mot de passe est chiffré avec bcrypt, et les emails sont envoyés via Nodemailer.\u003Cbr>\nL’application est également disponible en tant qu’image Docker sur Docker Hub : \u003Ca href=\"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fedm115\u002Fsenescalade\" target=\"_blank\" rel=\"noopener noreferrer\">https:\u002F\u002Fhub.docker.com\u002Fr\u002Fedm115\u002Fsenescalade\u003C\u002Fa>.\u003Cbr>\nUne interface d’administration est également disponible pour les administrateurs de l’association, permettant de visualiser les inscriptions, les membres, les séances, planifier les réinscriptions, …\u003C\u002Fp>\n\u003Ch2 id=\"fonctionnalites\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"fonctionnalites\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#fonctionnalites\">Fonctionnalités\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ch3 id=\"cote-utilisateur\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"cote-utilisateur\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#cote-utilisateur\">Côté utilisateur\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Inscription\u003C\u002Fli>\n\u003Cli>Connexion\u003C\u002Fli>\n\u003Cli>Ajout de grimpeurs\u003C\u002Fli>\n\u003Cli>Inscription aux séances\u003C\u002Fli>\n\u003Cli>Réinscription semi-automatique\u003C\u002Fli>\n\u003Cli>Mise en file d’attente pour les séances pleines\u003C\u002Fli>\n\u003Cli>Réininialisation du mot de passe\u003C\u002Fli>\n\u003Cli>Vérification du compte\u003C\u002Fli>\n\u003Cli>Changement de thème (clair\u002Fsombre)\u003C\u002Fli>\n\u003Cli>Possibilité de rester connecté 30 jours au lieu de 24h\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"cote-administrateur\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"cote-administrateur\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#cote-administrateur\">Côté administrateur\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Dashboard pour visualiser en un coup d’oeil l’état global de la base de données\u003C\u002Fli>\n\u003Cli>Visualisation\u002Fsuppression des membres\u003C\u002Fli>\n\u003Cli>Visualisation\u002Fmodification\u002Fsuppression des séances + export en PDF d’une liste d’appel\u003C\u002Fli>\n\u003Cli>Visualisation\u002Fmodification\u002Fsuppression des inscriptions\u003C\u002Fli>\n\u003Cli>Ajout\u002Fsuppression d’admins avec gestion des droits\u003C\u002Fli>\n\u003Cli>Gestion des réinscriptions\u003C\u002Fli>\n\u003Cli>Modification du mot de passe\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"deploiement\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"deploiement\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#deploiement\">Déploiement\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Prérequis :\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Node.js 20 (LTS), à installer avec \u003Ccode class=\"hljs\">nvm install lts\u002Firon &amp;&amp; nvm use lts\u002Firon\u003C\u002Fcode> si besoin\u003C\u002Fli>\n\u003Cli>Docker\u003C\u002Fli>\n\u003Cli>Docker Compose\u003C\u002Fli>\n\u003C\u002Ful>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>bash\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs bash'>git \u003Cspan class=\"hljs-built_in\">clone\u003C\u002Fspan> https:\u002F\u002Fgithub.com\u002FEDM115-org\u002FSenescalade.git &amp;&amp; \u003Cspan class=\"hljs-built_in\">cd\u003C\u002Fspan> Senescalade\nnpm run i\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Cp>Créez 2 fichiers contenant les variables d’environnement à la racine du projet :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-title\">.env\u003C\u002Fspan>\u003C\u002Fcode> pour le développement\u003C\u002Fli>\n\u003C\u002Ful>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>env\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs env'>\u003Cspan class=\"hljs-attr\">DB_HOST\u003C\u002Fspan>=localhost\n\u003Cspan class=\"hljs-attr\">DB_USER\u003C\u002Fspan>=sae\n\u003Cspan class=\"hljs-attr\">DB_PASSWORD\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;UserPassword&quot;\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">DB_NAME\u003C\u002Fspan>=sae\n\u003Cspan class=\"hljs-attr\">DB_PORT\u003C\u002Fspan>=\u003Cspan class=\"hljs-number\">3306\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">DEV_PORT\u003C\u002Fspan>=\u003Cspan class=\"hljs-number\">8000\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">GMAIL_USER\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;adresse-email@gmail.com&quot;\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">GMAIL_PASS\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;abcd efgh ijkl mnop&quot;\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">JWT_SECRET\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;cb20dc39dcaaa4fe93d7902f9bc4e4e9bb73a35653dfd1931ad710c9d1ef9a56dbe1e02186a84c72fc1551cefe7951823af3d1bd3b056e187d7e400cc70c19f1&quot;\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">MYSQL_ROOT_PASSWORD\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;SomethingStrong&quot;\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">PORT\u003C\u002Fspan>=\u003Cspan class=\"hljs-number\">56860\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Cul>\n\u003Cli>\u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-title\">.prod.env\u003C\u002Fspan>\u003C\u002Fcode> pour la production\u003C\u002Fli>\n\u003C\u002Ful>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>env\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs env'>\u003Cspan class=\"hljs-attr\">DB_HOST\u003C\u002Fspan>=db\n\u003Cspan class=\"hljs-attr\">DB_USER\u003C\u002Fspan>=sae\n\u003Cspan class=\"hljs-attr\">DB_PASSWORD\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;UserPassword&quot;\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">DB_NAME\u003C\u002Fspan>=sae\n\u003Cspan class=\"hljs-attr\">DB_PORT\u003C\u002Fspan>=\u003Cspan class=\"hljs-number\">3306\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">DEV_PORT\u003C\u002Fspan>=\u003Cspan class=\"hljs-number\">56860\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">GMAIL_USER\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;adresse-email@gmail.com&quot;\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">GMAIL_PASS\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;abcd efgh ijkl mnop&quot;\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">JWT_SECRET\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;cb20dc39dcaaa4fe93d7902f9bc4e4e9bb73a35653dfd1931ad710c9d1ef9a56dbe1e02186a84c72fc1551cefe7951823af3d1bd3b056e187d7e400cc70c19f1&quot;\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">MYSQL_ROOT_PASSWORD\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;SomethingStrong&quot;\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">PORT\u003C\u002Fspan>=\u003Cspan class=\"hljs-number\">56860\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Cp>\u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-attribute\">GMAIL_PASS\u003C\u002Fspan>\u003C\u002Fcode> : Mot de passe d’application spécifique, voir \u003Ca href=\"https:\u002F\u002Fnodemailer.com\u002Fusage\u002Fusing-gmail\u002F\" target=\"_blank\" rel=\"noopener noreferrer\">https:\u002F\u002Fnodemailer.com\u002Fusage\u002Fusing-gmail\u002F\u003C\u002Fa> et \u003Ca href=\"https:\u002F\u002Fsupport.google.com\u002Faccounts\u002Fanswer\u002F185833\" target=\"_blank\" rel=\"noopener noreferrer\">https:\u002F\u002Fsupport.google.com\u002Faccounts\u002Fanswer\u002F185833\u003C\u002Fa>\u003Cbr>\n\u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-attribute\">JWT_SECRET\u003C\u002Fspan>\u003C\u002Fcode> : Clé secrète pour les tokens JWT, à générer avec \u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-keyword\">node\u003C\u002Fspan> \u003Cspan class=\"hljs-title\">-e\u003C\u002Fspan> \u003Cspan class=\"hljs-string\">&quot;console.log(require(&#x27;crypto&#x27;).randomBytes(64).toString(&#x27;hex&#x27;))&quot;\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fp>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>bash\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs bash'>npm run docker-start\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Cp>Accessible à \u003Ca href=\"http:\u002F\u002Flocalhost\u002F\" target=\"_blank\" rel=\"noopener noreferrer\">http:\u002F\u002Flocalhost\u002F\u003C\u002Fa> (port \u003Ccode class=\"hljs\">80\u003C\u002Fcode> en prod, modifiable dans le \u003Ccode class=\"hljs\">docker-compose.yml\u003C\u002Fcode>)\u003C\u002Fp>\n\u003Cdiv class=\"markdown-alert markdown-alert-caution\">\n\u003Cp class=\"markdown-alert-title\">Caution\u003C\u002Fp>\n\u003Cp>MySQL est lent à démarrer. Normalement la webapp est sensée attendre que le service MySQL démarre, mais si ce n’est pas le cas, utilisez les commandes suivantes :\u003C\u002Fp>\n\u003C\u002Fdiv>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>bash\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs bash'>docker compose logs  \u003Cspan class=\"hljs-comment\"># vérifiez la mention &quot;[Note] [Entrypoint]: MySQL init process done. Ready for start up.&quot;\u003C\u002Fspan>\nnpm run docker-restart\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Cp>Pour arrêter :\u003C\u002Fp>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>bash\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs bash'>npm run docker-stop\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Ch2 id=\"developpement\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"developpement\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#developpement\">Développement\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Prérequis :\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Les prérequis de déploiement plus :\u003C\u002Fli>\n\u003Cli>MySQL 8.0 (~8.0.37)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"premiere-installation\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"premiere-installation\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#premiere-installation\">Première installation\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Windows\u003C\u002Fstrong>\u003C\u002Fli>\n\u003C\u002Ful>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>sql\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs sql'>\\\u003Cspan class=\"hljs-keyword\">sql\u003C\u002Fspan>\n\\\u003Cspan class=\"hljs-keyword\">connect\u003C\u002Fspan> root\u003Cspan class=\"hljs-variable\">@localhost\u003C\u002Fspan>\n\\source &quot;C:\\Path\\To\\Senescalade\\db\\create_user.sql&quot;\n\\source &quot;C:\\Path\\To\\Senescalade\\db\\create_db.sql&quot;\n\\source &quot;C:\\Path\\To\\Senescalade\\db\\instantiate_db.sql&quot;\n\\source &quot;C:\\Path\\To\\Senescalade\\db\\insert_test.sql&quot;\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Cul>\n\u003Cli>\u003Cstrong>Linux\u003C\u002Fstrong>\u003C\u002Fli>\n\u003C\u002Ful>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>bash\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs bash'>mysql -u root -p &lt; \u002Fpath\u002Fto\u002FSenescalade\u002Fdb\u002Fcreate_user.sql\nmysql -u root -p &lt; \u002Fpath\u002Fto\u002FSenescalade\u002Fdb\u002Fcreate_db.sql\nmysql -u root -p &lt; \u002Fpath\u002Fto\u002FSenescalade\u002Fdb\u002Finstantiate_db.sql\nmysql -u root -p &lt; \u002Fpath\u002Fto\u002FSenescalade\u002Fdb\u002Finsert_test.sql\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Cp>Puis dans un terminal\u003C\u002Fp>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>bash\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs bash'>npm run i\nnpm run dev\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Cp>Accessible à \u003Ca href=\"http:\u002F\u002Flocalhost:8000\u002F\" target=\"_blank\" rel=\"noopener noreferrer\">http:\u002F\u002Flocalhost:8000\u002F\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch3 id=\"structure-du-code\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"structure-du-code\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#structure-du-code\">Structure du code\u003C\u002Fa>\u003C\u002Fh3>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>plaintext\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs plaintext'>.\n├── .github\u002F : Fichiers de configuration GitHub\n├── .vscode\u002F : Extensions recommandées et paramètres pour VSCode\n├── assets\u002F : Contient le style css et un outil pour la traduction de messages d&#x27;erreur\n├── components\u002F : Composants de l&#x27;application Nuxt (formulaires, barres de navigation, modals, ...)\n├── db\u002F : Fichiers SQL pour la création de la base de données\n├── layouts\u002F : Layouts de l&#x27;application Nuxt (défaut et admin)\n├── locales\u002F : Traductions des messages d&#x27;erreur\n├── Organisation\u002F : Les rendus de la SAE\n├── pages\u002F : Pages de l&#x27;application Nuxt\n│   ├── admin\u002F\n│   │   ├── dashboard\u002F : Dashboard de l&#x27;admin\n│   │   ├── gestion-admin\u002F : Page de gestion des admins\n│   │   ├── gestion-grimpeurs\u002F : Page de gestion des grimpeurs\n│   │   ├── gestion-seances\u002F : Page de gestion des séances\n│   │   ├── gestion-utilisateur\u002F : Page de gestion des utilisateurs\n│   │   ├── profil\u002F:  Modification du mot de passe\n│   │   └── reinscription\u002F : Page de gestion des réinscriptions\n│   ├── login\u002F : Pages de connexion, de vérification de mail et d&#x27;oubli de mot de passe\n│   ├── register\u002F : Pages d&#x27;inscription et de réinscription\n│   ├── seances\u002F : Pages de visualisation des séances\n│   ├── user\u002F : Pages pour les utilisateurs connectés (profil, ajout de grimpeurs, réinscription, finir l&#x27;inscription après une file d&#x27;attente, voir ses grimpeurs, ...)\n│   └── index.vue : Page d&#x27;accueil\n├── plugins\u002F : Plugins de l&#x27;application Nuxt (Vuetify, Pinia)\n├── public\u002F : Fichiers statiques (images, robots.txt)\n├── server\u002F : Serveur Nitro avec H3\n│   ├── api\u002F : API REST pour les requêtes à la base de données\n│   │   ├── add.js : Requêtes INSERT\n│   │   ├── count.js : Requêtes COUNT\n│   │   ├── db.js : Gestion des pools de connexions MySQL\n│   │   ├── delete.js : Requêtes DELETE\n│   │   ├── fetch.js : Requêtes SELECT\n│   │   ├── forgotPassword.js : Requêtes pour l&#x27;oubli de mot de passe\n│   │   ├── login.js : Requêtes pour la connexion\n│   │   ├── mailVerify.js : Requêtes pour la vérification de mail\n│   │   ├── notifySeance.js : Requêtes pour notifier les utilisateurs qu&#x27;une place s&#x27;est libérée dans une séance\n│   │   ├── register.js : Requêtes pour l&#x27;inscription\n│   │   ├── reinscription.js : Requêtes pour la réinscription\n│   │   └─── update.js : Requêtes UPDATE\n│   └── middleware\u002F : Middleware pour la vérification des tokens\n├── store\u002F : Store de l&#x27;application Nuxt (Pinia)\n├── docker-compose.yml : Fichier de configuration Docker Compose\n├── Dockerfile : Fichier de configuration Docker\n├── error.vue : Page d&#x27;erreur (renvoie à la page d&#x27;accueil)\n├── nuxt.config.js : Configuration de l&#x27;application Nuxt\n├── package.json : Fichier de configuration NPM\n├── start.sh : Script de démarrage de l&#x27;application pour Docker\n└── wait-for-it.sh : Script pour attendre que MySQL démarre, [source](https:\u002F\u002Fgithub.com\u002Fvishnubob\u002Fwait-for-it)\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Ch3 id=\"build-du-dockerfile\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"build-du-dockerfile\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#build-du-dockerfile\">Build du Dockerfile\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Build\u003C\u002Fstrong>\u003C\u002Fli>\n\u003C\u002Ful>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>bash\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs bash'>docker build -t edm115\u002Fsenescalade .\ndocker run -d --env-file .\u002F.env -p 80:56860 --name senescalade edm115\u002Fsenescalade\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Cul>\n\u003Cli>\u003Cstrong>Run\u003C\u002Fstrong>\u003C\u002Fli>\n\u003C\u002Ful>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>bash\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs bash'>docker start senescalade\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Cul>\n\u003Cli>\u003Cstrong>Publish\u003C\u002Fstrong>\u003C\u002Fli>\n\u003C\u002Ful>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>bash\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs bash'>docker tag edm115\u002Fsenescalade edm115\u002Fsenescalade:latest\ndocker push edm115\u002Fsenescalade:latest\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Ch2 id=\"licence\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"licence\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#licence\">Licence\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Ce projet est sous licence MIT. Voir le fichier \u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-attribute\">LICENSE\u003C\u002Fspan>\u003C\u002Fcode> pour plus d’informations.\u003C\u002Fp>\n",1779532541108]