From 66466e161fff1bd2b8c2ea42249947ccc19c39fe Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Sat, 15 Feb 2025 01:22:36 +0100 Subject: [golang] implement systems and waypoints lookups --- golang/pkg/api/systems.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 golang/pkg/api/systems.go (limited to 'golang/pkg/api/systems.go') diff --git a/golang/pkg/api/systems.go b/golang/pkg/api/systems.go new file mode 100644 index 0000000..3d3a373 --- /dev/null +++ b/golang/pkg/api/systems.go @@ -0,0 +1,59 @@ +package api + +import ( + "fmt" + "net/url" + "path" + + "git.adyxax.org/adyxax/spacetraders/golang/pkg/database" + "git.adyxax.org/adyxax/spacetraders/golang/pkg/model" +) + +func (c *Client) GetSystem(symbol string, db *database.DB) (*model.System, error) { + if system, err := db.LoadSystem(symbol); err == nil && system != nil { + return system, nil + } + uriRef := url.URL{Path: path.Join("systems", symbol)} + var system model.System + if err := c.Send("GET", &uriRef, nil, &system); err != nil { + return nil, fmt.Errorf("failed to get system %s: %w", symbol, err) + } + if err := db.SaveSystem(&system); err != nil { + return nil, fmt.Errorf("failed to get system %s: %w", symbol, err) + } + return &system, nil +} + +func (c *Client) ListWaypointsInSystem(system *model.System, db *database.DB) ([]model.Waypoint, error) { + // TODO database caching + // TODO pagination + // TODO check updated + uriRef := url.URL{Path: path.Join("systems", system.Symbol, "waypoints")} + var waypoints []model.Waypoint + if err := c.Send("GET", &uriRef, nil, &waypoints); err != nil { + return nil, fmt.Errorf("failed to list waypoints in system %s: %w", system.Symbol, err) + } + for _, waypoint := range waypoints { + if err := db.SaveWaypoint(&waypoint); err != nil { + return nil, fmt.Errorf("failed to list waypoints in system %s: %w", system.Symbol, err) + } + } + return waypoints, nil +} + +func (c *Client) GetWaypoint(symbol string, db *database.DB) (*model.Waypoint, error) { + // TODO check updated + if waypoint, err := db.LoadWaypoint(symbol); err == nil && waypoint != nil { + return waypoint, nil + } + systemSymbol := WaypointSymbolToSystemSymbol(symbol) + uriRef := url.URL{Path: path.Join("systems", systemSymbol, "waypoints", symbol)} + var waypoint model.Waypoint + if err := c.Send("GET", &uriRef, nil, &waypoint); err != nil { + return nil, fmt.Errorf("failed to get waypoint %s: %w", symbol, err) + } + if err := db.SaveWaypoint(&waypoint); err != nil { + return nil, fmt.Errorf("failed to get waypoint %s: %w", symbol, err) + } + return &waypoint, nil +} -- cgit v1.2.3