diff --git a/adminSiteServer/functionalRouterHelpers.ts b/adminSiteServer/functionalRouterHelpers.ts index e9ae007d2b..44c95392ac 100644 --- a/adminSiteServer/functionalRouterHelpers.ts +++ b/adminSiteServer/functionalRouterHelpers.ts @@ -1,6 +1,7 @@ import { FunctionalRouter } from "./FunctionalRouter.js" import { Request, Response } from "express" import * as db from "../db/db.js" + export function getRouteWithROTransaction( router: FunctionalRouter, targetPath: string, diff --git a/adminSiteServer/publicApiRouter.ts b/adminSiteServer/publicApiRouter.ts index 946c8859ce..ccca2e22bb 100644 --- a/adminSiteServer/publicApiRouter.ts +++ b/adminSiteServer/publicApiRouter.ts @@ -1,6 +1,9 @@ +import e from "express" import { FunctionalRouter } from "./FunctionalRouter.js" import { Request, Response } from "./authentication.js" import * as db from "../db/db.js" +import { getChartViewNameConfigMap } from "../db/model/ChartView.js" +import { getRouteWithROTransaction } from "./functionalRouterHelpers.js" export const publicApiRouter = new FunctionalRouter() @@ -22,3 +25,16 @@ publicApiRouter.router.get("/health", async (req: Request, res: Response) => { console.error("Error at health endpoint", e) } }) + +getRouteWithROTransaction( + publicApiRouter, + "/chartViewMap", + async ( + _req: Request, + _res: e.Response>, + trx: db.KnexReadonlyTransaction + ) => { + const chartViewMap = await getChartViewNameConfigMap(trx) + return chartViewMap + } +) diff --git a/db/model/ChartView.ts b/db/model/ChartView.ts index 2bfd5ad8ed..ac380e1223 100644 --- a/db/model/ChartView.ts +++ b/db/model/ChartView.ts @@ -1,4 +1,8 @@ -import { ChartViewInfo, JsonString } from "@ourworldindata/types" +import { + ChartViewInfo, + DbPlainChartView, + JsonString, +} from "@ourworldindata/types" import * as db from "../db.js" export const getChartViewsInfo = async ( @@ -32,3 +36,14 @@ JOIN chart_configs pcc on pc.configId = pcc.id queryParamsForParentChart: JSON.parse(row.queryParamsForParentChart), })) } + +export const getChartViewNameConfigMap = async ( + knex: db.KnexReadonlyTransaction +): Promise< + Record +> => { + const rows = await db.knexRaw< + Pick + >(knex, `SELECT name, chartConfigId FROM chart_views`) + return Object.fromEntries(rows.map((row) => [row.name, row.chartConfigId])) +}