diff options
author | Julien Dessaux | 2024-05-20 22:50:33 +0200 |
---|---|---|
committer | Julien Dessaux | 2024-05-20 22:50:33 +0200 |
commit | 4cb5c7853c75eb3d9e99a525065f0816ebb5dd62 (patch) | |
tree | 78d2ad16754ca7d105765377f64fae7e9ea19083 /nodejs/lib | |
parent | [node] fixed and optimized contracting (diff) | |
download | spacetraders-4cb5c7853c75eb3d9e99a525065f0816ebb5dd62.tar.gz spacetraders-4cb5c7853c75eb3d9e99a525065f0816ebb5dd62.tar.bz2 spacetraders-4cb5c7853c75eb3d9e99a525065f0816ebb5dd62.zip |
[node] implement shipyard info retrieval and database caching
Diffstat (limited to '')
-rw-r--r-- | nodejs/lib/systems.ts | 26 | ||||
-rw-r--r-- | nodejs/lib/types.ts | 23 | ||||
-rw-r--r-- | nodejs/lib/utils.ts | 9 |
3 files changed, 48 insertions, 10 deletions
diff --git a/nodejs/lib/systems.ts b/nodejs/lib/systems.ts index d4b3be5..6f0a830 100644 --- a/nodejs/lib/systems.ts +++ b/nodejs/lib/systems.ts @@ -4,17 +4,22 @@ import { sendPaginated, } from './api.ts'; import * as dbMarkets from '../database/markets.ts'; +import * as dbShipyards from '../database/shipyards.ts'; import * as dbSystems from '../database/systems.ts'; import { Market, + Shipyard, System, Waypoint, } from './types.ts' -import { systemFromWaypoint } from './utils.ts'; +import { + isThereAShipAtThisWaypoint, + systemFromWaypoint, +} from './utils.ts'; export async function market(waypoint: Waypoint): Promise<Market> { const data = dbMarkets.getMarketAtWaypoint(waypoint.symbol); - if (data) { return data; } + if (data && (data.tradeGoods || !isThereAShipAtThisWaypoint(waypoint))) { return data; } const systemSymbol = systemFromWaypoint(waypoint.symbol); let response = await send<Market>({endpoint: `/systems/${systemSymbol}/waypoints/${waypoint.symbol}/market`}); if (response.error) { @@ -25,11 +30,18 @@ export async function market(waypoint: Waypoint): Promise<Market> { return response.data; } -//export async function shipyard(waypoint: string): Promise<unknown> { -// // TODO database caching -// const systemSymbol = systemFromWaypoint(waypoint); -// return await send({endpoint: `/systems/${systemSymbol}/waypoints/${waypoint}/shipyard`}); -//} +export async function shipyard(waypoint: Waypoint): Promise<Shipyard> { + const data = dbShipyards.get(waypoint.symbol); + if (data && (data.ships || !isThereAShipAtThisWaypoint(waypoint))) { return data; } + const systemSymbol = systemFromWaypoint(waypoint.symbol); + const response = await send<Shipyard>({endpoint: `/systems/${systemSymbol}/waypoints/${waypoint.symbol}/shipyard`}); + if (response.error) { + debugLog(response); + throw response; + } + dbShipyards.set(response.data); + return response.data; +} export async function system(symbol: string): Promise<System> { let data = dbSystems.getSystem(symbol); diff --git a/nodejs/lib/types.ts b/nodejs/lib/types.ts index 4f15d70..e03e5a7 100644 --- a/nodejs/lib/types.ts +++ b/nodejs/lib/types.ts @@ -80,6 +80,29 @@ export type RouteEndpoint = { y: number; }; +export type Shipyard = { + modificationFee: number; + ships: Array<ShipyardShip>; + shipTypes: Array<{type: string}>; + symbol: string; + //transactions: Array<Transaction>; +}; + +export type ShipyardShip = { + activity: string; + // crew + description: string; + // engine + // frame + // modules + // mounts + name: string; + purchasePrice: number; + // reactor + supply: string; + type: string; +}; + export type System = { symbol: string; sectorSymbol: string; diff --git a/nodejs/lib/utils.ts b/nodejs/lib/utils.ts index db39349..ec3ab09 100644 --- a/nodejs/lib/utils.ts +++ b/nodejs/lib/utils.ts @@ -2,9 +2,8 @@ import { debugLog, } from './api.ts'; import { PriorityQueue } from './priority_queue.ts'; -import { - market, -} from './systems.ts'; +import { getShips } from './ships.ts'; +import { market } from './systems.ts'; import { Cargo, CargoManifest, @@ -41,6 +40,10 @@ export function distance(a: Point, b: Point) { return Math.sqrt((a.x-b.x)**2 + (a.y-b.y)**2); } +export function isThereAShipAtThisWaypoint(waypoint: Waypoint): boolean { + return getShips().some(s => s.nav.waypointSymbol === waypoint.symbol); +} + export function sortByDistanceFrom<T extends Point>(a: Point, points: Array<T>): Array<{data: T, distance: number}>{ let result = points.map(function (m) { return { data: m, |