diff --git a/db/model/Gdoc/GdocBase.ts b/db/model/Gdoc/GdocBase.ts index 69453ec307f..2f52e0f8ec7 100644 --- a/db/model/Gdoc/GdocBase.ts +++ b/db/model/Gdoc/GdocBase.ts @@ -7,7 +7,6 @@ import { ManyToMany, JoinTable, } from "typeorm" -import { getConnection } from "../../db.js" import { getUrlTarget } from "@ourworldindata/components" import { LinkedChart, @@ -23,7 +22,6 @@ import { Span, EnrichedBlockResearchAndWritingLink, traverseEnrichedSpan, - RelatedChart, uniq, omit, identity, @@ -94,7 +92,6 @@ export class GdocBase extends BaseEntity implements OwidGdocBaseInterface { imageMetadata: Record = {} linkedCharts: Record = {} linkedDocuments: Record = {} - relatedCharts: RelatedChart[] = [] latestDataInsights: MinimalDataInsightInterface[] = [] _getSubclassEnrichedBlocks: (gdoc: typeof this) => OwidEnrichedGdocBlock[] = @@ -571,29 +568,6 @@ export class GdocBase extends BaseEntity implements OwidGdocBaseInterface { } } - async loadRelatedCharts(): Promise { - if (!this.tags.length || !this.hasAllChartsBlock) return - - const connection = await getConnection() - const relatedCharts = await connection.query( - ` - SELECT DISTINCT - charts.config->>"$.slug" AS slug, - charts.config->>"$.title" AS title, - charts.config->>"$.variantName" AS variantName, - chart_tags.keyChartLevel - FROM charts - INNER JOIN chart_tags ON charts.id=chart_tags.chartId - WHERE chart_tags.tagId IN (?) - AND charts.config->>"$.isPublished" = "true" - ORDER BY title ASC - `, - [this.tags.map((tag) => tag.id)] - ) - - this.relatedCharts = relatedCharts - } - async fetchAndEnrichGdoc(): Promise { const docsClient = google.docs({ version: "v1", @@ -694,7 +668,6 @@ export class GdocBase extends BaseEntity implements OwidGdocBaseInterface { await this.loadLinkedDocuments() await this.loadImageMetadata() await this.loadLinkedCharts(publishedExplorersBySlug) - await this.loadRelatedCharts() await this._loadSubclassAttachments() await this.validate(publishedExplorersBySlug) } diff --git a/db/model/Gdoc/GdocPost.ts b/db/model/Gdoc/GdocPost.ts index 4604b9ba46f..e01610f3c50 100644 --- a/db/model/Gdoc/GdocPost.ts +++ b/db/model/Gdoc/GdocPost.ts @@ -11,6 +11,7 @@ import { OwidGdocType, OwidEnrichedGdocBlock, RawBlockText, + RelatedChart, } from "@ourworldindata/utils" import { GDOCS_DETAILS_ON_DEMAND_ID } from "../../../settings/serverSettings.js" import { @@ -22,6 +23,7 @@ import { ADMIN_BASE_URL } from "../../../settings/clientSettings.js" import { parseDetails, parseFaqs } from "./rawToEnriched.js" import { htmlToEnrichedTextBlock } from "./htmlToEnriched.js" import { GdocBase } from "./GdocBase.js" +import { getConnection } from "../../db.js" @Entity("posts_gdocs") export class GdocPost extends GdocBase implements OwidGdocPostInterface { @@ -35,6 +37,7 @@ export class GdocPost extends GdocBase implements OwidGdocPostInterface { } linkedDocuments: Record = {} + relatedCharts: RelatedChart[] = [] _filenameProperties = ["cover-image", "featured-image"] _getSubclassEnrichedBlocks = (gdoc: this): OwidEnrichedGdocBlock[] => { @@ -144,6 +147,33 @@ export class GdocPost extends GdocBase implements OwidGdocPostInterface { return errors } + _loadSubclassAttachments: () => Promise = async () => { + await this.loadRelatedCharts() + } + + async loadRelatedCharts(): Promise { + if (!this.tags.length || !this.hasAllChartsBlock) return + + const connection = await getConnection() + const relatedCharts = await connection.query( + ` + SELECT DISTINCT + charts.config->>"$.slug" AS slug, + charts.config->>"$.title" AS title, + charts.config->>"$.variantName" AS variantName, + chart_tags.keyChartLevel + FROM charts + INNER JOIN chart_tags ON charts.id=chart_tags.chartId + WHERE chart_tags.tagId IN (?) + AND charts.config->>"$.isPublished" = "true" + ORDER BY title ASC + `, + [this.tags.map((tag) => tag.id)] + ) + + this.relatedCharts = relatedCharts + } + static async getDetailsOnDemandGdoc(): Promise<{ details: DetailDictionary parseErrors: ParseError[]