From 4294521dfc13cde6ac48627c57655f6e12a17a29 Mon Sep 17 00:00:00 2001 From: Yisroel Baum Date: Fri, 1 May 2026 09:59:18 +0300 Subject: [PATCH] add scheduled nodes endpoint --- app/ScheduledNode/ScheduledNodeController.php | 61 +++++++++++++++++++ bootstrap/app.php | 6 ++ 2 files changed, 67 insertions(+) create mode 100644 app/ScheduledNode/ScheduledNodeController.php diff --git a/app/ScheduledNode/ScheduledNodeController.php b/app/ScheduledNode/ScheduledNodeController.php new file mode 100644 index 0000000..282f381 --- /dev/null +++ b/app/ScheduledNode/ScheduledNodeController.php @@ -0,0 +1,61 @@ +getAttribute('user'); + if (!$user instanceof User) { + $response->getBody()->write( + json_encode(['error' => 'unauthenticated']) + ); + return $response->withStatus(401) + ->withHeader('Content-Type', 'application/json'); + } + + $queryParams = $request->getQueryParams(); + $date = $queryParams['date'] ?? null; + if ($date === null || $date === '') { + $response->getBody()->write( + json_encode(['error' => 'date is required']) + ); + return $response->withStatus(400) + ->withHeader('Content-Type', 'application/json'); + } + + $scheduledNodes = $getTodaysSchedule->execute( + new GetTodaysScheduleRequest( + date: $date, + userId: $user->getId(), + ) + ); + + $data = array_values(array_map( + function (ScheduledNode $scheduledNode) { + return [ + 'id' => $scheduledNode->getId(), + 'date' => $scheduledNode->getDate()->format('Y-m-d'), + 'planName' => $scheduledNode->getPlan()->getName(), + 'nodeTitle' => $scheduledNode->getNode()->getTitle(), + 'completed' => $scheduledNode->getCompleted(), + ]; + }, + $scheduledNodes, + )); + + $response->getBody()->write(json_encode($data)); + return $response->withStatus(200) + ->withHeader('Content-Type', 'application/json'); + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index c2150e0..b4e9907 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -11,6 +11,7 @@ use App\View\ViewController; use App\Text\TextController; use App\Node\NodeController; use App\Plan\PlanController; +use App\ScheduledNode\ScheduledNodeController; $container = require __DIR__ . '/container.php'; $app = Bridge::create($container); @@ -44,6 +45,11 @@ $app->group('', function (RouteCollectorProxy $group) { ); $group->post('/api/plans', [PlanController::class, 'createPlan']); + + $group->get( + '/api/scheduled-nodes', + [ScheduledNodeController::class, 'getScheduledNodes'] + ); })->add(AuthMiddleware::class); // Admin-only routes