FranchiseeDashboardController.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Controllers\Concerns\ResolvesActiveUnit;
  4. use App\Models\Student;
  5. use App\Models\StudentContract;
  6. use Illuminate\Http\JsonResponse;
  7. class FranchiseeDashboardController extends Controller
  8. {
  9. use ResolvesActiveUnit;
  10. public function summary(): JsonResponse
  11. {
  12. $unitId = $this->activeUnitId();
  13. abort_if(!$unitId, 404, 'Unidade não encontrada.');
  14. $students = Student::where('unit_id', $unitId)->get(['id', 'name', 'birth_date', 'created_at']);
  15. $contracts = StudentContract::where('unit_id', $unitId)->get(['id', 'status']);
  16. return $this->successResponse(payload: [
  17. 'students_count' => $students->count(),
  18. 'contracts' => [
  19. 'active' => $contracts->where('status', 'active')->count(),
  20. 'frozen' => $contracts->where('status', 'frozen')->count(),
  21. 'cancelled' => $contracts->where('status', 'cancelled')->count(),
  22. ],
  23. 'birthdays' => $students
  24. ->filter(fn (Student $student) => $student->birth_date?->month === now()->month)
  25. ->map(fn (Student $student) => [
  26. 'day' => $student->birth_date->day,
  27. 'name' => $student->name,
  28. ])
  29. ->sortBy('day')
  30. ->values(),
  31. 'enrollments' => $students->map(fn (Student $student) => [
  32. 'created_at' => $student->created_at?->toISOString(),
  33. ])->values(),
  34. ]);
  35. }
  36. }