From e6672fe38ce5d99f3b3f026154f777aded7361de Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Thu, 29 Jan 2026 17:36:53 +0000
Subject: [PATCH] =Starting refactor of Meta and Routes to fluent-style

---
 inc/rest/routes/QueueRoutes.php |  178 +++++++++++++----------------------------------------------
 1 files changed, 39 insertions(+), 139 deletions(-)

diff --git a/inc/rest/routes/QueueRoutes.php b/inc/rest/routes/QueueRoutes.php
index 400717b..3654ae0 100644
--- a/inc/rest/routes/QueueRoutes.php
+++ b/inc/rest/routes/QueueRoutes.php
@@ -11,26 +11,26 @@
 use DateTimeZone;
 
 if (!defined('ABSPATH')) {
-    exit; // Exit if accessed directly
+	exit; // Exit if accessed directly
 }
 
 class QueueRoutes extends RestRouteManager
 {
-    public function __construct()
-    {
-        $this->cache_name = 'queue';
-        $this->cache_ttl = 300;
-        parent::__construct();
+	public function __construct()
+	{
+		$this->cache_name = 'queue';
+		$this->cache_ttl = 300;
+		parent::__construct();
 
 		if (JVB_TESTING) {
 			$this->cache->flush();
 		}
-    }
+	}
 
-    /**
-     * Registers queue routes
-     * @return void
-     */
+	/**
+	 * Registers queue routes
+	 * @return void
+	 */
 	public function registerRoutes():void
 	{
 		register_rest_route($this->namespace, '/queue', [
@@ -79,48 +79,14 @@
 				]
 			]
 		]);
-
-		register_rest_route($this->namespace, '/queue/errors', [
-			'methods'   => 'GET',
-			'callback'  => [$this, 'getOperationErrors'],
-			'permission_callback' => [$this, 'checkPermission'],
-		]);
-
-		register_rest_route($this->namespace, '/queue/poll', [
-			'methods'   => 'GET',
-			'callback'  => [$this, 'pollQueue'],
-			'permission_callback' => [$this, 'checkPermission'],
-			'args' => [
-				'since' => [
-					'type' => 'string',
-					'description' => 'ISO timestamp - only return operations updated after this'
-				],
-				'ids' => [
-					'type' => 'string',
-					'description' => 'Comma-separated IDs to check'
-				]
-			]
-		]);
-
-		register_rest_route($this->namespace, '/queue/(?P<id>[a-zA-Z0-9_-]+)', [
-			'methods'   => 'GET',
-			'callback'  => [$this, 'getOperation'],
-			'permission_callback' => [$this, 'checkPermission'],
-			'args' => [
-				'id' => [
-					'required' => true,
-					'type' => 'string',
-				]
-			]
-		]);
 	}
 
