From 4cb5c7853c75eb3d9e99a525065f0816ebb5dd62 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Mon, 20 May 2024 22:50:33 +0200 Subject: [node] implement shipyard info retrieval and database caching --- nodejs/lib/systems.ts | 26 +++++++++++++++++++------- nodejs/lib/types.ts | 23 +++++++++++++++++++++++ nodejs/lib/utils.ts | 9 ++++++--- 3 files changed, 48 insertions(+), 10 deletions(-) (limited to 'nodejs/lib') 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 { 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({endpoint: `/systems/${systemSymbol}/waypoints/${waypoint.symbol}/market`}); if (response.error) { @@ -25,11 +30,18 @@ export async function market(waypoint: Waypoint): Promise { return response.data; } -//export async function shipyard(waypoint: string): Promise { -// // TODO database caching -// const systemSymbol = systemFromWaypoint(waypoint); -// return await send({endpoint: `/systems/${systemSymbol}/waypoints/${waypoint}/shipyard`}); -//} +export async function shipyard(waypoint: Waypoint): Promise { + const data = dbShipyards.get(waypoint.symbol); + if (data && (data.ships || !isThereAShipAtThisWaypoint(waypoint))) { return data; } + const systemSymbol = systemFromWaypoint(waypoint.symbol); + const response = await send({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 { 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; + shipTypes: Array<{type: string}>; + symbol: string; + //transactions: Array; +}; + +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(a: Point, points: Array): Array<{data: T, distance: number}>{ let result = points.map(function (m) { return { data: m, -- cgit v1.2.3