1
0
Fork 0

[node] implement shipyard info retrieval and database caching

This commit is contained in:
Julien Dessaux 2024-05-20 22:50:33 +02:00
parent ccbfd9deb9
commit 4cb5c7853c
Signed by: adyxax
GPG key ID: F92E51B86E07177E
5 changed files with 81 additions and 10 deletions

View file

@ -0,0 +1,6 @@
CREATE TABLE shipyards (
id INTEGER PRIMARY KEY,
data JSON NOT NULL,
updated DATE DEFAULT NULL
);
CREATE UNIQUE INDEX shipyards_data_symbol on shipyards (json_extract(data, '$.symbol'));

View file

@ -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,
});
}
}