-    /**
-     * Get queue operations with optional filtering
-     *
-     * @param WP_REST_Request $request
-     * @return WP_REST_Response
-     */
+	/**
+	 * Get queue operations with optional filtering
+	 *
+	 * @param WP_REST_Request $request
+	 * @return WP_REST_Response
+	 */
 	public function getQueue(WP_REST_Request $request): WP_REST_Response
 	{
 		$user_id = $request->get_param('user');
@@ -209,7 +175,7 @@
 	/**
 	 * Format Operation object for API response
 	 */
-	protected function formatOperationFromObject(\JVBase\managers\queue\Operation $op, bool $full = false): array
+	protected function formatOperationFromObject(\JVBase\managers\queue\Operation $op): array
 	{
 		$formatted = [
 			'id' => $op->id,
@@ -217,31 +183,31 @@
 			'status' => $this->mapStateToStatus($op->state, $op->outcome),
 			'progress_count' => $op->processedItems,
 			'count' => $op->totalItems,
-			'title' => $this->getOperationTitle($op->type, $op->requestData),
-			'created_at' => $this->formatTimestamp($op->scheduledAt),
-			'updated_at' => $this->formatTimestamp($op->completedAt ?? $op->startedAt ?? $op->scheduledAt),
+			'retries' => $op->retries,
+			'data' => $op->requestData,
+			'result' => $op->result ?? [],
 		];
 
-		if ($op->processedItems > 0 && $op->totalItems > 0) {
-			$formatted['progress_percentage'] = round(($op->processedItems / $op->totalItems) * 100);
+		$formatted['created_at'] = $this->formatTimestamp($op->scheduledAt);
+		$formatted['updated_at'] = $this->formatTimestamp($op->completedAt ?? $op->startedAt ?? $op->scheduledAt);
+
+		if ($op->state === 'completed' && $op->completedAt) {
+			$formatted['completed_at'] = $this->formatTimestamp($op->completedAt);
 		}
 
 		if ($op->errorMessage) {
 			$formatted['error_message'] = $op->errorMessage;
 		}
 
-		// Only include heavy data when requested
-		if ($full) {
-			$formatted['data'] = $op->requestData;
-			$formatted['result'] = $op->result ?? [];
-			$formatted['retries'] = $op->retries;
-			$formatted['user_dismissed'] = $op->userDismissed;
-
-			if ($op->state === 'completed' && $op->completedAt) {
-				$formatted['completed_at'] = $this->formatTimestamp($op->completedAt);
-			}
+		if ($formatted['count'] > 0) {
+			$formatted['progress_percentage'] = round(
+				($formatted['progress_count'] / $formatted['count']) * 100
+			);
 		}
 
+		$formatted['title'] = $this->getOperationTitle($op->type, $op->requestData);
+		$formatted['user_dismissed'] = $op->userDismissed;
+
 		return $formatted;
 	}
 
@@ -276,12 +242,12 @@
 		return $base_title;
 	}
 
-    /**
-     * Update operation status (dismiss or retry)
-     *
-     * @param WP_REST_Request $request
-     * @return WP_REST_Response
-     */
+	/**
+	 * Update operation status (dismiss or retry)
+	 *
+	 * @param WP_REST_Request $request
+	 * @return WP_REST_Response
+	 */
 	public function handleAction(WP_REST_Request $request): WP_REST_Response
 	{
 		$data = $request->get_json_params();
@@ -436,70 +402,4 @@
 			'cleanup_reason' => null
 		];
 	}
-
-
-	public function pollQueue(WP_REST_Request $request): WP_REST_Response
-	{
-		$user_id = $request->get_param('user');
-		$since = $request->get_param('since');
-		$ids = $request->get_param('ids');
-
-		$filters = [
-			'not_dismissed' => true,
-			'limit' => 50,
-		];
-
-		if (!empty($ids)) {
-			$filters['ids'] = array_map('trim', explode(',', $ids));
-		}
-
-		$operations = JVB()->queue()->getUserOperations($user_id, $filters);
-
-		// Filter by timestamp if provided
-		if ($since) {
-			$sinceTime = strtotime($since);
-			$operations = array_filter($operations, function($op) use ($sinceTime) {
-				$updatedAt = strtotime($op->completedAt ?? $op->startedAt ?? $op->scheduledAt);
-				return $updatedAt > $sinceTime;
-			});
-		}
-
-		// Return minimal data
-		$items = array_map(function($op) {
-			return [
-				'id' => $op->id,
-				'status' => $this->mapStateToStatus($op->state, $op->outcome),
-				'progress_count' => $op->processedItems,
-				'count' => $op->totalItems,
-				'updated_at' => $this->formatTimestamp($op->completedAt ?? $op->startedAt ?? $op->scheduledAt),
-				'error_message' => $op->errorMessage,
-			];
-		}, $operations);
-
-		return new WP_REST_Response([
-			'items' => array_values($items),
-			'server_time' => date('c'),
-			'has_active' => count(array_filter($items, fn($i) => in_array($i['status'], ['pending', 'processing']))) > 0,
-		]);
-	}
-
-	public function getOperation(WP_REST_Request $request): WP_REST_Response
-	{
-		$id = $request->get_param('id');
-		$user_id = $request->get_param('user');
-
-		$op = JVB()->queue()->get($id);
-
-		if (!$op || $op->userId !== $user_id) {
-			return new WP_REST_Response([
-				'success' => false,
-				'message' => 'Operation not found'
-			], 404);
-		}
-
-		return new WP_REST_Response([
-			'success' => true,
-			'operation' => $this->formatOperationFromObject($op, true) // Full data
-		]);
-	}
 }

--
Gitblit v1.10.0