Setup bundle for backtest

This commit is contained in:
2025-07-21 00:01:13 +07:00
parent 4c07d7323f
commit 0870edee61
8 changed files with 543 additions and 72 deletions

View File

@@ -12,10 +12,14 @@ namespace Managing.Infrastructure.Databases;
public class BacktestRepository : IBacktestRepository
{
private readonly IMongoRepository<BacktestDto> _backtestRepository;
private readonly IMongoRepository<BundleBacktestRequestDto> _bundleBacktestRepository;
public BacktestRepository(IMongoRepository<BacktestDto> backtestRepository)
public BacktestRepository(
IMongoRepository<BacktestDto> backtestRepository,
IMongoRepository<BundleBacktestRequestDto> bundleBacktestRepository)
{
_backtestRepository = backtestRepository;
_bundleBacktestRepository = bundleBacktestRepository;
}
// User-specific operations
@@ -305,4 +309,107 @@ public class BacktestRepository : IBacktestRepository
return (mappedBacktests, (int)totalCount);
}
// Bundle backtest methods
public void InsertBundleBacktestRequestForUser(User user, BundleBacktestRequest bundleRequest)
{
bundleRequest.User = user;
var dto = MapToDto(bundleRequest);
_bundleBacktestRepository.InsertOne(dto);
}
public IEnumerable<BundleBacktestRequest> GetBundleBacktestRequestsByUser(User user)
{
var bundleRequests = _bundleBacktestRepository.AsQueryable()
.Where(b => b.User.Name == user.Name)
.ToList();
return bundleRequests.Select(MapToDomain);
}
public BundleBacktestRequest? GetBundleBacktestRequestByIdForUser(User user, string id)
{
var bundleRequest = _bundleBacktestRepository.FindOne(b => b.RequestId == id);
if (bundleRequest != null && bundleRequest.User.Name == user.Name)
{
return MapToDomain(bundleRequest);
}
return null;
}
public void UpdateBundleBacktestRequest(BundleBacktestRequest bundleRequest)
{
var dto = MapToDto(bundleRequest);
_bundleBacktestRepository.ReplaceOne(dto);
}
public void DeleteBundleBacktestRequestByIdForUser(User user, string id)
{
var bundleRequest = _bundleBacktestRepository.FindOne(b => b.RequestId == id);
if (bundleRequest != null && bundleRequest.User.Name == user.Name)
{
_bundleBacktestRepository.DeleteById(bundleRequest.Id.ToString());
}
}
public IEnumerable<BundleBacktestRequest> GetPendingBundleBacktestRequests()
{
var pendingRequests = _bundleBacktestRepository.AsQueryable()
.Where(b => b.Status == BundleBacktestRequestStatus.Pending)
.ToList();
return pendingRequests.Select(MapToDomain);
}
/// <summary>
/// Maps a domain model to DTO
/// </summary>
/// <param name="domain">The domain model</param>
/// <returns>The DTO</returns>
private static BundleBacktestRequestDto MapToDto(BundleBacktestRequest domain)
{
return new BundleBacktestRequestDto
{
RequestId = domain.RequestId,
User = MongoMappers.Map(domain.User),
CompletedAt = domain.CompletedAt,
Status = domain.Status,
BacktestRequestsJson = domain.BacktestRequestsJson,
TotalBacktests = domain.TotalBacktests,
CompletedBacktests = domain.CompletedBacktests,
FailedBacktests = domain.FailedBacktests,
ErrorMessage = domain.ErrorMessage,
ProgressInfo = domain.ProgressInfo,
CurrentBacktest = domain.CurrentBacktest,
EstimatedTimeRemainingSeconds = domain.EstimatedTimeRemainingSeconds
};
}
/// <summary>
/// Maps a DTO to domain model
/// </summary>
/// <param name="dto">The DTO</param>
/// <returns>The domain model</returns>
private static BundleBacktestRequest MapToDomain(BundleBacktestRequestDto dto)
{
return new BundleBacktestRequest
{
RequestId = dto.RequestId,
User = MongoMappers.Map(dto.User),
CreatedAt = dto.CreatedAt,
CompletedAt = dto.CompletedAt,
Status = dto.Status,
BacktestRequestsJson = dto.BacktestRequestsJson,
TotalBacktests = dto.TotalBacktests,
CompletedBacktests = dto.CompletedBacktests,
FailedBacktests = dto.FailedBacktests,
ErrorMessage = dto.ErrorMessage,
ProgressInfo = dto.ProgressInfo,
CurrentBacktest = dto.CurrentBacktest,
EstimatedTimeRemainingSeconds = dto.EstimatedTimeRemainingSeconds
};
}
}

View File

@@ -0,0 +1,22 @@
using Managing.Domain.Backtests;
using Managing.Infrastructure.Databases.MongoDb.Attributes;
using Managing.Infrastructure.Databases.MongoDb.Configurations;
namespace Managing.Infrastructure.Databases.MongoDb.Collections;
[BsonCollection("BundleBacktestRequests")]
public class BundleBacktestRequestDto : Document
{
public string RequestId { get; set; } = string.Empty;
public UserDto User { get; set; } = new();
public DateTime? CompletedAt { get; set; }
public BundleBacktestRequestStatus Status { get; set; }
public string BacktestRequestsJson { get; set; } = string.Empty;
public int TotalBacktests { get; set; }
public int CompletedBacktests { get; set; }
public int FailedBacktests { get; set; }
public string? ErrorMessage { get; set; }
public string? ProgressInfo { get; set; }
public string? CurrentBacktest { get; set; }
public int? EstimatedTimeRemainingSeconds { get; set; }
}