Add filters and sorting for backtests

This commit is contained in:
2025-10-14 18:06:36 +07:00
parent 49b0f7b696
commit 74adad5834
21 changed files with 4028 additions and 81 deletions

View File

@@ -1,4 +1,6 @@
using Managing.Domain.Backtests;
using Managing.Application.Abstractions.Shared;
using Managing.Common;
using Managing.Domain.Backtests;
using Managing.Domain.Users;
namespace Managing.Application.Abstractions.Repositories;
@@ -18,11 +20,21 @@ public interface IBacktestRepository
int page,
int pageSize, string sortBy = "score", string sortOrder = "desc");
(IEnumerable<LightBacktest> Backtests, int TotalCount) GetBacktestsByUserPaginated(User user, int page,
int pageSize, string sortBy = "score", string sortOrder = "desc");
(IEnumerable<LightBacktest> Backtests, int TotalCount) GetBacktestsByUserPaginated(
User user,
int page,
int pageSize,
Enums.BacktestSortableColumn sortBy = Enums.BacktestSortableColumn.Score,
string sortOrder = "desc",
BacktestsFilter? filter = null);
Task<(IEnumerable<LightBacktest> Backtests, int TotalCount)> GetBacktestsByUserPaginatedAsync(User user, int page,
int pageSize, string sortBy = "score", string sortOrder = "desc");
Task<(IEnumerable<LightBacktest> Backtests, int TotalCount)> GetBacktestsByUserPaginatedAsync(
User user,
int page,
int pageSize,
Enums.BacktestSortableColumn sortBy = Enums.BacktestSortableColumn.Score,
string sortOrder = "desc",
BacktestsFilter? filter = null);
Task<Backtest> GetBacktestByIdForUserAsync(User user, string id);
Task DeleteBacktestByIdForUserAsync(User user, string id);

View File

@@ -1,4 +1,6 @@
using Managing.Domain.Backtests;
using Managing.Application.Abstractions.Shared;
using Managing.Common;
using Managing.Domain.Backtests;
using Managing.Domain.Bots;
using Managing.Domain.Candles;
using Managing.Domain.Users;
@@ -64,9 +66,22 @@ namespace Managing.Application.Abstractions.Services
Task<bool> DeleteBacktestByUserAsync(User user, string id);
Task<bool> DeleteBacktestsByIdsForUserAsync(User user, IEnumerable<string> ids);
bool DeleteBacktestsByUser(User user);
(IEnumerable<LightBacktest> Backtests, int TotalCount) GetBacktestsByUserPaginated(
User user,
int page,
int pageSize,
Enums.BacktestSortableColumn sortBy,
string sortOrder = "desc",
BacktestsFilter? filter = null);
Task<(IEnumerable<LightBacktest> Backtests, int TotalCount)> GetBacktestsByUserPaginatedAsync(
User user,
int page,
int pageSize,
Enums.BacktestSortableColumn sortBy,
string sortOrder = "desc",
BacktestsFilter? filter = null);
Task<bool> DeleteBacktestsByRequestIdAsync(Guid requestId);
(IEnumerable<LightBacktest> Backtests, int TotalCount) GetBacktestsByUserPaginated(User user, int page, int pageSize, string sortBy = "score", string sortOrder = "desc");
Task<(IEnumerable<LightBacktest> Backtests, int TotalCount)> GetBacktestsByUserPaginatedAsync(User user, int page, int pageSize, string sortBy = "score", string sortOrder = "desc");
// Bundle backtest methods
void InsertBundleBacktestRequestForUser(User user, BundleBacktestRequest bundleRequest);

View File

@@ -0,0 +1,16 @@
namespace Managing.Application.Abstractions.Shared;
public class BacktestsFilter
{
public double? ScoreMin { get; set; }
public double? ScoreMax { get; set; }
public int? WinrateMin { get; set; }
public int? WinrateMax { get; set; }
public decimal? MaxDrawdownMax { get; set; }
public IEnumerable<string>? Tickers { get; set; }
public IEnumerable<string>? Indicators { get; set; }
public TimeSpan? DurationMin { get; set; }
public TimeSpan? DurationMax { get; set; }
}