Add Genetic workers
This commit is contained in:
90
src/Managing.Infrastructure.Database/GeneticRepository.cs
Normal file
90
src/Managing.Infrastructure.Database/GeneticRepository.cs
Normal file
@@ -0,0 +1,90 @@
|
||||
using Managing.Application.Abstractions.Repositories;
|
||||
using Managing.Domain.Backtests;
|
||||
using Managing.Domain.Users;
|
||||
using Managing.Infrastructure.Databases.MongoDb;
|
||||
using Managing.Infrastructure.Databases.MongoDb.Abstractions;
|
||||
using Managing.Infrastructure.Databases.MongoDb.Collections;
|
||||
|
||||
namespace Managing.Infrastructure.Databases;
|
||||
|
||||
public class GeneticRepository : IGeneticRepository
|
||||
{
|
||||
private readonly IMongoRepository<GeneticRequestDto> _geneticRequestRepository;
|
||||
|
||||
public GeneticRepository(IMongoRepository<GeneticRequestDto> geneticRequestRepository)
|
||||
{
|
||||
_geneticRequestRepository = geneticRequestRepository;
|
||||
}
|
||||
|
||||
public void InsertGeneticRequestForUser(User user, GeneticRequest geneticRequest)
|
||||
{
|
||||
geneticRequest.User = user;
|
||||
_geneticRequestRepository.InsertOne(MongoMappers.Map(geneticRequest));
|
||||
}
|
||||
|
||||
public IEnumerable<GeneticRequest> GetGeneticRequestsByUser(User user)
|
||||
{
|
||||
var geneticRequests = _geneticRequestRepository.AsQueryable()
|
||||
.Where(gr => gr.User.Name == user.Name)
|
||||
.OrderByDescending(gr => gr.CreatedAt)
|
||||
.ToList();
|
||||
|
||||
return geneticRequests.Select(gr => MongoMappers.Map(gr));
|
||||
}
|
||||
|
||||
public GeneticRequest GetGeneticRequestByIdForUser(User user, string id)
|
||||
{
|
||||
var geneticRequest = _geneticRequestRepository.FindById(id);
|
||||
|
||||
// Check if genetic request exists and belongs to the user
|
||||
if (geneticRequest != null && geneticRequest.User != null && geneticRequest.User.Name == user.Name)
|
||||
{
|
||||
return MongoMappers.Map(geneticRequest);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void UpdateGeneticRequest(GeneticRequest geneticRequest)
|
||||
{
|
||||
var existingRequest = _geneticRequestRepository.FindOne(gr => gr.RequestId == geneticRequest.RequestId);
|
||||
if (existingRequest != null)
|
||||
{
|
||||
var updatedDto = MongoMappers.Map(geneticRequest);
|
||||
updatedDto.Id = existingRequest.Id; // Preserve the MongoDB ObjectId
|
||||
_geneticRequestRepository.ReplaceOne(updatedDto);
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteGeneticRequestByIdForUser(User user, string id)
|
||||
{
|
||||
var geneticRequest = _geneticRequestRepository.FindOne(gr => gr.RequestId == id);
|
||||
|
||||
if (geneticRequest != null && geneticRequest.User != null && geneticRequest.User.Name == user.Name)
|
||||
{
|
||||
_geneticRequestRepository.DeleteById(geneticRequest.Id.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteAllGeneticRequestsForUser(User user)
|
||||
{
|
||||
var geneticRequests = _geneticRequestRepository.AsQueryable()
|
||||
.Where(gr => gr.User != null && gr.User.Name == user.Name)
|
||||
.ToList();
|
||||
|
||||
foreach (var geneticRequest in geneticRequests)
|
||||
{
|
||||
_geneticRequestRepository.DeleteById(geneticRequest.Id.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<GeneticRequest> GetPendingGeneticRequests()
|
||||
{
|
||||
var pendingRequests = _geneticRequestRepository.AsQueryable()
|
||||
.Where(gr => gr.Status == "Pending")
|
||||
.OrderBy(gr => gr.CreatedAt)
|
||||
.ToList();
|
||||
|
||||
return pendingRequests.Select(gr => MongoMappers.Map(gr));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
using Managing.Infrastructure.Databases.MongoDb.Attributes;
|
||||
using Managing.Infrastructure.Databases.MongoDb.Configurations;
|
||||
using static Managing.Common.Enums;
|
||||
|
||||
namespace Managing.Infrastructure.Databases.MongoDb.Collections
|
||||
{
|
||||
[BsonCollection("GeneticRequests")]
|
||||
public class GeneticRequestDto : Document
|
||||
{
|
||||
public string RequestId { get; set; }
|
||||
public UserDto User { get; set; }
|
||||
public DateTime? CompletedAt { get; set; }
|
||||
public string Status { get; set; }
|
||||
public Ticker Ticker { get; set; }
|
||||
public Timeframe Timeframe { get; set; }
|
||||
public DateTime StartDate { get; set; }
|
||||
public DateTime EndDate { get; set; }
|
||||
public decimal Balance { get; set; }
|
||||
public int PopulationSize { get; set; }
|
||||
public int Generations { get; set; }
|
||||
public double MutationRate { get; set; }
|
||||
public string SelectionMethod { get; set; }
|
||||
public int ElitismPercentage { get; set; }
|
||||
public double MaxTakeProfit { get; set; }
|
||||
public List<IndicatorType> EligibleIndicators { get; set; } = new();
|
||||
public double? BestFitness { get; set; }
|
||||
public string? BestIndividual { get; set; }
|
||||
public string? ErrorMessage { get; set; }
|
||||
public string? ProgressInfo { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -182,6 +182,71 @@ public static class MongoMappers
|
||||
|
||||
#endregion
|
||||
|
||||
#region Genetic Requests
|
||||
|
||||
internal static GeneticRequest Map(GeneticRequestDto dto)
|
||||
{
|
||||
if (dto == null)
|
||||
return null;
|
||||
|
||||
return new GeneticRequest
|
||||
{
|
||||
RequestId = dto.RequestId,
|
||||
User = Map(dto.User),
|
||||
CreatedAt = dto.CreatedAt,
|
||||
CompletedAt = dto.CompletedAt,
|
||||
Status = Enum.Parse<GeneticRequestStatus>(dto.Status),
|
||||
Ticker = dto.Ticker,
|
||||
Timeframe = dto.Timeframe,
|
||||
StartDate = dto.StartDate,
|
||||
EndDate = dto.EndDate,
|
||||
Balance = dto.Balance,
|
||||
PopulationSize = dto.PopulationSize,
|
||||
Generations = dto.Generations,
|
||||
MutationRate = dto.MutationRate,
|
||||
SelectionMethod = dto.SelectionMethod,
|
||||
ElitismPercentage = dto.ElitismPercentage,
|
||||
MaxTakeProfit = dto.MaxTakeProfit,
|
||||
EligibleIndicators = dto.EligibleIndicators,
|
||||
BestFitness = dto.BestFitness,
|
||||
BestIndividual = dto.BestIndividual,
|
||||
ErrorMessage = dto.ErrorMessage,
|
||||
ProgressInfo = dto.ProgressInfo
|
||||
};
|
||||
}
|
||||
|
||||
internal static GeneticRequestDto Map(GeneticRequest geneticRequest)
|
||||
{
|
||||
if (geneticRequest == null)
|
||||
return null;
|
||||
|
||||
return new GeneticRequestDto
|
||||
{
|
||||
RequestId = geneticRequest.RequestId,
|
||||
User = Map(geneticRequest.User),
|
||||
CompletedAt = geneticRequest.CompletedAt,
|
||||
Status = geneticRequest.Status.ToString(),
|
||||
Ticker = geneticRequest.Ticker,
|
||||
Timeframe = geneticRequest.Timeframe,
|
||||
StartDate = geneticRequest.StartDate,
|
||||
EndDate = geneticRequest.EndDate,
|
||||
Balance = geneticRequest.Balance,
|
||||
PopulationSize = geneticRequest.PopulationSize,
|
||||
Generations = geneticRequest.Generations,
|
||||
MutationRate = geneticRequest.MutationRate,
|
||||
SelectionMethod = geneticRequest.SelectionMethod,
|
||||
ElitismPercentage = geneticRequest.ElitismPercentage,
|
||||
MaxTakeProfit = geneticRequest.MaxTakeProfit,
|
||||
EligibleIndicators = geneticRequest.EligibleIndicators,
|
||||
BestFitness = geneticRequest.BestFitness,
|
||||
BestIndividual = geneticRequest.BestIndividual,
|
||||
ErrorMessage = geneticRequest.ErrorMessage,
|
||||
ProgressInfo = geneticRequest.ProgressInfo
|
||||
};
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Candles
|
||||
|
||||
public static Candle Map(CandleDto candle)
|
||||
|
||||
Reference in New Issue
Block a user