50 lines
1.7 KiB
C#
50 lines
1.7 KiB
C#
using LCU.API.Internal.Operations.IncentiveApi.Exceptions;
|
|
using LCU.API.Internal.Operations.IncentiveApiLib.Repositories;
|
|
using LCU.Library.Internal.IncentiveApiModels.Entities;
|
|
|
|
namespace LCU.API.Internal.Operations.IncentiveApi.Services;
|
|
|
|
public class CommissionService : ICommissionService
|
|
{
|
|
private readonly ICommissionRepository _commissionRepository;
|
|
private readonly IUnitOfWork _unitOfWork;
|
|
|
|
public CommissionService(ICommissionRepository commissionRepository, IUnitOfWork unitOfWork)
|
|
{
|
|
_commissionRepository = commissionRepository;
|
|
_unitOfWork = unitOfWork;
|
|
}
|
|
|
|
public async Task<IReadOnlyCollection<Commission>> GetCommissionsAsync()
|
|
{
|
|
return await _commissionRepository.GetCommissionsAsync();
|
|
}
|
|
|
|
public async Task SaveCommissionsAsync(List<Commission> commissionsToSave)
|
|
{
|
|
foreach (var commission in commissionsToSave)
|
|
{
|
|
if (commission.Id == 0)
|
|
{
|
|
var existing = await _commissionRepository.FindExistingCommission(commission.Role, commission.Product);
|
|
if (existing != null)
|
|
{
|
|
throw new CommissionExistsException($"Commission already exists for Role={existing.Role.Name}, Product={existing.Product}");
|
|
}
|
|
|
|
await _commissionRepository.SaveCommission(commission);
|
|
}
|
|
else
|
|
{
|
|
var existing = await _commissionRepository.FindExistingCommission(commission.Id);
|
|
if (existing != null)
|
|
{
|
|
existing.RatePerProduct = commission.RatePerProduct;
|
|
}
|
|
}
|
|
}
|
|
|
|
await _unitOfWork.CompleteAsync();
|
|
}
|
|
}
|