Files
PolyTraderSharp/src/PolyTrader.Modules.CopyTrading/Persistence/Ef/EfMasterTraderHistoryRepository.cs
T
RichardandClaude Opus 4.8 8101b79cfb Phase 6 (Stufe 3): CopyTrading-Modul auf EF/MySQL umschaltbar
- CopyTradingDbContext (mod_copytrading_* Tabellen) + Design-Time-Factory
- EF-Repos: CopyTradeLog, AccountSettings, TrackedTrader, MasterTraderHistory
- Neue Repo-Contracts ITrackedTraderRepository + IMasterTraderHistoryRepository
  (loest die Collection-Inkonsistenz trackers/tracked_traders auf eine Quelle auf)
- Mongo-Impls der neuen Contracts (Uebergang)
- CopyTradingModule.RegisterServices: Provider-Toggle (MySql via EF / Mongo)
- StartupHydrationService + MasterTraderAnalyticsJob nutzen die Repos statt _db
- InitialCopyTrading-Migration erstellt und auf MySQL angewendet

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 14:11:03 +02:00

38 lines
1.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using PolyTraderSharp.Models;
namespace PolyTrader.Modules.CopyTrading.Persistence.Ef
{
public class EfMasterTraderHistoryRepository : IMasterTraderHistoryRepository
{
private readonly IDbContextFactory<CopyTradingDbContext> _factory;
public EfMasterTraderHistoryRepository(IDbContextFactory<CopyTradingDbContext> factory) => _factory = factory;
public void EnsureIndexes() { }
public bool Exists(int traderId, string tokenId, DateTime windowStart, DateTime windowEnd)
{
using var ctx = _factory.CreateDbContext();
return ctx.History.AsNoTracking().Any(x => x.TraderId == traderId && x.TokenId == tokenId
&& x.ClosedAt >= windowStart && x.ClosedAt <= windowEnd);
}
public void Insert(MasterTraderHistoryRecord record)
{
using var ctx = _factory.CreateDbContext();
ctx.History.Add(record);
ctx.SaveChanges();
}
public List<MasterTraderHistoryRecord> GetByTraderSince(int traderId, DateTime since)
{
using var ctx = _factory.CreateDbContext();
return ctx.History.AsNoTracking().Where(x => x.TraderId == traderId && x.ClosedAt >= since).ToList();
}
}
}