From 2c39916441a5dfe46f809b60cbae933ced76af6a Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Mon, 2 Jan 2023 16:49:11 +0800 Subject: [PATCH] Add wordsCount to article schema --- packages/api/src/generated/graphql.ts | 4 ++++ packages/api/src/generated/schema.graphql | 2 ++ packages/api/src/resolvers/function_resolvers.ts | 6 +++++- packages/api/src/schema.ts | 2 ++ packages/api/src/services/save_email.ts | 8 +++++++- 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/api/src/generated/graphql.ts b/packages/api/src/generated/graphql.ts index 575cfd9a8..587a7488c 100644 --- a/packages/api/src/generated/graphql.ts +++ b/packages/api/src/generated/graphql.ts @@ -126,6 +126,7 @@ export type Article = { updatedAt: Scalars['Date']; uploadFileId?: Maybe; url: Scalars['String']; + wordsCount?: Maybe; }; @@ -2151,6 +2152,7 @@ export type SearchItem = { updatedAt?: Maybe; uploadFileId?: Maybe; url: Scalars['String']; + wordsCount?: Maybe; }; export type SearchItemEdge = { @@ -4003,6 +4005,7 @@ export type ArticleResolvers; uploadFileId?: Resolver, ParentType, ContextType>; url?: Resolver; + wordsCount?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }; @@ -5162,6 +5165,7 @@ export type SearchItemResolvers, ParentType, ContextType>; uploadFileId?: Resolver, ParentType, ContextType>; url?: Resolver; + wordsCount?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }; diff --git a/packages/api/src/generated/schema.graphql b/packages/api/src/generated/schema.graphql index 8d556e138..81193a90f 100644 --- a/packages/api/src/generated/schema.graphql +++ b/packages/api/src/generated/schema.graphql @@ -102,6 +102,7 @@ type Article { updatedAt: Date! uploadFileId: ID url: String! + wordsCount: Int } type ArticleEdge { @@ -1578,6 +1579,7 @@ type SearchItem { updatedAt: Date uploadFileId: ID url: String! + wordsCount: Int } type SearchItemEdge { diff --git a/packages/api/src/resolvers/function_resolvers.ts b/packages/api/src/resolvers/function_resolvers.ts index 6f75dd769..85255a93d 100644 --- a/packages/api/src/resolvers/function_resolvers.ts +++ b/packages/api/src/resolvers/function_resolvers.ts @@ -6,7 +6,7 @@ import { createReactionResolver, deleteReactionResolver } from './reaction' import { Claims, WithDataSourcesContext } from './types' import { createImageProxyUrl } from '../utils/imageproxy' -import { userDataToUser, validatedDate } from '../utils/helpers' +import { userDataToUser, validatedDate, wordsCount } from '../utils/helpers' import { Article, @@ -510,6 +510,10 @@ export const functionResolvers = { image(article: { image?: string }): string | undefined { return article.image && createImageProxyUrl(article.image, 260, 260) }, + wordsCount(article: { wordsCount?: number; content?: string }) { + if (article.wordsCount) return article.wordsCount + return article.content ? wordsCount(article.content) : undefined + }, }, ArticleSavingRequest: { async article(request: { userId: string; articleId: string }, __: unknown) { diff --git a/packages/api/src/schema.ts b/packages/api/src/schema.ts index 0128f88fb..281749da2 100755 --- a/packages/api/src/schema.ts +++ b/packages/api/src/schema.ts @@ -385,6 +385,7 @@ const schema = gql` language: String readAt: Date recommendations: [Recommendation!] + wordsCount: Int } # Query: article @@ -1548,6 +1549,7 @@ const schema = gql` highlights: [Highlight!] siteIcon: String recommendations: [Recommendation!] + wordsCount: Int } type SearchItemEdge { diff --git a/packages/api/src/services/save_email.ts b/packages/api/src/services/save_email.ts index 19e2ec024..1fdf423bd 100644 --- a/packages/api/src/services/save_email.ts +++ b/packages/api/src/services/save_email.ts @@ -1,4 +1,9 @@ -import { generateSlug, stringToHash, validatedDate } from '../utils/helpers' +import { + generateSlug, + stringToHash, + validatedDate, + wordsCount, +} from '../utils/helpers' import { FAKE_URL_PREFIX, parsePreparedContent, @@ -78,6 +83,7 @@ export const saveEmail = async ( state: ArticleSavingRequestStatus.Succeeded, siteIcon: parseResult.parsedContent?.siteIcon ?? undefined, siteName: parseResult.parsedContent?.siteName ?? undefined, + wordsCount: wordsCount(content), } const page = await getPageByParam({