Files
presensi/app/Modules/Dashboard/Controllers/DashboardScheduleController.php
2026-03-05 14:37:36 +07:00

78 lines
2.5 KiB
PHP

<?php
namespace App\Modules\Dashboard\Controllers;
use App\Core\BaseApiController;
use App\Modules\Auth\Services\AuthService;
use App\Modules\Dashboard\Services\DashboardScheduleService;
use CodeIgniter\HTTP\ResponseInterface;
/**
* Dashboard Schedule Controller
*
* API for today's schedules (role-filtered).
*/
class DashboardScheduleController extends BaseApiController
{
protected DashboardScheduleService $scheduleService;
protected AuthService $authService;
public function __construct()
{
$this->scheduleService = new DashboardScheduleService();
$this->authService = new AuthService();
}
/**
* GET /api/dashboard/schedules/today
*
* Returns today's schedules (day_of_week from Asia/Jakarta) filtered by current user role.
*
* @return ResponseInterface
*/
public function today(): ResponseInterface
{
$userContext = $this->authService->currentUser();
$schedules = $this->scheduleService->getSchedulesToday($userContext);
return $this->successResponse($schedules, 'Today\'s schedules');
}
/**
* GET /api/dashboard/schedules/by-date?date=YYYY-MM-DD
*
* Schedules for the given date (day_of_week from date in Asia/Jakarta). Role-filtered.
*
* @return ResponseInterface
*/
public function byDate(): ResponseInterface
{
$date = $this->request->getGet('date');
if ($date === null || $date === '') {
return $this->errorResponse('Query parameter date is required (Y-m-d)', null, null, 422);
}
$dt = \DateTimeImmutable::createFromFormat('Y-m-d', $date);
if ($dt === false || $dt->format('Y-m-d') !== $date) {
return $this->errorResponse('Invalid date format. Use Y-m-d.', null, null, 422);
}
$userContext = $this->authService->currentUser();
$schedules = $this->scheduleService->getSchedulesByDate($date, $userContext);
return $this->successResponse($schedules, 'Schedules for date');
}
/**
* GET /api/dashboard/schedules/current
*
* Current lesson (active now) or next upcoming today. Asia/Jakarta. Role-filtered.
*
* @return ResponseInterface
*/
public function current(): ResponseInterface
{
$userContext = $this->authService->currentUser();
$data = $this->scheduleService->getCurrentSchedule($userContext);
return $this->successResponse($data, 'Current schedule');
}
}