Add delete backtests by filters

This commit is contained in:
2025-10-15 00:28:25 +07:00
parent 48c2d20d70
commit b3f3bccd72
8 changed files with 326 additions and 1 deletions

View File

@@ -379,6 +379,63 @@ public class PostgreSqlBacktestRepository : IBacktestRepository
}
}
public async Task<int> DeleteBacktestsByFiltersAsync(User user, BacktestsFilter filter)
{
var baseQuery = _context.Backtests
.AsTracking()
.Where(b => b.UserId == user.Id);
if (filter != null)
{
if (!string.IsNullOrWhiteSpace(filter.NameContains))
{
var nameLike = $"%{filter.NameContains.Trim()}%";
baseQuery = baseQuery.Where(b => EF.Functions.ILike(b.Name, nameLike));
}
if (filter.ScoreMin.HasValue)
baseQuery = baseQuery.Where(b => b.Score >= filter.ScoreMin.Value);
if (filter.ScoreMax.HasValue)
baseQuery = baseQuery.Where(b => b.Score <= filter.ScoreMax.Value);
if (filter.WinrateMin.HasValue)
baseQuery = baseQuery.Where(b => b.WinRate >= filter.WinrateMin.Value);
if (filter.WinrateMax.HasValue)
baseQuery = baseQuery.Where(b => b.WinRate <= filter.WinrateMax.Value);
if (filter.MaxDrawdownMax.HasValue)
baseQuery = baseQuery.Where(b => b.MaxDrawdown <= filter.MaxDrawdownMax.Value);
if (filter.Tickers != null && filter.Tickers.Any())
{
var tickerArray = filter.Tickers.ToArray();
baseQuery = baseQuery.Where(b => tickerArray.Contains(b.Ticker));
}
if (filter.Indicators != null && filter.Indicators.Any())
{
foreach (var ind in filter.Indicators)
{
var token = "," + ind + ",";
baseQuery = baseQuery.Where(b => ("," + b.IndicatorsCsv + ",").Contains(token));
}
}
if (filter.DurationMin.HasValue)
baseQuery = baseQuery.Where(b => b.Duration >= filter.DurationMin.Value);
if (filter.DurationMax.HasValue)
baseQuery = baseQuery.Where(b => b.Duration <= filter.DurationMax.Value);
}
var entities = await baseQuery.ToListAsync().ConfigureAwait(false);
var count = entities.Count;
if (count > 0)
{
_context.Backtests.RemoveRange(entities);
await _context.SaveChangesAsync().ConfigureAwait(false);
}
return count;
}
public (IEnumerable<LightBacktest> Backtests, int TotalCount) GetBacktestsByUserPaginated(
User user,
int page,