summaryrefslogtreecommitdiff
path: root/nodejs/database/contracts.ts
diff options
context:
space:
mode:
authorJulien Dessaux2024-03-21 17:08:37 +0100
committerJulien Dessaux2024-03-27 15:21:00 +0100
commitd668eac4a63a9aa98c3efff395faa23cfcea1c1b (patch)
tree691e3bb471bcacadb975f581f73e09b84287b4a5 /nodejs/database/contracts.ts
parent[javascript] fixed mining loop (diff)
downloadspacetraders-d668eac4a63a9aa98c3efff395faa23cfcea1c1b.tar.gz
spacetraders-d668eac4a63a9aa98c3efff395faa23cfcea1c1b.tar.bz2
spacetraders-d668eac4a63a9aa98c3efff395faa23cfcea1c1b.zip
[node] begin the great typescript rewrite
Diffstat (limited to 'nodejs/database/contracts.ts')
-rw-r--r--nodejs/database/contracts.ts29
1 files changed, 29 insertions, 0 deletions
diff --git a/nodejs/database/contracts.ts b/nodejs/database/contracts.ts
new file mode 100644
index 0000000..576f8dd
--- /dev/null
+++ b/nodejs/database/contracts.ts
@@ -0,0 +1,29 @@
+import { Contract } from '../model/contract.ts';
+import db from './db.ts';
+
+const addContractStatement = db.prepare(`INSERT INTO contracts(data) VALUES (json(?));`);
+const getContractStatement = db.prepare(`SELECT data FROM contracts WHERE data->>'id' = ?;`);
+const getContractsStatement = db.prepare(`SELECT data FROM contracts WHERE data->>'fulfilled' = false;`);
+const updateContractStatement = db.prepare(`UPDATE contracts SET data = json(:data) WHERE data->>'id' = :id;`);
+
+export function getContract(id: string): Contract|null {
+ const data = getContractStatement.get(id) as {data: string}|undefined;
+ if (!data) return null;
+ return JSON.parse(data.data);
+}
+
+export function getContracts(): Array<Contract> {
+ const data = getContractsStatement.all() as Array<{data: string}>;
+ return data.map(contractData => JSON.parse(contractData.data));
+}
+
+export function setContract(data: Contract) {
+ if (getContract(data.id) === null) {
+ addContractStatement.run(JSON.stringify(data));
+ } else {
+ updateContractStatement.run({
+ data: JSON.stringify(data),
+ id: data.id,
+ });
+ }
+}