using LCU.API.Internal.Operations.IncentiveApi.Exceptions; using LCU.Library.Internal.IncentiveApiModels.Entities; using LCU.API.Internal.Operations.IncentiveApiLib.Repositories; namespace LCU.API.Internal.Operations.IncentiveApi.Services.DuplicateDetection; public class DuplicateDetectionService : IDuplicateDetectionService { private readonly IEnumerable _strategies; public DuplicateDetectionService(IEnumerable strategies, IActivityRepository activityRepository) { _strategies = strategies; } public async Task> TryFindDuplicates(Activity activity) { var strategy = _strategies.FirstOrDefault(x => x.CanDecideActivity(activity)); if (strategy != null) { return await strategy.FindDuplicates(activity); } throw new NoAvailableStrategy( $"No Duplicate Detection Strategy available, {activity.Id} - {activity.Product}:{activity.Type}"); } }