Jake Vanderwerf
2026-02-17 a24a06002081ad71a78ffeff9072725ba39cf121
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'