diff --git a/src/api/articleApi.ts b/src/api/articleApi.ts index c4dbcc7a..75561748 100644 --- a/src/api/articleApi.ts +++ b/src/api/articleApi.ts @@ -18,10 +18,6 @@ import { getArticleIdFromUrn } from "../utils/articleHelpers"; import { createAuthClient, resolveJsonOATS } from "../utils/openapi-fetch/utils"; import { transformArticle, transformVisualElement } from "./transformArticleApi"; -interface ArticleParams { - articleId: string; -} - const client = createAuthClient(); export const fetchTransformedContent = async ( @@ -114,7 +110,7 @@ export async function fetchRelatedContent( }; } try { - const related = await fetchSimpleArticle(`urn:article:${rc}`, context); + const related = await fetchArticle(`urn:article:${rc}`, undefined, context); const nodes = await context.loaders.nodesLoader.load({ contentURI: `urn:article:${related.id}`, language: context.language, @@ -144,10 +140,6 @@ export async function fetchRelatedContent( return relatedContent as GQLRelatedContent[]; } -export async function fetchArticle(params: ArticleParams, context: Context): Promise { - return await fetchSimpleArticle(params.articleId, context); -} - export async function fetchArticlesPage( articleIds: number[], context: Context, @@ -189,7 +181,11 @@ export async function fetchArticles(articleIds: string[], context: Context): Pro return articleIds.map((id) => articles.find((article) => article.id.toString() === id.toString())); } -export async function fetchSimpleArticle(articleUrn: string, context: Context): Promise { +export async function fetchArticle( + articleUrn: string, + revision: number | undefined, + context: Context, +): Promise { return await client .GET("/article-api/v2/articles/{article_id}", { params: { @@ -198,6 +194,7 @@ export async function fetchSimpleArticle(articleUrn: string, context: Context): }, query: { language: context.language, + revision, license: "all", fallback: true, }, diff --git a/src/api/embedsApi.ts b/src/api/embedsApi.ts index 3531f09f..9b3673b3 100644 --- a/src/api/embedsApi.ts +++ b/src/api/embedsApi.ts @@ -38,7 +38,7 @@ import { getBrightcoveCopyright } from "../utils/brightcoveUtils"; import { CheerioEmbed, getEmbedsFromContent } from "../utils/getEmbedsFromContent"; import highlightCode from "../utils/highlightCode"; import parseMarkdown from "../utils/parseMarkdown"; -import { fetchSimpleArticle } from "./articleApi"; +import { fetchArticle } from "./articleApi"; import { fetchAudioV2 } from "./audioApi"; import { fetchEmbedConcept } from "./conceptApi"; import { fetchExternalOembed } from "./externalApi"; @@ -235,7 +235,7 @@ const relatedContentMeta: Fetch = async ({ embedData, co const articleId = embedData.articleId; if (typeof articleId === "string" || typeof articleId === "number") { const [article, resources] = await Promise.all([ - fetchSimpleArticle(`urn:article:${articleId}`, context), + fetchArticle(`urn:article:${articleId}`, undefined, context), context.loaders.nodesLoader.load({ contentURI: `urn:article:${articleId}`, language: context.language, diff --git a/src/resolvers/articleResolvers.ts b/src/resolvers/articleResolvers.ts index 0464a02b..5e96143a 100644 --- a/src/resolvers/articleResolvers.ts +++ b/src/resolvers/articleResolvers.ts @@ -8,13 +8,14 @@ import { ArticleV2DTO } from "@ndla/types-backend/article-api"; import { ConceptSummaryDTO } from "@ndla/types-backend/concept-api"; -import { fetchArticle, fetchSubjectTopics, searchConcepts } from "../api"; +import { fetchSubjectTopics, searchConcepts } from "../api"; import { fetchTransformedContent, fetchRelatedContent, fetchTransformedDisclaimer, fetchVisualElementEmbed, fetchRevisions, + fetchArticle, } from "../api/articleApi"; import { coreElements, fetchCrossSubjectTopicsByCode, grepSearch } from "../api/searchApi"; import { ndlaUrl } from "../config"; @@ -32,13 +33,8 @@ import { } from "../types/schema"; export const Query = { - async article(_: any, { id }: GQLQueryArticleArgs, context: ContextWithLoaders): Promise { - return fetchArticle( - { - articleId: id, - }, - context, - ); + async article(_: any, { id, revision }: GQLQueryArticleArgs, context: ContextWithLoaders): Promise { + return fetchArticle(id, revision, context); }, async revisions(_: any, { articleId }: GQLQueryRevisionsArgs, context: ContextWithLoaders): Promise { return fetchRevisions(articleId, context); diff --git a/src/schema.ts b/src/schema.ts index 5780ffbf..ab419b5f 100644 --- a/src/schema.ts +++ b/src/schema.ts @@ -1460,7 +1460,7 @@ export const typeDefs = gql` nodeByArticleId(articleId: String, nodeId: String): Node resource(id: String!, subjectId: String, topicId: String): Resource articleResource(articleId: String, taxonomyId: String): Resource - article(id: String!): Article + article(id: String!, revision: Int): Article subject(id: String!): Subject subjectpage(id: Int!): SubjectPage filmfrontpage: FilmFrontpage diff --git a/src/types/schema.d.ts b/src/types/schema.d.ts index 7d6434e3..4c181a48 100644 --- a/src/types/schema.d.ts +++ b/src/types/schema.d.ts @@ -1469,6 +1469,7 @@ export type GQLQueryAllMyNdlaResourcesArgs = { export type GQLQueryArticleArgs = { id: Scalars['String']['input']; + revision?: InputMaybe; };