Add delete backtests by filters
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user