format('n'); $yearStart = $month >= 9 ? (int) $now->format('Y') : (int) $now->format('Y') - 1; $academicYearStart = sprintf('%d-09-01', $yearStart); $academicYearEnd = sprintf('%d-08-31', $yearStart + 1); $history = $this->reader->studentGradeHistory( $query->studentId, $query->subjectId, $query->classId, $query->teacherId, $query->tenantId, $academicYearStart, $academicYearEnd, ); $grades = array_map( static fn (array $row) => new GradePointDto( date: $row['date'], value: $row['value'], evaluationTitle: $row['evaluationTitle'], ), $history, ); $points = array_values(array_map( static fn (int $i, GradePointDto $g) => [$i + 1, $g->value], array_keys($grades), $grades, )); $trendLine = $this->calculator->calculateTrendLine($points); return new StudentProgressionDto( grades: $grades, trendLine: $trendLine, ); } }