diff options
Diffstat (limited to 'nodejs/database/contracts.ts')
-rw-r--r-- | nodejs/database/contracts.ts | 29 |
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, + }); + } +} |