feat: Avertir l'enseignant quand un devoir ne respecte pas les règles (mode soft)
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

Quand un établissement configure des règles de devoirs en mode "soft",
l'enseignant est maintenant averti avant la création si la date d'échéance
ne respecte pas les contraintes (délai minimum, pas de lundi après un
certain créneau). Il peut alors choisir de continuer (avec traçabilité)
ou de modifier la date vers une date conforme.

Le mode "hard" (blocage) reste protégé : acknowledgeWarning ne permet
pas de contourner les règles bloquantes, préparant la story 5.5.
This commit is contained in:
2026-03-18 16:37:16 +01:00
parent 706ec43473
commit c46d053db7
17 changed files with 1223 additions and 11 deletions

View File

@@ -9,7 +9,9 @@ use App\Administration\Domain\Model\Subject\SubjectId;
use App\Administration\Domain\Model\User\UserId;
use App\Scolarite\Application\Port\CurrentCalendarProvider;
use App\Scolarite\Application\Port\EnseignantAffectationChecker;
use App\Scolarite\Application\Port\HomeworkRulesChecker;
use App\Scolarite\Domain\Exception\EnseignantNonAffecteException;
use App\Scolarite\Domain\Exception\ReglesDevoirsNonRespecteesException;
use App\Scolarite\Domain\Model\Homework\Homework;
use App\Scolarite\Domain\Repository\HomeworkRepository;
use App\Scolarite\Domain\Service\DueDateValidator;
@@ -26,6 +28,7 @@ final readonly class CreateHomeworkHandler
private EnseignantAffectationChecker $affectationChecker,
private CurrentCalendarProvider $calendarProvider,
private DueDateValidator $dueDateValidator,
private HomeworkRulesChecker $rulesChecker,
private Clock $clock,
) {
}
@@ -46,6 +49,16 @@ final readonly class CreateHomeworkHandler
$dueDate = new DateTimeImmutable($command->dueDate);
$this->dueDateValidator->valider($dueDate, $now, $calendar);
$rulesResult = $this->rulesChecker->verifier($tenantId, $dueDate, $now);
if ($rulesResult->estBloquant()) {
throw new ReglesDevoirsNonRespecteesException($rulesResult->toArray());
}
if ($rulesResult->estAvertissement() && !$command->acknowledgeWarning) {
throw new ReglesDevoirsNonRespecteesException($rulesResult->toArray());
}
$homework = Homework::creer(
tenantId: $tenantId,
classId: $classId,
@@ -57,6 +70,10 @@ final readonly class CreateHomeworkHandler
now: $now,
);
if ($command->acknowledgeWarning && $rulesResult->estAvertissement()) {
$homework->acknowledgeRuleWarning($rulesResult->ruleTypes(), $now);
}
$this->homeworkRepository->save($homework);
return $homework;