/// <summary>
        /// Creates a new anomaly identity.
        /// Uses the static <see cref="AnomalyIdentity.New()"/> functionality.
        /// </summary>
        public static async Task <AnomalyIdentity> New(this IAnomalyRepository anomalyRepository, DateTime reportedUTC)
        {
            var anomalyIdentity = AnomalyIdentity.New();

            await anomalyRepository.Add(anomalyIdentity, reportedUTC);

            return(anomalyIdentity);
        }
        public static async Task AddOnlyIfNotExistsAsync(this IAnomalyRepository anomalyRepository, AnomalyIdentity anomalyIdentity, DateTime reportedUTC)
        {
            var exists = await anomalyRepository.Exists(anomalyIdentity);

            if (!exists)
            {
                await anomalyRepository.Add(anomalyIdentity, reportedUTC);
            }
        }
        /// <summary>
        /// Create a new anomaly (identity) and set the reported UTC time to the current UTC time.
        /// </summary>
        public static async Task <AnomalyIdentity> NewSetReportedUTC(this IAnomalyRepository repository, ICurrentUtcDateTimeProvider currentUtcDateTimeProvider)
        {
            var nowUTC = currentUtcDateTimeProvider.GetCurrentUtcDateTime();

            var anomalyIdentity = await repository.New(nowUTC);

            await repository.SetReportedUTC(anomalyIdentity, nowUTC);

            return(anomalyIdentity);
        }
        public static async Task <Dictionary <AnomalyIdentity, WasFound <ImageFileIdentity> > > GetSingleImageForAnomaliesByAnomalyIdentity(
            this IAnomalyRepository anomalyRepository,
            IEnumerable <AnomalyIdentity> anomalyIdentities)
        {
            var singleImageForAnomalies = await anomalyRepository.GetSingleImageForAnomalies(anomalyIdentities);

            var output = singleImageForAnomalies
                         .ToDictionary(
                x => x.AnomalyIdentity,
                x => x.ImageFileIdentityWasFound);

            return(output);
        }
        public static async Task <WasFound <ImageFileIdentity> > GetSingleImageForAnomaly(
            this IAnomalyRepository anomalyRepository,
            AnomalyIdentity anomalyIdentity)
        {
            var anomalyIdentities = EnumerableHelper.From(anomalyIdentity);

            var singleImageForAnomalies = await anomalyRepository.GetSingleImageForAnomalies(anomalyIdentities);

            var singleImageForAnomaly = singleImageForAnomalies.First();

            var output = singleImageForAnomaly.ImageFileIdentityWasFound;

            return(output);
        }
        public static async Task <List <(AnomalyIdentity AnomalyIdentity, WasFound <ImageFileIdentity> ImageFileIdentityWasFound)> > GetSingleImageForAnomalies(
            this IAnomalyRepository anomalyRepository,
            IEnumerable <AnomalyIdentity> anomalyIdentities)
        {
            var imageFileIdentityListByAnomalyIdentity = await anomalyRepository.GetImageFilesForAnomalies(anomalyIdentities);

            WasFound <ImageFileIdentity> DetermineIfWasFound(List <ImageFileIdentity> imageFileIdentities)
            {
                var firstOrDefault = imageFileIdentities.FirstOrDefault();

                var wasFound = WasFound.From(firstOrDefault);

                return(wasFound);
            }

            var output = imageFileIdentityListByAnomalyIdentity
                         .Select(x => (x.Key, DetermineIfWasFound(x.Value)))
                         .ToList();

            return(output);
        }