1
0
Fork 0

[node] begin the great typescript rewrite

This commit is contained in:
Julien Dessaux 2024-03-21 17:08:37 +01:00
parent 3b61a9694d
commit d668eac4a6
Signed by: adyxax
GPG key ID: F92E51B86E07177E
31 changed files with 879 additions and 666 deletions

View file

@ -1,21 +0,0 @@
import db from './db.js';
const addAgentStatement = db.prepare(`INSERT INTO agents(data) VALUES (json(?));`);
const getAgentStatement = db.prepare(`SELECT data FROM agents;`);
const setAgentStatement = db.prepare(`UPDATE agents SET data = json(?);`);
export function addAgent(agent) {
return addAgentStatement.run(JSON.stringify(agent)).lastInsertRowid;
}
export function getAgent() {
const data = getAgentStatement.get();
if (data === undefined) {
return null;
}
return JSON.parse(data.data);
}
export function setAgent(agent) {
return setAgentStatement.run(JSON.stringify(agent)).changes;
}

20
nodejs/database/agents.ts Normal file
View file

@ -0,0 +1,20 @@
import { Agent } from '../model/agent.ts';
import db from './db.js';
const addAgentStatement = db.prepare(`INSERT INTO agents(data) VALUES (json(?));`);
const getAgentStatement = db.prepare(`SELECT data FROM agents;`);
const setAgentStatement = db.prepare(`UPDATE agents SET data = json(?);`);
export function addAgent(agent: Agent) {
addAgentStatement.run(JSON.stringify(agent));
}
export function getAgent(): Agent|null {
const data = getAgentStatement.get() as {data: string}|undefined;
if (!data) return null;
return JSON.parse(data.data);
}
export function setAgent(agent: Agent) {
setAgentStatement.run(JSON.stringify(agent));
}

View file

