projet par cursor

This commit is contained in:
LAINEY Grégory committed 2026-09-29 10:45:14 +02:00
1 parent 236f75ecdd
commit b785db1b84
47 files changed
+3902

No files matched your search

+267
View File
@@ -0,0 +1,267 @@
<?php
declare(strict_types=1);
final class JeuController
{
public function __construct(
private readonly Auth $auth,
private readonly JeuService $jeuService,
private readonly ConsoleService $consoleService,
private readonly EnrichissementService $enrichissementService
)
{
}
public function liste(): void
{
$utilisateur = $this->auth->exigerConnexion();
$recherche = Helpers::champ("q");
$consoleId = Helpers::champ("console");
$etat = Helpers::champ("etat");
$jeux = $this->jeuService->listerPourUtilisateur(
$utilisateur["id"],
$recherche !== "" ? $recherche : null,
$consoleId !== "" ? $consoleId : null,
$etat !== "" ? $etat : null
);
$consoles = $this->consoleService->listerPourUtilisateur($utilisateur["id"]);
$consolesParId = [];
foreach ($consoles as $console)
{
$consolesParId[$console["id"]] = $console;
}
View::rendre("jeux/liste", [
"titrePage" => "Mes jeux",
"utilisateur" => $utilisateur,
"jeux" => $jeux,
"consoles" => $consoles,
"consolesParId" => $consolesParId,
"filtres" => [
"q" => $recherche,
"console" => $consoleId,
"etat" => $etat
]
]);
}
public function detail(string $id): void
{
$utilisateur = $this->auth->exigerConnexion();
$jeu = $this->jeuService->trouverPourUtilisateur($id, $utilisateur["id"]);
if ($jeu === null)
{
Flash::definir("danger", "Jeu introuvable.");
Helpers::rediriger("/jeux");
}
$console = $this->consoleService->trouverPourUtilisateur(
$jeu["consoleId"],
$utilisateur["id"]
);
View::rendre("jeux/detail", [
"titrePage" => $jeu["titre"],
"utilisateur" => $utilisateur,
"jeu" => $jeu,
"console" => $console
]);
}
public function creer(): void
{
$utilisateur = $this->auth->exigerConnexion();
$consoles = $this->consoleService->listerPourUtilisateur($utilisateur["id"]);
if ($consoles === [])
{
Flash::definir("warning", "Ajoutez d'abord une console avant d'enregistrer un jeu.");
Helpers::rediriger("/consoles/creer");
}
$prefill = $this->construirePrefillDepuisGet();
if (Helpers::estPost())
{
Csrf::exiger();
try
{
$donnees = $this->collecterDonneesFormulaire();
$jeu = $this->jeuService->creer($utilisateur["id"], $donnees);
Flash::definir("success", "Jeu ajouté à votre bibliothèque.");
Helpers::rediriger("/jeux/" . $jeu["id"]);
}
catch (InvalidArgumentException $exception)
{
Flash::definir("danger", $exception->getMessage());
$prefill = array_merge($prefill, $_POST);
}
}
View::rendre("jeux/formulaire", [
"titrePage" => "Ajouter un jeu",
"utilisateur" => $utilisateur,
"jeu" => $prefill,
"consoles" => $consoles,
"action" => "/jeux/creer",
"apiDisponible" => $this->enrichissementService->estDisponible()
]);
}
public function modifier(string $id): void
{
$utilisateur = $this->auth->exigerConnexion();
$jeu = $this->jeuService->trouverPourUtilisateur($id, $utilisateur["id"]);
if ($jeu === null)
{
Flash::definir("danger", "Jeu introuvable.");
Helpers::rediriger("/jeux");
}
$consoles = $this->consoleService->listerPourUtilisateur($utilisateur["id"]);
if (Helpers::estPost())
{
Csrf::exiger();
try
{
$donnees = $this->collecterDonneesFormulaire();
$jeu = $this->jeuService->modifier($id, $utilisateur["id"], $donnees);
Flash::definir("success", "Jeu mis à jour.");
Helpers::rediriger("/jeux/" . $jeu["id"]);
}
catch (InvalidArgumentException $exception)
{
Flash::definir("danger", $exception->getMessage());
$jeu = array_merge($jeu, $_POST);
}
}
View::rendre("jeux/formulaire", [
"titrePage" => "Modifier " . $jeu["titre"],
"utilisateur" => $utilisateur,
"jeu" => $jeu,
"consoles" => $consoles,
"action" => "/jeux/" . $id . "/modifier",
"apiDisponible" => $this->enrichissementService->estDisponible()
]);
}
public function supprimer(string $id): void
{
$utilisateur = $this->auth->exigerConnexion();
Csrf::exiger();
if ($this->jeuService->supprimer($id, $utilisateur["id"]))
{
Flash::definir("success", "Jeu supprimé.");
}
else
{
Flash::definir("danger", "Jeu introuvable.");
}
Helpers::rediriger("/jeux");
}
public function rechercherApi(): void
{
$this->auth->exigerConnexion();
header("Content-Type: application/json; charset=utf-8");
$titre = Helpers::champ("q");
if ($titre === "")
{
print json_encode(["resultats" => []]);
return;
}
$resultats = $this->enrichissementService->rechercher($titre);
print json_encode(["resultats" => $resultats], JSON_UNESCAPED_UNICODE);
}
public function appliquerEnrichissement(): void
{
$utilisateur = $this->auth->exigerConnexion();
Csrf::exiger();
$rawgId = (int) Helpers::champ("rawgId");
$retour = Helpers::champ("retour", "/jeux/creer");
if ($rawgId <= 0)
{
Flash::definir("danger", "Sélection d'enrichissement invalide.");
Helpers::rediriger($retour);
}
$detail = $this->enrichissementService->detail($rawgId);
if ($detail === null)
{
Flash::definir("warning", "Impossible de récupérer les métadonnées. Saisie manuelle possible.");
Helpers::rediriger($retour);
}
$jaquette = $this->enrichissementService->telechargerJaquette($detail["jaquetteUrl"] ?? null);
$query = http_build_query([
"titre" => $detail["titre"] ?? "",
"description" => $detail["description"] ?? "",
"dateSortie" => $detail["dateSortie"] ?? "",
"genres" => implode(", ", $detail["genres"] ?? []),
"editeur" => $detail["editeur"] ?? "",
"developpeur" => $detail["developpeur"] ?? "",
"jaquette" => $jaquette ?? "",
"sourceEnrichissement" => "api"
]);
$separateur = str_contains($retour, "?") ? "&" : "?";
Helpers::rediriger($retour . $separateur . $query);
}
private function collecterDonneesFormulaire(): array
{
return [
"titre" => Helpers::champ("titre"),
"consoleId" => Helpers::champ("consoleId"),
"etat" => Helpers::champ("etat", "possede"),
"jaquette" => Helpers::champ("jaquette"),
"description" => Helpers::champ("description"),
"dateSortie" => Helpers::champ("dateSortie"),
"genres" => Helpers::champ("genres"),
"editeur" => Helpers::champ("editeur"),
"developpeur" => Helpers::champ("developpeur"),
"notes" => Helpers::champ("notes"),
"sourceEnrichissement" => Helpers::champ("sourceEnrichissement", "manuel")
];
}
private function construirePrefillDepuisGet(): array
{
$genres = Helpers::champ("genres");
return [
"titre" => Helpers::champ("titre"),
"consoleId" => Helpers::champ("consoleId"),
"etat" => Helpers::champ("etat", "possede"),
"jaquette" => Helpers::champ("jaquette"),
"description" => Helpers::champ("description"),
"dateSortie" => Helpers::champ("dateSortie"),
"genres" => $genres !== "" ? array_map("trim", explode(",", $genres)) : [],
"editeur" => Helpers::champ("editeur"),
"developpeur" => Helpers::champ("developpeur"),
"notes" => Helpers::champ("notes"),
"sourceEnrichissement" => Helpers::champ("sourceEnrichissement", "manuel")
];
}
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.