summaryrefslogtreecommitdiff
path: root/backend-go/fix_market.py
diff options
context:
space:
mode:
authorkboz <kutayboz@gmail.com>2026-09-27 22:36:34 +0200
committerkboz <kutayboz@gmail.com>2026-09-27 22:36:34 +0200
commit1b59961ce2385252e3346ea6107b15a2c1feafe6 (patch)
treefbe9e0cb968c47cff353e937e4dc835a64058c60 /backend-go/fix_market.py
parent29c4b57db9a34e0f815d93cac6a2cae543778a93 (diff)
downloadhaul-1b59961ce2385252e3346ea6107b15a2c1feafe6.tar.gz
feat(backend): port route-planning backend to Go
Add a Go implementation mirroring the Python pipeline (loader, graph, pathfinder, arbitrage, market, route, manager) under internal/core, with ESI client/API integration and setup endpoints. Reuses backend/src as the working directory so existing data/cache paths keep working.
Diffstat (limited to 'backend-go/fix_market.py')
-rw-r--r--backend-go/fix_market.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/backend-go/fix_market.py b/backend-go/fix_market.py
new file mode 100644
index 0000000..333aa2b
--- /dev/null
+++ b/backend-go/fix_market.py
@@ -0,0 +1,80 @@
+import re
+
+with open('internal/core/market.go', 'r') as f:
+ text = f.read()
+
+pattern = re.compile(r'func \(m \*Market\) downloadOrders\(regionID int\) \(\[\]Order, error\) \{.*?return formatted, nil\n\}', re.DOTALL)
+
+replacement = """func (m *Market) downloadOrders(regionID int) ([]Order, error) {
+ page := 1
+ var rawOrders []map[string]interface{}
+ var lastExpiry string
+
+ for {
+ pageOrders, expiry, totalPages, err := m.EsiClient.GetRegionOrders(regionID, page)
+ if err != nil {
+ log.Printf("Failed to get region orders %d page %d: %v", regionID, page, err)
+ break
+ }
+ if len(pageOrders) == 0 {
+ break
+ }
+ rawOrders = append(rawOrders, pageOrders...)
+ lastExpiry = expiry
+
+ if page >= totalPages {
+ break
+ }
+ page++
+ }
+
+ if lastExpiry != "" {
+ if parsed, err := time.Parse(time.RFC1123, lastExpiry); err == nil {
+ m.ExpiresTimes[regionID] = parsed
+ } else {
+ m.ExpiresTimes[regionID] = time.Now().UTC()
+ }
+ } else {
+ m.ExpiresTimes[regionID] = time.Now().UTC()
+ }
+
+ var formatted []Order
+ for _, o := range rawOrders {
+ typeID := int(o["type_id"].(float64))
+ item, exists := m.Items[typeID]
+ if !exists {
+ continue
+ }
+
+ cargoVol := item.Volume
+ if cargoVol == nil || *cargoVol <= 0 {
+ continue
+ }
+
+ issuedStr, _ := o["issued"].(string)
+ issuedTime, _ := time.Parse("2006-01-02T15:04:05Z", issuedStr)
+
+ isBuyOrder, _ := o["is_buy_order"].(bool)
+ orderIDFloat, _ := o["order_id"].(float64)
+ locIDFloat, _ := o["location_id"].(float64)
+ price, _ := o["price"].(float64)
+ volRemainFloat, _ := o["volume_remain"].(float64)
+
+ formatted = append(formatted, Order{
+ OrderID: int(orderIDFloat),
+ RegionID: regionID,
+ LocationID: int(locIDFloat),
+ TypeID: typeID,
+ IsBuyOrder: isBuyOrder,
+ Price: price,
+ Issued: issuedTime,
+ VolumeRemain: int(volRemainFloat),
+ ItemName: item.TypeName,
+ ItemCargoVolume: *cargoVol,
+ })
+ }
+ return formatted, nil
+}"""
+
+with open('internal/core/market.go', 'w') as f:
+ f.write(text.replace(text[re.search(pattern, text).start():re.search(pattern, text).end()], replacement))