From 8aac63715ad55e1932f30bbfbe20067ec6ec6bc6 Mon Sep 17 00:00:00 2001 From: kikootwo Date: Wed, 11 Mar 2026 09:59:54 -0400 Subject: [PATCH] Pass user ID to addSyncShelvesJob Include the requesting user's ID as an additional argument when enqueueing immediate shelf sync jobs so the job has user context. Updated the route implementation and adjusted affected tests (goodreads-shelves-id, hardcover-shelves-id, and hardcover-shelves routes tests) to expect the extra 'user-1' parameter. --- src/app/api/user/hardcover-shelves/[id]/route.ts | 2 +- tests/api/goodreads-shelves-id.routes.test.ts | 2 +- tests/api/hardcover-shelves-id.routes.test.ts | 3 ++- tests/api/hardcover-shelves.routes.test.ts | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/app/api/user/hardcover-shelves/[id]/route.ts b/src/app/api/user/hardcover-shelves/[id]/route.ts index 8141a07..5c74203 100644 --- a/src/app/api/user/hardcover-shelves/[id]/route.ts +++ b/src/app/api/user/hardcover-shelves/[id]/route.ts @@ -156,7 +156,7 @@ export async function PATCH( if (needsResync) { try { const jobQueue = getJobQueueService(); - await jobQueue.addSyncShelvesJob(undefined, updated.id, 'hardcover', 0); + await jobQueue.addSyncShelvesJob(undefined, updated.id, 'hardcover', 0, req.user.id); } catch (error) { logger.error('Failed to trigger immediate list sync', { error: error instanceof Error ? error.message : String(error), diff --git a/tests/api/goodreads-shelves-id.routes.test.ts b/tests/api/goodreads-shelves-id.routes.test.ts index 97bff25..73be891 100644 --- a/tests/api/goodreads-shelves-id.routes.test.ts +++ b/tests/api/goodreads-shelves-id.routes.test.ts @@ -164,7 +164,7 @@ describe('PATCH /api/user/goodreads-shelves/[id]', () => { where: { id: 'shelf-1' }, data: { rssUrl: NEW_RSS, lastSyncAt: null, bookCount: null, coverUrls: null }, }); - expect(jobQueueMock.addSyncShelvesJob).toHaveBeenCalledWith(undefined, updatedShelf.id, 'goodreads', 0); + expect(jobQueueMock.addSyncShelvesJob).toHaveBeenCalledWith(undefined, updatedShelf.id, 'goodreads', 0, 'user-1'); }); it('still returns 200 even when the sync job fails to enqueue', async () => { diff --git a/tests/api/hardcover-shelves-id.routes.test.ts b/tests/api/hardcover-shelves-id.routes.test.ts index dc10efe..58d6c11 100644 --- a/tests/api/hardcover-shelves-id.routes.test.ts +++ b/tests/api/hardcover-shelves-id.routes.test.ts @@ -195,6 +195,7 @@ describe('PATCH /api/user/hardcover-shelves/[id]', () => { SHELF.id, 'hardcover', 0, + 'user-1', ); }); @@ -216,7 +217,7 @@ describe('PATCH /api/user/hardcover-shelves/[id]', () => { where: { id: 'hc-shelf-1' }, data: expect.objectContaining({ listId: 'status-3', lastSyncAt: null }), }); - expect(jobQueueMock.addSyncShelvesJob).toHaveBeenCalledWith(undefined, updated.id, 'hardcover', 0); + expect(jobQueueMock.addSyncShelvesJob).toHaveBeenCalledWith(undefined, updated.id, 'hardcover', 0, 'user-1'); }); it('encrypts the apiToken before persisting', async () => { diff --git a/tests/api/hardcover-shelves.routes.test.ts b/tests/api/hardcover-shelves.routes.test.ts index 176bf1e..74620d1 100644 --- a/tests/api/hardcover-shelves.routes.test.ts +++ b/tests/api/hardcover-shelves.routes.test.ts @@ -137,7 +137,7 @@ describe('POST /api/user/hardcover-shelves', () => { ); // Immediate background sync must have been triggered - expect(jobQueueMock.addSyncShelvesJob).toHaveBeenCalledWith(undefined, 'new-shelf', 'hardcover', 0); + expect(jobQueueMock.addSyncShelvesJob).toHaveBeenCalledWith(undefined, 'new-shelf', 'hardcover', 0, 'user-1'); }); it('strips Bearer prefix from apiToken before encrypting', async () => {