summaryrefslogtreecommitdiff
path: root/nodejs/database/shipyards.ts
diff options
context:
space:
mode:
authorJulien Dessaux2024-05-20 22:50:33 +0200
committerJulien Dessaux2024-05-20 22:50:33 +0200
commit4cb5c7853c75eb3d9e99a525065f0816ebb5dd62 (patch)
tree78d2ad16754ca7d105765377f64fae7e9ea19083 /nodejs/database/shipyards.ts
parent[node] fixed and optimized contracting (diff)
downloadspacetraders-4cb5c7853c75eb3d9e99a525065f0816ebb5dd62.tar.gz
spacetraders-4cb5c7853c75eb3d9e99a525065f0816ebb5dd62.tar.bz2
spacetraders-4cb5c7853c75eb3d9e99a525065f0816ebb5dd62.zip
[node] implement shipyard info retrieval and database caching
Diffstat (limited to 'nodejs/database/shipyards.ts')
-rw-r--r--nodejs/database/shipyards.ts27
1 files changed, 27 insertions, 0 deletions
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,
+ });
+ }
+}