summaryrefslogtreecommitdiff
path: root/golang/pkg/agent/visit.go
diff options
context:
space:
mode:
authorJulien Dessaux2025-02-17 00:40:43 +0100
committerJulien Dessaux2025-02-17 00:40:43 +0100
commitbd2fb50c819c2b180758308ef3751e7ea73e6ab7 (patch)
tree19632f7098691a1147357039a5efedf7c40a8d53 /golang/pkg/agent/visit.go
parent[golang] handle paginated requests (diff)
downloadspacetraders-bd2fb50c819c2b180758308ef3751e7ea73e6ab7.tar.gz
spacetraders-bd2fb50c819c2b180758308ef3751e7ea73e6ab7.tar.bz2
spacetraders-bd2fb50c819c2b180758308ef3751e7ea73e6ab7.zip
[golang] implement shipyards visits
Diffstat (limited to 'golang/pkg/agent/visit.go')
-rw-r--r--golang/pkg/agent/visit.go45
1 files changed, 38 insertions, 7 deletions
diff --git a/golang/pkg/agent/visit.go b/golang/pkg/agent/visit.go
index 019a6e5..2401b8d 100644
--- a/golang/pkg/agent/visit.go
+++ b/golang/pkg/agent/visit.go
@@ -2,7 +2,7 @@ package agent
import (
"fmt"
- "log/slog"
+ "slices"
"git.adyxax.org/adyxax/spacetraders/golang/pkg/model"
)
@@ -12,13 +12,44 @@ func (a *agent) visitAllShipyards(ship *model.Ship) error {
if err != nil {
return fmt.Errorf("failed to visit all shipyards: %w", err)
}
- waypoints, err := a.client.ListWaypointsInSystem(system, a.db)
+ shipyards, err := a.listShipyardsInSystem(system)
if err != nil {
return fmt.Errorf("failed to visit all shipyards: %w", err)
}
- //slog.Info("get system", "system", system.Waypoints, "err", err)
- //waypoint, err := a.client.GetWaypoint("X1-RR14-J88", a.db)
- slog.Info("get waypoint", "waypoint", waypoints[0])
-
- return fmt.Errorf("failed to visit all shipyards: not implemented yet")
+ shipyards = slices.DeleteFunc(shipyards, func(shipyard model.Shipyard) bool {
+ // filter out shipyards for which we already have ships prices
+ if shipyard.Ships != nil {
+ return true
+ }
+ // filter out shipyards for which a ship is either present or inbound
+ waypoint, err := a.client.GetWaypoint(shipyard.Symbol, a.db)
+ if err != nil {
+ panic(fmt.Errorf("failed to visit all shipyards: %w", err))
+ }
+ return a.isThereAShipAtWaypoint(waypoint)
+ })
+ if len(shipyards) == 0 {
+ return nil
+ }
+ waypoint, err := a.client.GetWaypoint(ship.Nav.WaypointSymbol, a.db)
+ if err != nil {
+ return fmt.Errorf("failed to visit all shipyards: %w", err)
+ }
+ waypoints := make([]model.Waypoint, 0)
+ for i := range shipyards {
+ waypoint, err := a.client.GetWaypoint(shipyards[i].Symbol, a.db)
+ if err != nil {
+ return fmt.Errorf("failed to visit all shipyards: %w", err)
+ }
+ waypoints = append(waypoints, *waypoint)
+ }
+ sortByDistanceFrom(*waypoint, waypoints)
+ if err := a.client.Navigate(ship, &waypoints[0], a.db); err != nil {
+ return fmt.Errorf("failed to visit all shipyards: %w", err)
+ }
+ if _, err := a.client.GetShipyard(&waypoints[0], a.db); err != nil {
+ return fmt.Errorf("failed to visit all shipyards: %w", err)
+ }
+ // TODO get market data
+ return a.visitAllShipyards(ship)
}