create thumbnail task for newsletters too

This commit is contained in:
Hongbo Wu
2023-06-07 11:52:13 +08:00
parent 1d83199342
commit 9be84fb473
3 changed files with 73 additions and 17 deletions

View File

@ -1,3 +1,8 @@
import normalizeUrl from 'normalize-url'
import { PubsubClient } from '../datalayer/pubsub'
import { createPage, getPageByParam, updatePage } from '../elastic/pages'
import { ArticleSavingRequestStatus, Page } from '../elastic/types'
import { enqueueThumbnailTask } from '../utils/createTask'
import {
generateSlug,
stringToHash,
@ -9,10 +14,6 @@ import {
parsePreparedContent,
parseUrlMetadata,
} from '../utils/parser'
import normalizeUrl from 'normalize-url'
import { PubsubClient } from '../datalayer/pubsub'
import { ArticleSavingRequestStatus, Page } from '../elastic/types'
import { createPage, getPageByParam, updatePage } from '../elastic/pages'
export type SaveContext = {
pubsub: PubsubClient
@ -105,6 +106,18 @@ export const saveEmail = async (
return undefined
}
// create a task to update thumbnail and pre-cache all images
try {
const taskId = await enqueueThumbnailTask(
ctx.uid,
slug,
articleToSave.content
)
console.debug('Created thumbnail task', taskId)
} catch (e) {
console.log('Failed to create thumbnail task', e)
}
articleToSave.id = pageId
return articleToSave

View File

@ -4,7 +4,7 @@ import { PubsubClient } from '../datalayer/pubsub'
import { addHighlightToPage } from '../elastic/highlights'
import { createPage, getPageByParam, updatePage } from '../elastic/pages'
import { ArticleSavingRequestStatus, Page, PageType } from '../elastic/types'
import { env, homePageURL } from '../env'
import { homePageURL } from '../env'
import {
HighlightType,
Maybe,
@ -14,8 +14,7 @@ import {
SaveResult,
} from '../generated/graphql'
import { DataModels } from '../resolvers/types'
import { generateVerificationToken } from '../utils/auth'
import createHttpTaskWithToken from '../utils/createTask'
import { enqueueThumbnailTask } from '../utils/createTask'
import {
generateSlug,
stringToHash,
@ -168,16 +167,12 @@ export const savePage = async (
// create a task to update thumbnail and pre-cache all images
try {
await createHttpTaskWithToken({
payload: {
userId: saver.userId,
slug,
},
taskHandlerUrl: env.queue.thumbnailTaskHandlerUrl,
requestHeaders: {
Authorization: generateVerificationToken(saver.userId),
},
})
const taskId = await enqueueThumbnailTask(
saver.userId,
slug,
articleToSave.content
)
console.debug('Created thumbnail task', taskId)
} catch (e) {
console.log('Failed to create thumbnail task', e)
}

View File

@ -12,6 +12,7 @@ import {
CreateLabelInput,
} from '../generated/graphql'
import { signFeatureToken } from '../services/features'
import { generateVerificationToken } from './auth'
import { CreateTaskError } from './errors'
import { buildLogger } from './logger'
import View = google.cloud.tasks.v2.Task.View
@ -498,4 +499,51 @@ export const enqueueImportFromIntegration = async (
return createdTasks[0].name
}
export const enqueueThumbnailTask = async (
userId: string,
slug: string,
content: string
): Promise<string> => {
const { GOOGLE_CLOUD_PROJECT } = process.env
const payload = {
userId,
slug,
content,
}
const requestHeaders = {
Authorization: generateVerificationToken(userId),
}
// If there is no Google Cloud Project Id exposed, it means that we are in local environment
if (env.dev.isLocal || !GOOGLE_CLOUD_PROJECT) {
// Calling the handler function directly.
setTimeout(() => {
axios
.post(env.queue.thumbnailTaskHandlerUrl, payload, {
headers: requestHeaders,
})
.catch((error) => {
console.error(error)
})
}, 0)
return ''
}
const createdTasks = await createHttpTaskWithToken({
payload,
taskHandlerUrl: env.queue.thumbnailTaskHandlerUrl,
requestHeaders,
})
if (!createdTasks || !createdTasks[0].name) {
logger.error(`Unable to get the name of the task`, {
payload,
createdTasks,
})
throw new CreateTaskError(`Unable to get the name of the task`)
}
return createdTasks[0].name
}
export default createHttpTaskWithToken