Check state in articleSavingRequest

This commit is contained in:
Hongbo Wu 2022-05-04 19:33:13 +08:00
parent 9e3db0e053
commit bc1ed3f054
3 changed files with 23 additions and 14 deletions

View file

@ -46,6 +46,7 @@ import { ContentParseError } from '../../utils/errors'
import {
authorized,
generateSlug,
isParsingTimeout,
pageError,
stringToHash,
userDataToUser,
@ -102,7 +103,7 @@ const FORCE_PUPPETEER_URLS = [
/twitter\.com\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+)(?:\/.*)?/,
/^((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu.be))(\/(?:[\w-]+\?v=|embed\/|v\/)?)([\w-]+)(\S+)?$/,
]
const UNPARSEABLE_CONTENT = 'We were unable to parse this page.'
const UNPARSEABLE_CONTENT = '<p>We were unable to parse this page.</p>'
export type CreateArticlesSuccessPartial = Merge<
CreateArticleSuccess,
@ -416,17 +417,8 @@ export const getArticleResolver: ResolverFn<
return { errorCodes: [ArticleErrorCode.NotFound] }
}
if (
page.state === ArticleSavingRequestStatus.Processing &&
new Date(page.savedAt).getTime() < new Date().getTime() - 1000 * 30
) {
page.content = `<p>${UNPARSEABLE_CONTENT}</p>`
page.description = UNPARSEABLE_CONTENT
page.state = ArticleSavingRequestStatus.Failed
await updatePage(page.id, page, {
uid: claims.uid,
pubsub,
})
if (isParsingTimeout(page)) {
page.content = UNPARSEABLE_CONTENT
}
return {

View file

@ -2,6 +2,7 @@
import {
ArticleSavingRequestError,
ArticleSavingRequestErrorCode,
ArticleSavingRequestStatus,
ArticleSavingRequestSuccess,
CreateArticleSavingRequestError,
CreateArticleSavingRequestErrorCode,
@ -9,7 +10,11 @@ import {
MutationCreateArticleSavingRequestArgs,
QueryArticleSavingRequestArgs,
} from '../../generated/graphql'
import { authorized, pageToArticleSavingRequest } from '../../utils/helpers'
import {
authorized,
isParsingTimeout,
pageToArticleSavingRequest,
} from '../../utils/helpers'
import { createPageSaveRequest } from '../../services/create_page_save_request'
import { getPageById } from '../../elastic/pages'
import { isErrorWithCode } from '../user'
@ -62,8 +67,12 @@ export const articleSavingRequestResolver = authorized<
user = await models.user.get(page.userId)
// eslint-disable-next-line no-empty
} catch (error) {}
if (user && page)
if (user && page) {
if (isParsingTimeout(page)) {
page.state = ArticleSavingRequestStatus.Succeeded
}
return { articleSavingRequest: pageToArticleSavingRequest(user, page) }
}
return { errorCodes: [ArticleSavingRequestErrorCode.NotFound] }
})

View file

@ -202,6 +202,14 @@ export const pageToArticleSavingRequest = (
updatedAt: page.updatedAt || new Date(),
})
export const isParsingTimeout = (page: Page): boolean => {
return (
// page processed more than 30 seconds ago
page.state === ArticleSavingRequestStatus.Processing &&
new Date(page.savedAt).getTime() < new Date().getTime() - 1000 * 30
)
}
export const validatedDate = (
date: Date | string | undefined
): Date | undefined => {