From 4cb5c7853c75eb3d9e99a525065f0816ebb5dd62 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Mon, 20 May 2024 22:50:33 +0200 Subject: [node] implement shipyard info retrieval and database caching --- nodejs/database/shipyards.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 nodejs/database/shipyards.ts (limited to 'nodejs/database/shipyards.ts') diff --git a/nodejs/database/shipyards.ts b/nodejs/database/shipyards.ts new file mode 100644 index 0000000..4c243f9 --- /dev/null +++ b/nodejs/database/shipyards.ts @@ -0,0 +1,27 @@ +import { DbData, db } from './db.ts'; +import { Shipyard } from '../lib/types'; + +const addStatement = db.prepare(`INSERT INTO shipyards(data, updated) VALUES (json(:data), :date);`); +const getStatement = db.prepare(`SELECT data FROM shipyards WHERE data->>'symbol' = ?;`); +const updateStatement = db.prepare(`UPDATE shipyards SET data = json(:data), updated = :date WHERE data->>'symbol' = :symbol;`); + +export function get(symbol: string): Shipyard|null { + const data = getStatement.get(symbol) as DbData|undefined; + if (!data) return null; + return JSON.parse(data.data); +} + +export function set(data: Shipyard): void { + if (get(data.symbol) === null) { + addStatement.run({ + data: JSON.stringify(data), + date: new Date().toISOString(), + }); + } else { + updateStatement.run({ + data: JSON.stringify(data), + date: new Date().toISOString(), + symbol: data.symbol, + }); + } +} -- cgit v1.2.3