summaryrefslogtreecommitdiff
path: root/golang/pkg/api
diff options
context:
space:
mode:
authorJulien Dessaux2025-02-15 01:22:36 +0100
committerJulien Dessaux2025-02-15 01:22:36 +0100
commit66466e161fff1bd2b8c2ea42249947ccc19c39fe (patch)
tree67f0e7fe70a3993764c43aa77fa6707a4137ae67 /golang/pkg/api
parent[golang] implement automation loop and add contract accepting (diff)
downloadspacetraders-66466e161fff1bd2b8c2ea42249947ccc19c39fe.tar.gz
spacetraders-66466e161fff1bd2b8c2ea42249947ccc19c39fe.tar.bz2
spacetraders-66466e161fff1bd2b8c2ea42249947ccc19c39fe.zip
[golang] implement systems and waypoints lookups
Diffstat (limited to '')
-rw-r--r--golang/pkg/api/systems.go59
-rw-r--r--golang/pkg/api/utils.go7
2 files changed, 66 insertions, 0 deletions
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
+}
diff --git a/golang/pkg/api/utils.go b/golang/pkg/api/utils.go
new file mode 100644
index 0000000..7dfee5c
--- /dev/null
+++ b/golang/pkg/api/utils.go
@@ -0,0 +1,7 @@
+package api
+
+import "strings"
+
+func WaypointSymbolToSystemSymbol(symbol string) string {
+ return strings.Join(strings.Split(symbol, "-")[:2], "-")
+}