Files
managing-apps/src/Managing.Infrastructure.Database/BacktestRepository.cs

90 lines
2.8 KiB
C#

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 BacktestRepository : IBacktestRepository
{
private readonly IMongoRepository<BacktestDto> _backtestRepository;
public BacktestRepository(IMongoRepository<BacktestDto> backtestRepository)
{
_backtestRepository = backtestRepository;
}
// User-specific operations
public void InsertBacktestForUser(User user, Backtest backtest)
{
backtest.User = user;
_backtestRepository.InsertOne(MongoMappers.Map(backtest));
}
public IEnumerable<Backtest> GetBacktestsByUser(User user)
{
var backtests = _backtestRepository.AsQueryable()
.Where(b => b.User.Name == user.Name)
.ToList();
return backtests.Select(b => MongoMappers.Map(b));
}
public IEnumerable<Backtest> GetBacktestsByRequestId(string requestId)
{
var backtests = _backtestRepository.AsQueryable()
.Where(b => b.RequestId == requestId)
.ToList();
return backtests.Select(b => MongoMappers.Map(b));
}
public Backtest GetBacktestByIdForUser(User user, string id)
{
var backtest = _backtestRepository.FindById(id);
// Check if backtest exists and belongs to the user
if (backtest != null && backtest.User != null && backtest.User.Name == user.Name)
{
return MongoMappers.Map(backtest);
}
return null;
}
public void DeleteBacktestByIdForUser(User user, string id)
{
var backtest = _backtestRepository.FindOne(b => b.Identifier == id);
if (backtest != null && backtest.User != null && backtest.User.Name == user.Name)
{
_backtestRepository.DeleteById(backtest.Id.ToString());
}
}
public void DeleteBacktestsByIdsForUser(User user, IEnumerable<string> ids)
{
var backtests = _backtestRepository.AsQueryable()
.Where(b => b.User != null && b.User.Name == user.Name && ids.Contains(b.Identifier))
.ToList();
foreach (var backtest in backtests)
{
_backtestRepository.DeleteById(backtest.Id.ToString());
}
}
public void DeleteAllBacktestsForUser(User user)
{
var backtests = _backtestRepository.AsQueryable()
.Where(b => b.User != null && b.User.Name == user.Name)
.ToList();
foreach (var backtest in backtests)
{
_backtestRepository.DeleteById(backtest.Id.ToString());
}
}
}