@ -1,30 +1,29 @@
import db from './db.js';
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) {
const data = getContractStatement.get(id);
if (data === undefined) {
return null;
}
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() {
const data = getContractsStatement.all();
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) {
export function setContract(data: Contract) {
if (getContract(data.id) === null) {
return addContractStatement.run(JSON.stringify(data)).lastInsertRowid;
addContractStatement.run(JSON.stringify(data));
} else {
return updateContractStatement.run({
updateContractStatement.run({
data: JSON.stringify(data),
id: data.id,
}).changes;
});
}
}

View file

@ -11,7 +11,7 @@ const allMigrations = [
const db = new Database(
process.env.NODE_ENV === 'test' ? 'test.db' : 'spacetraders.db',
process.env.NODE_ENV === 'development' ? { verbose: console.log } : null
process.env.NODE_ENV === 'development' ? { verbose: console.log } : undefined
);
db.pragma('foreign_keys = ON');
db.pragma('journal_mode = WAL');
@ -20,7 +20,8 @@ function init() {
db.transaction(function migrate() {
let version;
try {
version = db.prepare('SELECT version FROM schema_version').get().version;
const res = db.prepare('SELECT version FROM schema_version').get() as {version: number};
version = res.version;
} catch {
version = 0;
}
@ -34,10 +35,10 @@ function init() {
}
export function reset() {
const indices = db.prepare(`SELECT name FROM sqlite_master WHERE type = 'index';`).all();
const tables = db.prepare(`SELECT name FROM sqlite_master WHERE type = 'table';`).all();
const triggers = db.prepare(`SELECT name FROM sqlite_master WHERE type = 'trigger';`).all();
const views = db.prepare(`SELECT name FROM sqlite_master WHERE type = 'view';`).all();
const indices = db.prepare(`SELECT name FROM sqlite_master WHERE type = 'index';`).all() as Array<{name: string}>;
const tables = db.prepare(`SELECT name FROM sqlite_master WHERE type = 'table';`).all() as Array<{name: string}>;
const triggers = db.prepare(`SELECT name FROM sqlite_master WHERE type = 'trigger';`).all() as Array<{name: string}>;
const views = db.prepare(`SELECT name FROM sqlite_master WHERE type = 'view';`).all() as Array<{name: string}>;
indices.forEach(elt => db.exec(`DROP INDEX ${elt.name};`));
tables.forEach(elt => db.exec(`DROP TABLE ${elt.name};`));
triggers.forEach(elt => db.exec(`DROP TRIGGER ${elt.name};`));

View file

@ -1,4 +1,6 @@
import db from './db.js';
import db from './db.ts';
import { Cargo } from '../model/cargo.ts';
import { Fuel, Nav, Ship } from '../model/ship.ts';
const addShipStatement = db.prepare(`INSERT INTO ships(data) VALUES (json(?));`);
const getShipStatement = db.prepare(`SELECT data FROM ships WHERE data->>'symbol' = ?;`);
@ -8,51 +10,46 @@ const setShipFuelStatement = db.prepare(`UPDATE ships SET data = (SELECT json_se
const setShipNavStatement = db.prepare(`UPDATE ships SET data = (SELECT json_set(data, '$.nav', json(:nav)) FROM ships WHERE data->>'symbol' = :symbol) WHERE data->>'symbol' = :symbol;`);
const updateShipStatement = db.prepare(`UPDATE ships SET data = json(:data) WHERE data->>'symbol' = :symbol;`);
export function getShip(symbol) {
const data = getShipStatement.get(symbol);
if (data === undefined) {
return null;
}
export function getShip(symbol: string): Ship|null {
const data = getShipStatement.get(symbol) as {data: string}|undefined;
if (!data) return null;
return JSON.parse(data.data);
}
export function getShipsAt(symbol) {
const data = getShipsAtStatement.all(symbol);
if (data === undefined) {
return null;
}
export function getShipsAt(symbol: string) {
const data = getShipsAtStatement.all(symbol) as Array<{data: string}>;
return data.map(elt => JSON.parse(elt.data));
}
export function setShip(data) {
export function setShip(data: Ship) {
if (getShip(data.symbol) === null) {
return addShipStatement.run(JSON.stringify(data)).lastInsertRowid;
addShipStatement.run(JSON.stringify(data));
} else {
return updateShipStatement.run({
updateShipStatement.run({
data: JSON.stringify(data),
symbol: data.symbol,
}).changes;
});
}
}
export function setShipCargo(symbol, cargo) {
return setShipCargoStatement.run({
export function setShipCargo(symbol: string, cargo: Cargo) {
setShipCargoStatement.run({
cargo: JSON.stringify(cargo),
symbol: symbol,
}).changes;
});
}
export function setShipFuel(symbol, fuel) {
return setShipFuelStatement.run({
export function setShipFuel(symbol: string, fuel: Fuel) {
setShipFuelStatement.run({
fuel: JSON.stringify(fuel),
symbol: symbol,
}).changes;
});
}
export function setShipNav(symbol, nav) {
return setShipNavStatement.run({
export function setShipNav(symbol: string, nav: Nav) {
setShipNavStatement.run({
nav: JSON.stringify(nav),
symbol: symbol,
}).changes;
});
}

View file

@ -1,16 +0,0 @@
import db from './db.js';
const addTokenStatement = db.prepare(`INSERT INTO tokens(data) VALUES (?);`);
const getTokenStatement = db.prepare(`SELECT data FROM tokens;`);
export function addToken(token) {
return addTokenStatement.run(token).lastInsertRowid;
}
export function getToken() {
const data = getTokenStatement.get();
if (data === undefined) {
return null;
}
return data.data;
}

14
nodejs/database/tokens.ts Normal file
View file

@ -0,0 +1,14 @@
import db from './db.ts';
const addTokenStatement = db.prepare(`INSERT INTO tokens(data) VALUES (?);`);
const getTokenStatement = db.prepare(`SELECT data FROM tokens;`);
export function addToken(token: string) {
addTokenStatement.run(token);
}
export function getToken(): string|null {
const data = getTokenStatement.get() as {data: string}|undefined;
if (data === undefined) return null;
return data.data;
}