From 4aafe86ef0bd0bf53ff012069e2680901477e019 Mon Sep 17 00:00:00 2001 From: Tom Date: Tue, 4 Mar 2025 04:59:13 +0000 Subject: [PATCH] Searching while updating series now uses latest published date of the series as a stop reference. --- .../src/library/library.consumer.ts | 12 ++++++------ .../nestjs-seshat-api/src/library/library.module.ts | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/backend/nestjs-seshat-api/src/library/library.consumer.ts b/backend/nestjs-seshat-api/src/library/library.consumer.ts index 5980290..946af45 100644 --- a/backend/nestjs-seshat-api/src/library/library.consumer.ts +++ b/backend/nestjs-seshat-api/src/library/library.consumer.ts @@ -28,7 +28,7 @@ export class LibraryConsumer extends WorkerHost { if (job.name == 'new_series') { const series: CreateSeriesSubscriptionJobDto = job.data; - const books = await this.search(job, series, false); + const books = await this.search(job, series, null); let counter = 0; for (let book of books) { @@ -54,7 +54,8 @@ export class LibraryConsumer extends WorkerHost { const series: CreateSeriesSubscriptionJobDto = job.data; const existingBooks = await this.library.getBooksFromSeries(series); const existingVolumes = existingBooks.map(b => b.volume); - const books = await this.search(job, series, true); + const lastPublishedBook = existingBooks.sort((a, b) => b.publishedAt.getTime() - a.publishedAt.getTime())[0]; + const books = await this.search(job, series, lastPublishedBook?.publishedAt); let counter = 0; for (let book of books) { @@ -99,10 +100,10 @@ export class LibraryConsumer extends WorkerHost { return null; } - private async search(job: Job, series: CreateSeriesSubscriptionJobDto, newest: boolean): Promise<{ result: BookSearchResultDto, score: number }[]> { + private async search(job: Job, series: CreateSeriesSubscriptionJobDto, after: Date|null): Promise<{ result: BookSearchResultDto, score: number }[]> { let context = this.provider.generateSearchContext(series.provider, series.title) as GoogleSearchContext; context.maxResults = '40'; - if (newest) { + if (after) { context.orderBy = 'newest'; } @@ -123,7 +124,7 @@ export class LibraryConsumer extends WorkerHost { } context = context.next(); job.updateProgress(pageSearchedCount * 5); - } while (results.length >= context.maxResults && (!newest || unhelpfulResultsCount < 3)); + } while (results.length >= context.maxResults && (!after || after < results[results.length - 1].publishedAt)); // Sort & de-duplicate the entries received. const books = related.map(book => this.toScore(book, series)) @@ -131,7 +132,6 @@ export class LibraryConsumer extends WorkerHost { .filter((_, index, arr) => index == 0 || arr[index - 1].result.volume != arr[index].result.volume); job.updateProgress(25); - this.logger.debug({ class: LibraryConsumer.name, method: this.search.name, diff --git a/backend/nestjs-seshat-api/src/library/library.module.ts b/backend/nestjs-seshat-api/src/library/library.module.ts index 693c8eb..c271ea7 100644 --- a/backend/nestjs-seshat-api/src/library/library.module.ts +++ b/backend/nestjs-seshat-api/src/library/library.module.ts @@ -31,6 +31,7 @@ import { LibraryController } from './library.controller'; HttpModule, ProvidersModule, ], + exports: [LibraryService], providers: [LibraryService, BooksService, SeriesService, LibraryConsumer], controllers: [LibraryController] })