From a24a06002081ad71a78ffeff9072725ba39cf121 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Tue, 17 Feb 2026 20:05:31 +0000
Subject: [PATCH] =minor changes, particularly around the JVB_CHILD_URL pattern

---
 inc/rest/routes/UploadRoutes.php |   69 +++++++++++++++++++++-------------
 1 files changed, 43 insertions(+), 26 deletions(-)

diff --git a/inc/rest/routes/UploadRoutes.php b/inc/rest/routes/UploadRoutes.php
index f1db7a0..86ecc06 100644
--- a/inc/rest/routes/UploadRoutes.php
+++ b/inc/rest/routes/UploadRoutes.php
@@ -2,6 +2,7 @@
 namespace JVBase\rest\routes;
 
 use JVBase\managers\queue\executors\UploadExecutor;
+use JVBase\managers\queue\mergers\UploadMerger;
 use JVBase\managers\queue\TypeConfig;
 use JVBase\rest\PermissionHandler;
 use JVBase\rest\Rest;
@@ -34,16 +35,19 @@
 	{
 		$registry = JVB()->queue()->registry();
 		$executor = new UploadExecutor();
+		$merger = new UploadMerger('secured_files');
 
 		// Image uploads - chunked at 5 files
 		$registry->register('image_upload', new TypeConfig(
+			mergeable: $merger,
 			executor: $executor,
 			chunkKey: 'secured_files',
-			chunkSize: 5
+			chunkSize: 3
 		));
 
 		// Video uploads - one at a time (heavy processing)
 		$registry->register('video_upload', new TypeConfig(
+			mergeable: $merger,
 			executor: $executor,
 			chunkKey: 'secured_files',
 			chunkSize: 1
@@ -51,9 +55,10 @@
 
 		// Document uploads - chunked at 10
 		$registry->register('document_upload', new TypeConfig(
+			mergeable: $merger,
 			executor: $executor,
 			chunkKey: 'secured_files',
-			chunkSize: 10
+			chunkSize: 5
 		));
 
 		// Metadata updates
@@ -110,7 +115,8 @@
 			->rateLimit(30)
 			->args([
 				'user'	=> 'int|required',
-				'items'	=> 'array|required'
+				'items'	=> 'array|required',
+				'id'    => 'string'
 			])
 			->register();
     }
@@ -395,7 +401,9 @@
 			$chunkSize = 10;
 		}
 
-		JVB()->queue()->queueOperation(
+		error_log('Queueing Operation: '.print_r($operation_type, true));
+		error_log('With ID: '.print_r($args['upload'], true));
+		$queuedProcessing = JVB()->queue()->queueOperation(
 			$operation_type,
 			$args['user'],
 			array_merge(
@@ -409,22 +417,27 @@
 			]
 		);
 
-		if ($args['mode'] !== 'selection') {
-			$dependencies = [$args['upload']];
-			if (!empty($args['depends_on'])) {
-				$dependencies[] = $args['depends_on'];
-			}
+		error_log('queuedProcessing operation: '.print_r($queuedProcessing, true));
 
-			JVB()->queue()->queueOperation(
-				'attach_upload_to_content',
-				$args['user'],
-				$args,
-				[
-					'priority'      => 'high',
-					'operation_id'  => $args['id'],
-					'depends_on'    => $dependencies
-				]
-			);
+		$uploadOpId = $queuedProcessing['operation_id'];
+
+		if ($args['mode'] !== 'selection') {
+
+			// Only create attach_upload_to_content if the upload was NOT merged.
+			// When merged, the original upload's attach_upload_to_content
+			// will handle all files after the merged image_upload completes.
+			if (!$queuedProcessing['updated_existing']) {
+				JVB()->queue()->queueOperation(
+					'attach_upload_to_content',
+					$args['user'],
+					$args,
+					[
+						'priority'      => 'high',
+						'operation_id'  => $args['id'],
+						'depends_on'    => [$uploadOpId]
+					]
+				);
+			}
 		}
 
 		JVB()->queue()->queueOperation(
@@ -438,7 +451,7 @@
 				'priority'      => 'low',
 				'chunk_size'    => 5,
 				'chunk_key'     => 'files',
-				'depends_on'    => $args['upload']
+				'depends_on'    => [$uploadOpId]
 			]
 		);
 
@@ -812,7 +825,7 @@
 
 			if (!empty($attachments)) {
 				error_log('Attachments: '.print_r($attachments, true));
-				return $this->queueMetaUpdate($attachments, $data['user']);
+				return $this->queueMetaUpdate($attachments, absint($data['user']), sanitize_text_field($data['id']??''));
 			}
 
 
@@ -882,7 +895,7 @@
 	/**
 	 * Queue metadata update with dependency on upload operation
 	 */
-	protected function queueMetaUpdate(array $data, int $user): WP_REST_Response
+	protected function queueMetaUpdate(array $data, int $user, ?string $operationId = null): WP_REST_Response
 	{
 		$queue = JVB()->queue();
 		$depends_on = [];
@@ -893,19 +906,23 @@
 				$depends_on[] = $info['depends_on'];
 			}
 		}
+		$queueData = [
+			'depends_on' => $depends_on,
+		];
+		if ($operationId) {
+			$queueData['operation_id'] = $operationId;
+		}
 		$operationID = $queue->queueOperation(
 			'update_image_meta',
 			$user,
 			$data,
-			[
-				'depends_on' => $depends_on,
-			]
+			$queueData
 		);
 
 		return $this->sendResponse(
 			true,
 			[
-				'operation_id' => $operationID,
+				'operation_id' => $operationID['operation_id']??$operationId,
 				'message'		=> "Successfully queued ".count($data)." of {$original} meta updates"
 			],
 			'Metadata update queued - will apply after upload completes'

--
Gitblit v1.10.0