From f8747be72330de14052a734d71a9142d74d7fbdf Mon Sep 17 00:00:00 2001 From: Marigold Date: Wed, 15 Jan 2025 10:47:00 +0100 Subject: [PATCH 1/6] :sparkles: Add table related_charts --- .../1736933781669-AddRelatedChartsTable.ts | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 db/migration/1736933781669-AddRelatedChartsTable.ts diff --git a/db/migration/1736933781669-AddRelatedChartsTable.ts b/db/migration/1736933781669-AddRelatedChartsTable.ts new file mode 100644 index 0000000000..e234bf5995 --- /dev/null +++ b/db/migration/1736933781669-AddRelatedChartsTable.ts @@ -0,0 +1,31 @@ +import { MigrationInterface, QueryRunner } from "typeorm" + +export class AddRelatedChartsTable1736933781669 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`-- sql + CREATE TABLE related_charts ( + id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + chartId INT NOT NULL, + relatedChartId INT NOT NULL, + label VARCHAR(255) NOT NULL, + reviewer VARCHAR(255) DEFAULT NULL, + reason TEXT DEFAULT NULL, + updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT related_charts_ibfk_1 + FOREIGN KEY (chartId) REFERENCES charts (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT related_charts_ibfk_2 + FOREIGN KEY (relatedChartId) REFERENCES charts (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + KEY idx_related_charts_chartId (chartId), + UNIQUE KEY uq_chartId_relatedChartId_reviewer (chartId, relatedChartId, reviewer) + ) + `) + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DROP TABLE related_charts`) + } +} From 8f103932f6284065fb55d3734ba11070bebac4b0 Mon Sep 17 00:00:00 2001 From: Marigold Date: Mon, 20 Jan 2025 11:32:19 +0100 Subject: [PATCH 2/6] add getRelatedChartsForChart --- baker/GrapherBaker.tsx | 22 ++++++++++++++++------ db/model/Chart.ts | 26 ++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/baker/GrapherBaker.tsx b/baker/GrapherBaker.tsx index 2f65b46899..7dc30d7ca9 100644 --- a/baker/GrapherBaker.tsx +++ b/baker/GrapherBaker.tsx @@ -58,7 +58,10 @@ import { logErrorAndMaybeSendToBugsnag } from "../serverUtils/errorLog.js" import { getTagToSlugMap } from "./GrapherBakingUtils.js" import { knexRaw } from "../db/db.js" -import { getRelatedChartsForVariable } from "../db/model/Chart.js" +import { + getRelatedChartsForVariable, + getRelatedChartsForChart, +} from "../db/model/Chart.js" import pMap from "p-map" const renderDatapageIfApplicable = async ( @@ -194,11 +197,18 @@ export async function renderDataPageV2( // Get the charts this variable is being used in (aka "related charts") // and exclude the current chart to avoid duplicates - datapageData.allCharts = await getRelatedChartsForVariable( - knex, - variableId, - grapher && "id" in grapher ? [grapher.id as number] : [] - ) + if (grapher && "id" in grapher) { + datapageData.allCharts = await getRelatedChartsForChart( + knex, + grapher.id as number + ) + } else { + datapageData.allCharts = await getRelatedChartsForVariable( + knex, + variableId, + [] + ) + } datapageData.relatedResearch = await getRelatedResearchAndWritingForVariable(knex, variableId) diff --git a/db/model/Chart.ts b/db/model/Chart.ts index 7a74b18698..c83f167d32 100644 --- a/db/model/Chart.ts +++ b/db/model/Chart.ts @@ -607,6 +607,32 @@ export const getRelatedChartsForVariable = async ( ) } +export const getRelatedChartsForChart = async ( + knex: db.KnexReadonlyTransaction, + chartId: number +): Promise => { + return db.knexRaw( + knex, + `-- sql + SELECT + chart_configs.slug, + chart_configs.full->>"$.title" AS title, + chart_configs.full->>"$.variantName" AS variantName, + MAX(chart_tags.keyChartLevel) as keyChartLevel + FROM charts + JOIN chart_configs ON charts.configId=chart_configs.id + INNER JOIN chart_tags ON charts.id=chart_tags.chartId + INNER JOIN related_charts ON charts.id=related_charts.relatedChartId + WHERE related_charts.chartId = ${chartId} + AND related_charts.reviewer = 'production' + AND related_charts.label = 'good' + AND chart_configs.full->>"$.isPublished" = "true" + GROUP BY charts.id + ORDER BY title ASC + ` + ) +} + export const getChartEmbedUrlsInPublishedWordpressPosts = async ( knex: db.KnexReadonlyTransaction ): Promise => { From 7ac070e11ab57c61ef944998d32ed45ff741c293 Mon Sep 17 00:00:00 2001 From: Marigold Date: Tue, 21 Jan 2025 11:11:24 +0100 Subject: [PATCH 3/6] wip --- db/migration/1736933781669-AddRelatedChartsTable.ts | 1 + db/model/Chart.ts | 3 ++- package.json | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/db/migration/1736933781669-AddRelatedChartsTable.ts b/db/migration/1736933781669-AddRelatedChartsTable.ts index e234bf5995..217b544840 100644 --- a/db/migration/1736933781669-AddRelatedChartsTable.ts +++ b/db/migration/1736933781669-AddRelatedChartsTable.ts @@ -10,6 +10,7 @@ export class AddRelatedChartsTable1736933781669 implements MigrationInterface { label VARCHAR(255) NOT NULL, reviewer VARCHAR(255) DEFAULT NULL, reason TEXT DEFAULT NULL, + score NUMERIC DEFAULT NULL, updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP, CONSTRAINT related_charts_ibfk_1 FOREIGN KEY (chartId) REFERENCES charts (id) diff --git a/db/model/Chart.ts b/db/model/Chart.ts index c83f167d32..5aec3d3538 100644 --- a/db/model/Chart.ts +++ b/db/model/Chart.ts @@ -628,7 +628,8 @@ export const getRelatedChartsForChart = async ( AND related_charts.label = 'good' AND chart_configs.full->>"$.isPublished" = "true" GROUP BY charts.id - ORDER BY title ASC + ORDER BY related_charts.score DESC + LIMIT 6 ` ) } diff --git a/package.json b/package.json index 2d6a7a32fa..df73096eb5 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "startLocalCloudflareFunctions": "wrangler pages dev", "startDeployQueueServer": "node --enable-source-maps ./itsJustJavascript/baker/startDeployQueueServer.js", "startLernaWatcher": "lerna watch --scope '@ourworldindata/*' -- lerna run build --scope=\\$LERNA_PACKAGE_NAME --include-dependents", - "startTmuxServer": "node_modules/tmex/tmex dev \"yarn startLernaWatcher\" \"yarn startAdminDevServer\" \"yarn startViteServer\"", + "startTmuxServer": "node_modules/tmex/tmex dev \"yarn startLernaWatcher\" \"yarn startAdminDevServer\" \"yarn startSiteFront\"", "startViteServer": "vite dev", "startSiteFront": "./devTools/vite/startVite.sh", "startLocalBakeServer": "http-server ./localBake -p 3000", From b4ce6124e4402840639a6d419d1e2ea09b806267 Mon Sep 17 00:00:00 2001 From: Marigold Date: Tue, 21 Jan 2025 14:21:27 +0100 Subject: [PATCH 4/6] wip --- db/migration/1736933781669-AddRelatedChartsTable.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/migration/1736933781669-AddRelatedChartsTable.ts b/db/migration/1736933781669-AddRelatedChartsTable.ts index 217b544840..2e4c2a91e1 100644 --- a/db/migration/1736933781669-AddRelatedChartsTable.ts +++ b/db/migration/1736933781669-AddRelatedChartsTable.ts @@ -10,7 +10,7 @@ export class AddRelatedChartsTable1736933781669 implements MigrationInterface { label VARCHAR(255) NOT NULL, reviewer VARCHAR(255) DEFAULT NULL, reason TEXT DEFAULT NULL, - score NUMERIC DEFAULT NULL, + score DOUBLE DEFAULT NULL, updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP, CONSTRAINT related_charts_ibfk_1 FOREIGN KEY (chartId) REFERENCES charts (id) From ffff38913b39c032bf1fe47cb6bd6df383cafe25 Mon Sep 17 00:00:00 2001 From: Marigold Date: Tue, 21 Jan 2025 14:44:15 +0100 Subject: [PATCH 5/6] :honeybee: trigger CI From c4aef1484fa9f40e89859e3ab167a401fca4805b Mon Sep 17 00:00:00 2001 From: Marigold Date: Tue, 21 Jan 2025 14:52:08 +0100 Subject: [PATCH 6/6] :honeybee: trigger CI