Files
alrahma_sunday_school_api/app/Services/Incidents/IncidentHistoryService.php
T
2026-06-11 11:46:12 -04:00

60 lines
1.9 KiB
PHP

<?php
namespace App\Services\Incidents;
use App\Models\Incident;
class IncidentHistoryService
{
public function __construct(private IncidentLookupService $lookup) {}
public function history(?string $schoolYear, ?string $semester): array
{
$builder = Incident::query()->orderBy('incident_datetime', 'DESC');
if ($schoolYear !== null && $schoolYear !== '') {
$builder->where('school_year', $schoolYear);
}
if ($semester !== null && $semester !== '') {
$builder->where('semester', $semester);
}
return $builder->get()->map(fn ($row) => $row->toArray())->all();
}
public function processed(?string $schoolYear, ?string $semester): array
{
$incidents = $this->history($schoolYear, $semester);
if (empty($incidents)) {
return [];
}
$gradeMap = $this->lookup->gradeNameMap(array_column($incidents, 'grade'));
$updaterIds = [];
foreach ($incidents as $incident) {
foreach (['updated_by_open', 'updated_by_closed', 'updated_by_canceled'] as $key) {
if (! empty($incident[$key])) {
$updaterIds[] = (int) $incident[$key];
}
}
}
$updaterMap = $this->lookup->updaterNameMap($updaterIds);
foreach ($incidents as &$incident) {
foreach (['updated_by_open', 'updated_by_closed', 'updated_by_canceled'] as $key) {
$id = (int) ($incident[$key] ?? 0);
$incident[$key.'_name'] = $id > 0 ? ($updaterMap[$id] ?? null) : null;
}
$gradeValue = $incident['grade'] ?? '';
if (is_numeric($gradeValue)) {
$incident['grade'] = $gradeMap[(int) $gradeValue] ?? (string) $gradeValue;
}
}
unset($incident);
return $incidents;
}
}