Fix API offset limit 400 Bad Request, implement requested UI/UX improvements
This commit is contained in:
@@ -177,6 +177,41 @@ public class TradeHistoryWorker : BackgroundService
|
||||
_statsService.TrackTradeActivity(trader.Platform, uniqueNewTrades.Count);
|
||||
trader.TotalTrades += uniqueNewTrades.Count;
|
||||
_logger.LogInformation("{Trader}: {New} new trades imported", trader.DisplayName, uniqueNewTrades.Count);
|
||||
|
||||
// Fable 5 recommendation: fetch /book directly after recent trades to get market overview
|
||||
var recentTrades = uniqueNewTrades.Where(t => (DateTime.UtcNow - t.ExecutedAt).TotalMinutes < 5).ToList();
|
||||
foreach (var rt in recentTrades.GroupBy(t => new { t.MarketOutcomeId, t.AssetId }))
|
||||
{
|
||||
if (rt.Key.MarketOutcomeId.HasValue && rt.Key.MarketOutcomeId.Value > 0 && !string.IsNullOrEmpty(rt.Key.AssetId) && provider is Predictalytics.Infrastructure.Providers.Polymarket.PolymarketProvider polyProv)
|
||||
{
|
||||
try
|
||||
{
|
||||
var polyApi = scope.ServiceProvider.GetService<Predictalytics.Infrastructure.Providers.Polymarket.PolymarketApiClient>();
|
||||
if (polyApi != null)
|
||||
{
|
||||
var book = await polyApi.GetOrderBookAsync(rt.Key.AssetId, ct);
|
||||
if (book != null && book.Bids.Count > 0 && book.Asks.Count > 0)
|
||||
{
|
||||
decimal topBid = decimal.Parse(book.Bids[0].Price, System.Globalization.CultureInfo.InvariantCulture);
|
||||
decimal topAsk = decimal.Parse(book.Asks[0].Price, System.Globalization.CultureInfo.InvariantCulture);
|
||||
decimal midPrice = (topBid + topAsk) / 2m;
|
||||
|
||||
var snapshot = new Domain.Entities.MarketOutcomePriceSnapshot
|
||||
{
|
||||
MarketOutcomeId = rt.Key.MarketOutcomeId.Value,
|
||||
Timestamp = DateTime.UtcNow,
|
||||
Price = midPrice
|
||||
};
|
||||
await marketRepo.SavePriceSnapshotsAsync(rt.Key.MarketOutcomeId.Value, new[] { snapshot }, ct);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogWarning(ex, "Failed to fetch /book for Outcome {OutcomeId}", rt.Key.MarketOutcomeId.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) when (ex.ToString().Contains("Duplicate entry") || (ex.InnerException?.Message.Contains("Duplicate entry") ?? false)) {
|
||||
_statsService.TrackDuplicateError(trader.Platform, 1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user