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
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq.Expressions;
|
||||
using PolyTraderSharp.Models;
|
||||
|
||||
namespace PolyTrader.Modules.CopyTrading.Persistence
|
||||
{
|
||||
/// <summary>
|
||||
/// Copytrading-eigener Trade-Log (Collection "closed_trades"). Enthält die kopierten,
|
||||
/// geschlossenen Trades mit Copytrading-Details (SourceTraderId etc.).
|
||||
/// Ergänzt später den generischen Core-Trade-Log (TradeRecord).
|
||||
/// </summary>
|
||||
public interface ICopyTradeLogRepository
|
||||
{
|
||||
void EnsureIndexes();
|
||||
|
||||
/// <summary>Prüft, ob für Account + TokenId bereits ein Eintrag existiert (Dedup).</summary>
|
||||
bool Exists(int accountId, string tokenId);
|
||||
|
||||
void Insert(ClosedTrade trade);
|
||||
|
||||
/// <summary>Generische Abfrage (ersetzt die bisherigen LiteFind-Zugriffe).</summary>
|
||||
List<ClosedTrade> Find(Expression<Func<ClosedTrade, bool>> predicate);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using MongoDB.Driver;
|
||||
using PolyTraderSharp.Models;
|
||||
|
||||
namespace PolyTrader.Modules.CopyTrading.Persistence
|
||||
{
|
||||
public class MongoCopyTradeLogRepository : ICopyTradeLogRepository
|
||||
{
|
||||
private readonly IMongoCollection<ClosedTrade> _col;
|
||||
|
||||
public MongoCopyTradeLogRepository(IMongoDatabase db)
|
||||
{
|
||||
_col = db.GetCollection<ClosedTrade>("closed_trades");
|
||||
}
|
||||
|
||||
public void EnsureIndexes()
|
||||
{
|
||||
CreateIndex(x => x.TradeId);
|
||||
CreateIndex(x => x.AccountId);
|
||||
CreateIndex(x => x.TokenId);
|
||||
CreateIndex(x => x.SourceTraderId);
|
||||
}
|
||||
|
||||
private void CreateIndex(Expression<Func<ClosedTrade, object>> field)
|
||||
{
|
||||
try
|
||||
{
|
||||
var keys = Builders<ClosedTrade>.IndexKeys.Ascending(field);
|
||||
_col.Indexes.CreateOne(new CreateIndexModel<ClosedTrade>(keys));
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
public bool Exists(int accountId, string tokenId) =>
|
||||
_col.Find(x => x.AccountId == accountId && x.TokenId == tokenId).Any();
|
||||
|
||||
public void Insert(ClosedTrade trade) => _col.InsertOne(trade);
|
||||
|
||||
public List<ClosedTrade> Find(Expression<Func<ClosedTrade, bool>> predicate) =>
|
||||
_col.Find(predicate).ToList();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user