[node] implement shipyard info retrieval and database caching
This commit is contained in:
parent
ccbfd9deb9
commit
4cb5c7853c
5 changed files with 81 additions and 10 deletions
6
nodejs/database/005_shipyards.sql
Normal file
6
nodejs/database/005_shipyards.sql
Normal 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'));
|
27
nodejs/database/shipyards.ts
Normal file
27
nodejs/database/shipyards.ts
Normal 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,
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue