1
0
Fork 0

[javascript] Implementing market data gathering and caching

This commit is contained in:
Julien Dessaux 2024-03-17 01:26:51 +01:00
parent 0377c99a54
commit 1b1df83ffd
Signed by: adyxax
GPG key ID: F92E51B86E07177E
4 changed files with 65 additions and 7 deletions

View file

@ -0,0 +1,7 @@
CREATE TABLE markets (
id INTEGER PRIMARY KEY,
system TEXT NOT NULL,
data JSON NOT NULL
);
CREATE INDEX markets_system on markets (system);
CREATE UNIQUE INDEX markets_symbol on markets(json_extract(data, '$.symbol'));

View file

@ -6,6 +6,7 @@ const allMigrations = [
'database/001_systems.sql',
'database/002_ships.sql',
'database/003_surveys.sql',
'database/004_markets.sql',
];
const db = new Database(

View file

@ -0,0 +1,34 @@
import db from './db.js';
import * as utils from '../lib/utils.js';
const addMarketStatement = db.prepare(`INSERT INTO markets(system, data) VALUES (?, json(?));`);
const getMarketAtWaypointStatement = db.prepare(`SELECT data FROM markets WHERE data->>'symbol' = ?;`);
const getMarketsInSystemStatement = db.prepare(`SELECT data FROM markets WHERE system = ?;`);
const updateMarketStatement = db.prepare(`UPDATE markets SET data = json(:data) WHERE data->>'symbol' = :symbol;`);
export function getMarketAtWaypoint(symbol) {
const data = getMarketAtWaypointStatement.get(symbol);
if (data === undefined) {
return null;
}
return JSON.parse(data.data);
}
export function getMarketsInSystem(symbol) {
const data = getMarketsInSystemStatement.get(symbol);
if (data === undefined) {
return null;
}
return JSON.parse(data.data);
}
export function setMarket(data) {
if (getMarketAtWaypoint(data.symbol) === null) {
const system = utils.systemFromWaypoint(data.symbol);
return addMarketStatement.run(system, JSON.stringify(data)).lastInsertRowid;
}
return updateMarketStatement.run({
data: JSON.stringify(data),
symbol: data.symbol,
}).changes;
}