diff --git a/packages/api/src/services/speech.ts b/packages/api/src/services/speech.ts index 01d86c768..997773624 100644 --- a/packages/api/src/services/speech.ts +++ b/packages/api/src/services/speech.ts @@ -1,5 +1,8 @@ import { getRepository } from '../entity/utils' import { Speech, SpeechState } from '../entity/speech' +import { searchPages } from '../elastic/pages' +import { Page } from '../elastic/types' +import { SortBy, SortOrder } from '../utils/search' export const setSpeechFailure = async (id: string) => { // update state @@ -7,3 +10,37 @@ export const setSpeechFailure = async (id: string) => { state: SpeechState.FAILED, }) } + +/* + * We should not transcribe the page when: + ** 1. User has no recent listens the last 30 days + ** 2. User has a recent listen but the page was saved after the listen + */ +export const shouldTranscribe = async ( + userId: string, + page: Page +): Promise => { + const [recentListenedPage, count] = (await searchPages( + { + dateFilters: [ + { + field: 'listenedAt', + startDate: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000), + }, + ], + sort: { + by: SortBy.LISTENED, + order: SortOrder.DESCENDING, + }, + size: 1, + }, + userId + )) || [[], 0] + if (count === 0) { + return false + } + return ( + !!recentListenedPage[0].listenedAt && + page.savedAt < recentListenedPage[0].listenedAt + ) +} diff --git a/packages/api/src/utils/search.ts b/packages/api/src/utils/search.ts index 554d08c83..f09b2b3af 100644 --- a/packages/api/src/utils/search.ts +++ b/packages/api/src/utils/search.ts @@ -63,6 +63,7 @@ export enum SortBy { SCORE = '_score', PUBLISHED = 'publishedAt', READ = 'readAt', + LISTENED = 'listenedAt', } export enum SortOrder {