feat: Permettre aux enseignants de créer et gérer les devoirs
Les enseignants avaient besoin d'un outil pour créer des devoirs assignés à leurs classes, avec filtrage automatique par matière selon la classe sélectionnée. Le système valide que la date d'échéance tombe un jour ouvrable (lundi-vendredi) et empêche les dates dans le passé. Le domaine modélise le devoir comme un agrégat avec pièces jointes, statut brouillon/publié, et événements métier (création, modification, suppression). Les handlers de notification écoutent ces événements pour les futurs envois aux parents et élèves.
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Scolarite\Infrastructure\Storage;
|
||||
|
||||
use App\Scolarite\Application\Port\FileStorage;
|
||||
|
||||
use function dirname;
|
||||
use function file_put_contents;
|
||||
use function is_dir;
|
||||
use function is_file;
|
||||
use function is_string;
|
||||
use function mkdir;
|
||||
|
||||
use Override;
|
||||
|
||||
use function unlink;
|
||||
|
||||
final readonly class LocalFileStorage implements FileStorage
|
||||
{
|
||||
public function __construct(
|
||||
private string $storagePath,
|
||||
) {
|
||||
}
|
||||
|
||||
#[Override]
|
||||
public function upload(string $path, mixed $content, string $mimeType): string
|
||||
{
|
||||
$fullPath = $this->storagePath . '/' . $path;
|
||||
$dir = dirname($fullPath);
|
||||
|
||||
if (!is_dir($dir)) {
|
||||
mkdir($dir, 0o755, true);
|
||||
}
|
||||
|
||||
$data = is_string($content) ? $content : '';
|
||||
|
||||
file_put_contents($fullPath, $data);
|
||||
|
||||
return $path;
|
||||
}
|
||||
|
||||
#[Override]
|
||||
public function delete(string $path): void
|
||||
{
|
||||
$fullPath = $this->storagePath . '/' . $path;
|
||||
|
||||
if (is_file($fullPath)) {
|
||||
unlink($fullPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user