Portail d'enseignement

E Suong
E Suong

Explorer les ressources

Accueil

Documentation technique

Architecture et organisation

Fiche de référence du code : fonctionnement, formats et limites. La disponibilité publique dépend de la version publiée.

Sommaire de la fiche

État public de référence au 29 octobre 2026 : 3acbb8d, neuf jeux de stratégie publiés, dont Shogi et Mini Shogi. Les bilans de tests datés à sept ou huit jeux restent historiques. La phase 1 comptes/barème n’est pas déclarée publiée par cette fiche ; les fonctions élèves/classes et nouveaux jeux restent bêta.

Extension comptes publics phase 1

Better Auth1.7.14 et better-sqlite313.0.3 ajoutent profils/invitations/rôles/2FA et objets Boîtes. Connexion personnelle injectée par middleware dans les contrôles de droits existants, sans administration partagée. Aucun service étudiant/classes/annuel n’est livré. Architecture et limites du lot (COMPTES_PUBLIC_PHASE1.md).

Pile et exécution

Astro 7 avec adaptateur Node en mode serveur autonome ; composants interactifs Svelte 5. Les versions exactes sont dans package.json (../package.json) et le verrou npm. Le serveur lit/écrit des fichiers : ce projet n’est plus un export statique destiné à GitLab Pages.

Emplacement Rôle
src/pages/ Routes Astro et points d’entrée API
src/layouts/ Enveloppe commune et présentation des contenus
src/components/ Navigation, administration, éditeurs et composants partagés
src/lib/ Catalogue, sécurité, calculs et moteurs
src/workers/ Worker du Rekasator ; celui de LN est dans src/lib/ln/
Ressources/ Arborescence, fiches JSON et documents servis avec contrôle d’accès
contenus/accueil.json Actualités éditables
src/content/ Contenus HTML intégrés, dont les pages Google Sheets
public/ Fichiers accessibles publiquement, sans contrôle de niveau
src/data/ Données historiques ; les anciens catalogues JSON ne pilotent plus les rubriques
.catalogue/ Index calculé et verrou d’écriture
.security/, .env État privé de sécurité et configuration
backups/ Corbeille, versions remplacées, sauvegardes d’intervention
.work/, dist/, .astro/ Travail temporaire, compilation et fichiers générés

Du dossier à la page

Ressources/ → scanCatalogue → .catalogue/index.json → publicTree / visibleBlocks → menus, mosaïques et pages.

Le scan n’est pas déclenché automatiquement par chaque modification de fichier. Utiliser l’actualisation dans l’administration ou npm run catalogue:refresh. Les répertoires de données sont exclus de la surveillance Vite pour éviter les rechargements intempestifs.

  • /rubriques/[id] : page d’une rubrique, fil d’Ariane et composition.
  • /documents/[id] : contrôle serveur, puis livraison du fichier ou redirection vers son URL.
  • /outils/... et /activites/... : applications/pages spécifiques.
  • /connexion : accès et gestion des données locales.
  • /admin/catalogue, /admin/accueil, /admin/securite : administration.

Écritures

Catalogue (../src/lib/catalogue.mjs) valide les métadonnées et les chemins, refuse les liens symboliques et les doublons d’identifiants. Les mutations utilisent un verrou de fichier et une révision attendue ; une page de gestion périmée doit être rechargée. Les JSON sont écrits via un fichier temporaire puis renommage. Le scan calcule les empreintes et produit l’index.

Middleware (../src/middleware.ts) contrôle l’origine des mutations API et gère certaines anciennes adresses. Les API administratives vérifient aussi le niveau 3. Les anciennes routes éditoriales sont des compatibilités, pas un second CMS.

Interface

NavMenu.svelte gère le menu de bureau et le volet mobile ; NavBranch.svelte descend dans l’arbre. Les catégories se déplient au clic ; « Tout voir » ouvre leur page. Les groupes visuels sont définis par les identifiants racines dans sameNavGroup.

CatalogueCards.astro construit les mosaïques ; PageComposer.svelte ordonne sous-rubriques, ressources, titres et textes. Les Actualités passent par home-news.mjs et HomeNewsAdmin.svelte, avec contrôle de révision.

Pages introuvables (404)

src/pages/404.astro utilise le cadre commun et NotFoundEquation.astro, qui reprend l’animation SVG/CSS du site historique (5x − 8 = 3x + 800 → x = 404). Aucun script n’est nécessaire. Le mode prefers-reduced-motion affiche directement le résultat.

Les URL inconnues utilisent la page 404 Astro. Les rubriques absentes/inaccessibles, anciennes pages inconnues et documents indisponibles réécrivent vers /404 sans changer l’adresse demandée, avec un véritable statut HTTP 404. Le message reste générique pour ne pas révéler l’existence de ressources protégées. Les réponses des API ne sont pas modifiées. Cette page ne traite pas les erreurs serveur 500.

Vérification : tester /404, une URL inconnue, /rubriques/inconnue, /pages/inconnue et /documents/inconnu (statut 404, navigation et animation), puis une rubrique existante (200). Vérifier visuellement le début et la fin de l’animation, ainsi que l’affichage sur mobile.

Parties privées des jeux

Les moteurs purs sont utilisés côté serveur par src/lib/online/adapters.mjs. /api/online crée/rejoint un salon ; /api/online/[id] reçoit ses commandes et diffuse des instantanés par SSE. Le serveur décide des coups légaux, des phases et de la fin ; l’hôte choisit les options autorisées. Les salons sont uniquement en mémoire d’un processus, les clés de place en sessionStorage. Aucun stockage partagé ni reprise durable. Voir contrat et déploiement (DEPLOIEMENT_JEUX.md).

Shogi et Mini Shogi partagent désormais shogi-core.mjs (fabrique de moteurs aux règles fixes) et ShogiBoard.svelte (rendu paramétré au montage). Les façades shogi.mjs / mini-shogi.mjs et composants Shogi.svelte / MiniShogi.svelte gardent routes, invitations et stockages indépendants. Aucun choix de variante ne provient du client réseau. Mini Shogi est publié depuis le 27 octobre : fiche.

Identité visuelle

L’icône d’onglet est public/favicon.png, copie inchangée du fichier assets/data/icone.png de l’ancien site : M blanc à la craie sur fond d’ardoise. Elle est déclarée dans le layout partagé SiteLayout.astro. Le fichier original mesure 1024 × 1024 ; ne pas déclarer une taille de 32 × 32 pour cette image. Aucun changement au nom affiché dans la navigation.

← Retour à la documentation