feat: Permettre aux enseignants de créer et gérer les devoirs
Some checks failed
CI / Backend Tests (push) Has been cancelled
CI / Frontend Tests (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
CI / Naming Conventions (push) Has been cancelled
CI / Build Check (push) Has been cancelled

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:
2026-03-12 10:11:06 +01:00
parent 56bc808d85
commit e9efb90f59
51 changed files with 4776 additions and 7 deletions

View File

@@ -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);
}
}
}