diff options
Diffstat (limited to 'backend-go/fix_market.py')
| -rw-r--r-- | backend-go/fix_market.py | 80 |
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)) |
