Elasticsearch interne (jamais exposé, sécurité x-pack désactivée, cohérent avec le reste des services internes de ce serveur), tas JVM fixé à 512 Mo plutôt que le calcul automatique (jusqu'à 50 % de la RAM système, désastreux sur ce serveur à 31 Go réels). Appels HTTP directs depuis Laravel, pas de bibliothèque cliente pour un besoin aussi simple. Index reconstruit après chaque synchronisation du catalogue, page de recherche commune aux profs et aux élèves. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
50 lines
1.6 KiB
PHP
50 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Models\Cours;
|
|
use App\Services\Catalogue\CacheCatalogue;
|
|
use App\Services\Recherche\IndexRecherche;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Facades\File;
|
|
use Symfony\Component\Yaml\Yaml;
|
|
|
|
/**
|
|
* Catalogue des cours.md de paillasse-contenus/ (même esprit que
|
|
* labs:synchroniser et quiz:synchroniser-banque) : lu par « Mes cours ».
|
|
* Un seul lab (08-deux-lan-routeur) a un cours.md aujourd'hui — les autres
|
|
* séquences n'apparaissent simplement pas, jamais de contenu inventé.
|
|
*/
|
|
class SynchroniserCours extends Command
|
|
{
|
|
protected $signature = 'cours:synchroniser';
|
|
|
|
protected $description = 'Crée ou met à jour le catalogue des cours depuis les cours.md de paillasse-contenus/';
|
|
|
|
public function handle(): void
|
|
{
|
|
$dossier = config('contenus.dossier');
|
|
|
|
foreach (File::directories($dossier) as $chemin) {
|
|
$identifiant = basename($chemin);
|
|
$cheminCours = "{$chemin}/cours.md";
|
|
$cheminLab = "{$chemin}/lab.yaml";
|
|
|
|
if (! File::exists($cheminCours) || ! File::exists($cheminLab)) {
|
|
continue;
|
|
}
|
|
|
|
$titre = Yaml::parseFile($cheminLab)['titre'];
|
|
|
|
$cours = Cours::updateOrCreate(
|
|
['identifiant' => $identifiant],
|
|
['titre' => $titre, 'contenu_markdown' => File::get($cheminCours)],
|
|
);
|
|
|
|
$this->line(($cours->wasRecentlyCreated ? 'créé' : 'à jour')." : {$identifiant}");
|
|
}
|
|
|
|
CacheCatalogue::viderCours();
|
|
IndexRecherche::reconstruire();
|
|
}
|
|
}
|