Phase 5.3-ClosedTrade: ClosedTrade -> Modul + ICopyTradeLogRepository
- ClosedTrade (+ ClosedTradeRow) nach src/PolyTrader.Modules.CopyTrading/Models/. - Neues ICopyTradeLogRepository (+ Mongo-Impl) im Modul: EnsureIndexes, Exists, Insert, Find(predicate) auf der closed_trades-Collection. - closed_trades-Zugriffe der Modul-Services vom App-Shim auf das Repo umgestellt: TraderMonitorService, PersistenceService, PolymarketWssClient, TraderAnalyticsJob. Shim-/DB-Usings dort entfernt. - TraderMonitorService nutzt kein _db mehr (auch die uebrigen _db-Guards aus 3d entfernt, da Repos immer verfuegbar sind). Verhaltensneutral. - frm_main (UI) + Program.cs (BsonDocument-Cleanup) bleiben auf _db. - Build 0 Fehler. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
3be75c0f05
commit
88fc982089
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using MongoDB.Driver;
|
||||
using PolyTraderSharp.Extensions;
|
||||
using PolyTrader.Modules.CopyTrading.Persistence;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
@@ -15,15 +14,15 @@ namespace PolyTraderSharp.Services
|
||||
private readonly TradingState _state;
|
||||
private readonly CopyTradingState _copyState;
|
||||
private readonly TerminalLogger _logger;
|
||||
private readonly IMongoDatabase _db;
|
||||
private readonly ICopyTradeLogRepository _tradeLog;
|
||||
private readonly JobStatusRow _jobStatus;
|
||||
|
||||
public TraderAnalyticsJob(TradingState state, CopyTradingState copyState, TerminalLogger logger, IMongoDatabase db, JobManager jobManager)
|
||||
public TraderAnalyticsJob(TradingState state, CopyTradingState copyState, TerminalLogger logger, ICopyTradeLogRepository tradeLog, JobManager jobManager)
|
||||
{
|
||||
_state = state;
|
||||
_copyState = copyState;
|
||||
_logger = logger;
|
||||
_db = db;
|
||||
_tradeLog = tradeLog;
|
||||
|
||||
_jobStatus = new JobStatusRow
|
||||
{
|
||||
@@ -86,10 +85,7 @@ namespace PolyTraderSharp.Services
|
||||
{
|
||||
_logger.Info("🔄 Starte Trader Analytics (7D / Letzte 30 Trades)...");
|
||||
|
||||
var closedTradesColl = _db.GetCollection<ClosedTrade>("closed_trades");
|
||||
// Ensure indexes
|
||||
closedTradesColl.EnsureIndex(x => x.AccountId);
|
||||
closedTradesColl.EnsureIndex(x => x.SourceTraderId);
|
||||
_tradeLog.EnsureIndexes();
|
||||
|
||||
DateTime sevenDaysAgo = DateTime.UtcNow.AddDays(-7);
|
||||
|
||||
@@ -102,7 +98,7 @@ namespace PolyTraderSharp.Services
|
||||
// The requirement says: "Welche Trades ... in den letzten 7 Tagen kopiert ... und wie hoch war die Winrate der letzten 30 Trades"
|
||||
// Thus we only care about MTs that had at least 1 trade in the last 7 days!
|
||||
int accId = acc.AccountId;
|
||||
var recentMTs = closedTradesColl.LiteFind(x => x.AccountId == accId && x.ClosedAt >= sevenDaysAgo)
|
||||
var recentMTs = _tradeLog.Find(x => x.AccountId == accId && x.ClosedAt >= sevenDaysAgo)
|
||||
.Select(x => x.SourceTraderId)
|
||||
.Distinct()
|
||||
.Where(id => id != 0) // Ignore orphaned historical trades (API resolved/auto-redeem before ID tracking patch)
|
||||
@@ -115,10 +111,10 @@ namespace PolyTraderSharp.Services
|
||||
string address = mtInfo?.WalletAddress ?? "";
|
||||
|
||||
// 1. Trades im 7D Fenster zählen
|
||||
int trades7D = closedTradesColl.LiteFind(x => x.AccountId == accId && x.SourceTraderId == mtId && x.ClosedAt >= sevenDaysAgo).Count();
|
||||
int trades7D = _tradeLog.Find(x => x.AccountId == accId && x.SourceTraderId == mtId && x.ClosedAt >= sevenDaysAgo).Count();
|
||||
|
||||
// 2. Letzte 30 Trades holen
|
||||
var last30 = closedTradesColl.LiteFind(x => x.AccountId == accId && x.SourceTraderId == mtId)
|
||||
var last30 = _tradeLog.Find(x => x.AccountId == accId && x.SourceTraderId == mtId)
|
||||
.OrderByDescending(x => x.ClosedAt)
|
||||
.Take(30)
|
||||
.ToList();
|
||||
|
||||
Reference in New Issue
Block a user