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

+133
View File
@@ -0,0 +1,133 @@
<?php
declare(strict_types=1);
final class ConsoleService
{
private JsonStore $store;
public function __construct()
{
$this->store = new JsonStore(Config::get("dataPath") . "/consoles.json");
}
public function listerPourUtilisateur(string $utilisateurId): array
{
$consoles = $this->store->filtrer(
static fn (array $console): bool => ($console["utilisateurId"] ?? "") === $utilisateurId
);
usort(
$consoles,
static fn (array $a, array $b): int => strcmp($a["nom"] ?? "", $b["nom"] ?? "")
);
return $consoles;
}
public function trouverPourUtilisateur(string $id, string $utilisateurId): ?array
{
$console = $this->store->trouverParId($id);
if ($console === null || ($console["utilisateurId"] ?? "") !== $utilisateurId)
{
return null;
}
return $console;
}
public function creer(string $utilisateurId, array $donnees): array
{
$nom = trim((string) ($donnees["nom"] ?? ""));
$constructeur = trim((string) ($donnees["constructeur"] ?? ""));
if ($nom === "" || $constructeur === "")
{
throw new InvalidArgumentException("Le nom et le constructeur sont obligatoires.");
}
$annee = $this->normaliserAnnee($donnees["annee"] ?? null);
$maintenant = Helpers::maintenant();
$console = [
"id" => Helpers::genererId(),
"utilisateurId" => $utilisateurId,
"nom" => $nom,
"constructeur" => $constructeur,
"annee" => $annee,
"notes" => trim((string) ($donnees["notes"] ?? "")),
"createdAt" => $maintenant,
"updatedAt" => $maintenant
];
return $this->store->ajouter($console);
}
public function modifier(string $id, string $utilisateurId, array $donnees): array
{
$console = $this->trouverPourUtilisateur($id, $utilisateurId);
if ($console === null)
{
throw new RuntimeException("Console introuvable.");
}
$nom = trim((string) ($donnees["nom"] ?? ""));
$constructeur = trim((string) ($donnees["constructeur"] ?? ""));
if ($nom === "" || $constructeur === "")
{
throw new InvalidArgumentException("Le nom et le constructeur sont obligatoires.");
}
$miseAJour = $this->store->mettreAJour($id, [
"nom" => $nom,
"constructeur" => $constructeur,
"annee" => $this->normaliserAnnee($donnees["annee"] ?? null),
"notes" => trim((string) ($donnees["notes"] ?? "")),
"updatedAt" => Helpers::maintenant()
]);
if ($miseAJour === null)
{
throw new RuntimeException("Échec de la mise à jour.");
}
return $miseAJour;
}
public function supprimer(string $id, string $utilisateurId): bool
{
$console = $this->trouverPourUtilisateur($id, $utilisateurId);
if ($console === null)
{
return false;
}
return $this->store->supprimer($id);
}
public function compterPourUtilisateur(string $utilisateurId): int
{
return count($this->listerPourUtilisateur($utilisateurId));
}
private function normaliserAnnee(mixed $annee): ?int
{
if ($annee === null || $annee === "")
{
return null;
}
$valeur = (int) $annee;
if ($valeur < 1970 || $valeur > (int) date("Y") + 2)
{
return null;
}
return $valeur;
}
}
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.