feat : refonte complète des migrations de base de données et amorce de mise en page de la page de profil utilisateur (pseudo + autres infos en mode "modification".

Suppression des commentaires inutiles
This commit is contained in:
2026-04-01 10:00:26 +02:00
parent f3822a60aa
commit b57236c4e7
23 changed files with 307 additions and 592 deletions

View File

@@ -2,45 +2,76 @@
namespace App\Service;
use RuntimeException;
use Symfony\Component\DependencyInjection\Attribute\Autowire;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\String\Slugger\SluggerInterface;
/**
* Service de gestion des envois et suppressions de fichiers.
*/
class FileUploader
{
// On utilise la promotion de constructeur (PHP 8) : ultra moderne et concis
/**
* @param string $targetDirectory Le chemin absolu vers le dossier de dépôt.
* @param SluggerInterface $slugger Le service de nettoyage des chaînes de caractères.
*/
public function __construct(
private string $targetDirectory,
private SluggerInterface $slugger,
) {
#[Autowire('%kernel.project_dir%/public/uploads/img')]
private readonly string $targetDirectory,
private readonly SluggerInterface $slugger,
)
{
}
/**
* Traite, sécurise et déplace un fichier déposé.
*
* @param UploadedFile $file Le fichier physique à déposer.
* @return string Le nom final sécurisé et unique du fichier.
* @throws RuntimeException En cas d'échec de l'écriture sur le disque.
*/
public function upload(UploadedFile $file): string
{
$originalFilename = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $this->slugger->slug($originalFilename);
$fileName = $safeFilename . '-' . uniqid() . '.' . $file->guessExtension();
// Utilisation de uniqid('', true) pour garantir une unicité absolue en production
$fileName = sprintf('%s-%s.%s', $safeFilename, uniqid('', true), $file->guessExtension());
try {
$file->move($this->getTargetDirectory(), $fileName);
} catch (FileException $e) {
// Ici tu peux logguer l'erreur si besoin
throw new \Exception('Erreur lors du transfert de l\'image : ' . $e->getMessage());
throw new RuntimeException('Erreur lors du transfert de l\'image : ' . $e->getMessage(), 0, $e);
}
return $fileName;
}
/**
* Supprime physiquement un fichier du serveur.
*
* @param string|null $fileName Le nom du fichier à supprimer.
*/
public function delete(?string $fileName): void
{
if ($fileName) {
$filePath = $this->getTargetDirectory() . 'FileUploader.php/' . $fileName;
if (file_exists($filePath)) {
unlink($filePath);
}
if (null === $fileName) {
return;
}
$filePath = rtrim($this->getTargetDirectory(), '/') . '/' . $fileName;
if (file_exists($filePath)) {
unlink($filePath);
}
}
/**
* Retourne le chemin du répertoire de dépôt.
*
* @return string
*/
public function getTargetDirectory(): string
{
return $this->targetDirectory;