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> GetCommissionsAsync() { return await _commissionRepository.GetCommissionsAsync(); } public async Task SaveCommissionsAsync(List 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(); } }