Add admin page for bundle

This commit is contained in:
2025-11-10 11:50:20 +07:00
parent ecf07a7863
commit 0861e9a8d2
18 changed files with 2071 additions and 49 deletions

View File

@@ -0,0 +1,36 @@
using Managing.Domain.Backtests;
namespace Managing.Application.Abstractions.Repositories;
/// <summary>
/// Summary statistics for bundle backtest requests
/// </summary>
public class BundleBacktestRequestSummary
{
/// <summary>
/// Counts of bundle requests by status
/// </summary>
public List<BundleBacktestRequestStatusCount> StatusCounts { get; set; } = new();
/// <summary>
/// Total number of bundle backtest requests
/// </summary>
public int TotalRequests { get; set; }
}
/// <summary>
/// Count of bundle backtest requests by status
/// </summary>
public class BundleBacktestRequestStatusCount
{
/// <summary>
/// The status
/// </summary>
public BundleBacktestRequestStatus Status { get; set; }
/// <summary>
/// The count of bundle requests with this status
/// </summary>
public int Count { get; set; }
}

View File

@@ -57,4 +57,22 @@ public interface IBacktestRepository
Task DeleteBundleBacktestRequestByIdForUserAsync(User user, Guid id);
IEnumerable<BundleBacktestRequest> GetBundleBacktestRequestsByStatus(BundleBacktestRequestStatus status);
Task<IEnumerable<BundleBacktestRequest>> GetBundleBacktestRequestsByStatusAsync(BundleBacktestRequestStatus status);
// Admin methods - no user filter
(IEnumerable<BundleBacktestRequest> BundleRequests, int TotalCount) GetBundleBacktestRequestsPaginated(
int page,
int pageSize,
Enums.BundleBacktestRequestSortableColumn sortBy = Enums.BundleBacktestRequestSortableColumn.CreatedAt,
string sortOrder = "desc",
BundleBacktestRequestsFilter? filter = null);
Task<(IEnumerable<BundleBacktestRequest> BundleRequests, int TotalCount)> GetBundleBacktestRequestsPaginatedAsync(
int page,
int pageSize,
Enums.BundleBacktestRequestSortableColumn sortBy = Enums.BundleBacktestRequestSortableColumn.CreatedAt,
string sortOrder = "desc",
BundleBacktestRequestsFilter? filter = null);
// Admin summary methods
Task<BundleBacktestRequestSummary> GetBundleBacktestRequestsSummaryAsync();
}

View File

@@ -1,4 +1,5 @@
using Managing.Application.Abstractions.Shared;
using Managing.Application.Abstractions.Repositories;
using Managing.Application.Abstractions.Shared;
using Managing.Common;
using Managing.Domain.Backtests;
using Managing.Domain.Bots;
@@ -98,6 +99,21 @@ namespace Managing.Application.Abstractions.Services
IEnumerable<BundleBacktestRequest> GetBundleBacktestRequestsByStatus(BundleBacktestRequestStatus status);
Task<IEnumerable<BundleBacktestRequest>> GetBundleBacktestRequestsByStatusAsync(BundleBacktestRequestStatus status);
// Admin methods - no user filter
(IEnumerable<BundleBacktestRequest> BundleRequests, int TotalCount) GetBundleBacktestRequestsPaginated(
int page,
int pageSize,
Enums.BundleBacktestRequestSortableColumn sortBy = Enums.BundleBacktestRequestSortableColumn.CreatedAt,
string sortOrder = "desc",
BundleBacktestRequestsFilter? filter = null);
Task<(IEnumerable<BundleBacktestRequest> BundleRequests, int TotalCount)> GetBundleBacktestRequestsPaginatedAsync(
int page,
int pageSize,
Enums.BundleBacktestRequestSortableColumn sortBy = Enums.BundleBacktestRequestSortableColumn.CreatedAt,
string sortOrder = "desc",
BundleBacktestRequestsFilter? filter = null);
Task<BundleBacktestRequestSummary> GetBundleBacktestRequestsSummaryAsync();
}
}

View File

@@ -0,0 +1,70 @@
using Managing.Domain.Backtests;
namespace Managing.Application.Abstractions.Shared;
/// <summary>
/// Filter model for bundle backtest requests
/// </summary>
public class BundleBacktestRequestsFilter
{
/// <summary>
/// Filter by name contains (case-insensitive)
/// </summary>
public string? NameContains { get; set; }
/// <summary>
/// Filter by status
/// </summary>
public BundleBacktestRequestStatus? Status { get; set; }
/// <summary>
/// Filter by user ID
/// </summary>
public int? UserId { get; set; }
/// <summary>
/// Filter by user name contains (case-insensitive)
/// </summary>
public string? UserNameContains { get; set; }
/// <summary>
/// Filter by minimum total backtests
/// </summary>
public int? TotalBacktestsMin { get; set; }
/// <summary>
/// Filter by maximum total backtests
/// </summary>
public int? TotalBacktestsMax { get; set; }
/// <summary>
/// Filter by minimum completed backtests
/// </summary>
public int? CompletedBacktestsMin { get; set; }
/// <summary>
/// Filter by maximum completed backtests
/// </summary>
public int? CompletedBacktestsMax { get; set; }
/// <summary>
/// Filter by minimum progress percentage (0-100)
/// </summary>
public double? ProgressPercentageMin { get; set; }
/// <summary>
/// Filter by maximum progress percentage (0-100)
/// </summary>
public double? ProgressPercentageMax { get; set; }
/// <summary>
/// Filter by created date from
/// </summary>
public DateTime? CreatedAtFrom { get; set; }
/// <summary>
/// Filter by created date to
/// </summary>
public DateTime? CreatedAtTo { get; set; }
}