[javascript] Implementing market data gathering and caching
This commit is contained in:
parent
0377c99a54
commit
1b1df83ffd
4 changed files with 65 additions and 7 deletions
7
nodejs/database/004_markets.sql
Normal file
7
nodejs/database/004_markets.sql
Normal 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'));
|
|
@ -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(
|
||||
|
|
34
nodejs/database/markets.js
Normal file
34
nodejs/database/markets.js
Normal 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;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue