Files
Classeo/backend/src/Scolarite/Infrastructure/ReadModel/InMemoryTeacherStatisticsReader.php
Mathias STRASSER 18c54e6d67
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
feat: Provisionner automatiquement un nouvel établissement
Lorsqu'un super-admin crée un établissement via l'interface, le système
doit automatiquement créer la base tenant, exécuter les migrations,
créer le premier utilisateur admin et envoyer l'invitation — le tout
de manière asynchrone pour ne pas bloquer la réponse HTTP.

Ce mécanisme rend chaque établissement opérationnel dès sa création
sans intervention manuelle sur l'infrastructure.
2026-04-11 20:52:41 +02:00

123 lines
4.6 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Scolarite\Infrastructure\ReadModel;
use App\Scolarite\Application\Port\TeacherStatisticsReader;
final class InMemoryTeacherStatisticsReader implements TeacherStatisticsReader
{
/** @var list<array{classId: string, className: string, subjectId: string, subjectName: string, evaluationCount: int, studentCount: int, average: float|null, successRate: float|null}> */
private array $classesSummary = [];
/** @var list<float> */
private array $classGrades = [];
/** @var list<array{month: string, average: float}> */
private array $monthlyAverages = [];
/** @var list<array{studentId: string, studentName: string, average: float|null}> */
private array $studentAverages = [];
/** @var list<array{date: string, value: float, evaluationTitle: string}> */
private array $gradeHistory = [];
/** @var list<array{evaluationId: string, title: string, classId: string, className: string, subjectId: string, subjectName: string, date: string, average: float|null, gradedCount: int}> */
private array $evaluationDifficulties = [];
/** @var array<string, list<float>> */
private array $studentMonthlyAverages = [];
/** @var list<float> */
private array $otherTeachersAverages = [];
/** @param list<array{classId: string, className: string, subjectId: string, subjectName: string, evaluationCount: int, studentCount: int, average: float|null, successRate: float|null}> $data */
public function feedClassesSummary(array $data): void
{
$this->classesSummary = $data;
}
/** @param list<float> $grades */
public function feedClassGrades(array $grades): void
{
$this->classGrades = $grades;
}
/** @param list<array{month: string, average: float}> $averages */
public function feedMonthlyAverages(array $averages): void
{
$this->monthlyAverages = $averages;
}
/** @param list<array{studentId: string, studentName: string, average: float|null}> $averages */
public function feedStudentAverages(array $averages): void
{
$this->studentAverages = $averages;
}
/** @param list<array{date: string, value: float, evaluationTitle: string}> $history */
public function feedGradeHistory(array $history): void
{
$this->gradeHistory = $history;
}
/** @param list<array{evaluationId: string, title: string, classId: string, className: string, subjectId: string, subjectName: string, date: string, average: float|null, gradedCount: int}> $difficulties */
public function feedEvaluationDifficulties(array $difficulties): void
{
$this->evaluationDifficulties = $difficulties;
}
/** @param array<string, list<float>> $averages */
public function feedStudentMonthlyAverages(array $averages): void
{
$this->studentMonthlyAverages = $averages;
}
/** @param list<float> $averages */
public function feedOtherTeachersAverages(array $averages): void
{
$this->otherTeachersAverages = $averages;
}
public function teacherClassesSummary(string $teacherId, string $tenantId, string $periodStartDate, string $periodEndDate): array
{
return $this->classesSummary;
}
public function classGradesNormalized(string $teacherId, string $classId, string $subjectId, string $tenantId, string $periodStartDate, string $periodEndDate): array
{
return $this->classGrades;
}
public function classMonthlyAverages(string $teacherId, string $classId, string $subjectId, string $tenantId, string $academicYearStart, string $academicYearEnd): array
{
return $this->monthlyAverages;
}
public function studentAveragesForClass(string $teacherId, string $classId, string $subjectId, string $periodId, string $tenantId): array
{
return $this->studentAverages;
}
public function studentMonthlyAveragesForClass(string $classId, string $subjectId, string $tenantId, string $academicYearStart, string $academicYearEnd): array
{
return $this->studentMonthlyAverages;
}
public function studentGradeHistory(string $studentId, string $subjectId, string $classId, string $teacherId, string $tenantId, string $academicYearStart, string $academicYearEnd): array
{
return $this->gradeHistory;
}
public function teacherEvaluationDifficulties(string $teacherId, string $tenantId): array
{
return $this->evaluationDifficulties;
}
public function subjectAveragesForOtherTeachers(string $teacherId, string $subjectId, string $tenantId): array
{
return $this->otherTeachersAverages;
}
}