コード例 #1
0
ファイル: WarmingService.cs プロジェクト: c0d3m0nky/mty
 public WarmingService(OenContext context, IOenRepository oenRepository, IStatsProvider statsProvider)
 {
     _context = context;
     _oenRepository = oenRepository;
     _statsProvider = statsProvider;
 }
コード例 #2
0
ファイル: Discrepancies.cs プロジェクト: c0d3m0nky/mty
        private static Mock<IDiscrepanciesService> CreateFakeService()
        {
            var service = new Mock<IDiscrepanciesService>();
            
            service
                .Setup(x => x.GetMetadataForProviderAsync(It.IsAny<int>()))
                .Returns<int>(async subscriberId =>
                {
                    using (var ctx = new OenContext())
                    {
                        var linkData = await ctx.Lists.FirstOrDefaultAsync(x => x.enabled && (x.clientKey_id == subscriberId) && (x.emailCount > 0));

                        return new WD40.Domain.Engagement.Providers.Metadata
                        {
                            DatabaseName = linkData.dataBaseName,
                            TableName = linkData.tableName
                        };
                    }
                });

            service
                .Setup(x => x.GetNotMailableEngagedItemsAsync(It.IsAny<ProviderType>(), It.IsAny<int>(), It.IsAny<int>()))
                .Returns<ProviderType, int, int>(async (pId, sId, days) =>
                {
                    var result = (new SeedDiscrepancy[] { }).AsEnumerable();

                    using (var ctx = new EngagerContext())
                    {
                        var oldestDateCreated = DateTime.Today.AddDays(-days);
                        var accounts = await (from x in ctx.Accounts 
                                              where x.IsActive && (x.ProviderId == (int)pId) && (x.DateAccountCreated >= oldestDateCreated)
                                              select x).ToArrayAsync();

                        if (accounts.Any())
                        {
                            var metadata = await service.Object.GetMetadataForProviderAsync(sId);

                            using (var subscribersCtx = new SubscribersContext())
                            {
                                subscribersCtx.Database.Connection.ConnectionString += string.Format(";initial catalog={0};", metadata.DatabaseName);
                                var subscribers = subscribersCtx.FromStore(metadata.DatabaseName, metadata.TableName).GetSubscribers(subscribersCtx.AllSubscribersSpecification).Result;

                                if (subscribers.Any())
                                {
                                    result = from x in accounts
                                             join y in subscribers on x.EmailAddress equals y.email.Trim() into all
                                             from r in all.DefaultIfEmpty()
                                             where (r == null) || (r.send == 0)
                                             select SeedDiscrepancy.FromEngager(x, r);
                                }
                            }
                        }

                        return result.AsQueryable();
                    }
                });

            service
                .Setup(x => x.GetNotEngagedMailableItemsAsync(It.IsAny<ProviderType>(), It.IsAny<int>(), It.IsAny<int>()))
                .Returns<ProviderType, int, int>(async (pId, sId, days) =>
                {
                    var result = (new SeedDiscrepancy[] { }).AsEnumerable();
                    var metadata = await service.Object.GetMetadataForProviderAsync(sId);

                    using (var subscribersCtx = new SubscribersContext())
                    {
                        var subscribers = await subscribersCtx.FromStore(metadata.DatabaseName, metadata.TableName).GetSubscribers(subscribersCtx.MailableSubscribersSpecification);

                        if (subscribers.Any())
                        {
                            var oldestDateCreated = DateTime.Today.AddDays(-days);
                            using (var ctx = new EngagerContext())
                            {
                                var accounts = await (from x in ctx.Accounts
                                                      where (x.ProviderId == (int)pId) && (x.DateAccountCreated >= oldestDateCreated)
                                                      select x).ToArrayAsync();

                                result = from x in subscribers
                                         join y in accounts on x.email.Trim() equals y.EmailAddress into all
                                         from r in all.DefaultIfEmpty()
                                         where (r == null) || !r.IsActive
                                         select SeedDiscrepancy.FromWhiteDelivery(r, x);
                            }
                        }

                        return result.AsQueryable();
                    }
                });

            service
                .Setup(x => x.Resolve(It.IsAny<SeedDiscrepancy>()))
                .Returns<SeedDiscrepancy>(async sd =>
                {
                    if (!sd.IsValid)
                    {
                        return SeedDiscrepancyResolution.Failed(sd).WithMessage(SeedDiscrepancy.InvalidDiscrepancyMessage);
                    }
                    
                    var result = SeedDiscrepancyResolution.Failed(sd).WithMessage(SeedDiscrepancy.NotImplementedFeatureMessage);

                    if (sd.IsEngagerDiscrepancy)
                    {
                        using (var subscribersCtx = new SubscribersContext())
                        {
                            var provider = WD40.Domain.Engagement.Providers.Registry.Instance[sd.Account.Value.ProviderId];
                            var metadata = await service.Object.GetMetadataForProviderAsync(provider.SubscriberId);

                            if (!sd.Subscriber.HasValue)
                            {
                                try
                                {
                                    result.Succeeded = await subscribersCtx.FromStore(metadata.DatabaseName, metadata.TableName).AddSubscriber(sd);
                                    result.WithMessage(SeedDiscrepancy.ResolvedMessage);
                                }
                                catch (Exception e)
                                {
                                    result.WithMessage(e.Message);
                                }
                            }
                            else
                            {
                                try
                                {
                                    result.Succeeded = await subscribersCtx.FromStore(metadata.DatabaseName, metadata.TableName).EnableSubscriber(sd);
                                    result.WithMessage(SeedDiscrepancy.ResolvedMessage);
                                }
                                catch (Exception e)
                                {
                                    result.WithMessage(e.Message);
                                }
                            }
                        }
                    }
                    else
                    {
                        if (!sd.Account.HasValue)
                        {
                            // TODO: Add subscriber to Engager
                            throw new NotImplementedException(result.Messages);
                        }
                        else
                        {
                            // TODO: Update account in Engager with active = true
                            throw new NotImplementedException(result.Messages);
                        }
                    }

                    return result;
                });

            return service;
        } 
コード例 #3
0
        private void CheckParameters(SuppressionFilesRequest request, int requesterId, int storeKey, DateTime receivedDate, bool? hashed, string key, out string latestFile)
        {
            using (var ctx = new OenContext())
            using (var repository = new Repository<OenContext>(ctx))
            {
                Logger.Trace("Validating Requester");
                if (!_validator.IsValidRequester(requesterId, _settings.RequesterId))
                {
                    request.ErrorCode = SuppressionFilesRequest.RequestErrorCode.InvalidRequesterId;
                    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, string.Format(InvalidMessageFormat, request.SuppressionFilesRequestId, request.ErrorCode, request.ErrorCode.GetDescription())));
                }

                Logger.Trace("Validating List");
                var list = repository.Retrieve<SuppressionType>().FirstOrDefault(x => x.suptype_id == storeKey);

                if (!_validator.IsValidList(list))
                {
                    request.ErrorCode = SuppressionFilesRequest.RequestErrorCode.InvalidListId;
                    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, string.Format(InvalidMessageFormat, request.SuppressionFilesRequestId, request.ErrorCode, request.ErrorCode.GetDescription())));
                }

                Logger.Trace("Validating Key");
                if (!_validator.IsValidKey(_settings.RequesterId, _settings.SecretKey, list, receivedDate, _settings.AuthorizedRequestsExpirationTimeInHours, key))
                {
                    request.ErrorCode = SuppressionFilesRequest.RequestErrorCode.InvalidKey;
                    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, string.Format(InvalidMessageFormat, request.SuppressionFilesRequestId, request.ErrorCode, request.ErrorCode.GetDescription())));
                }

                var availableFiles = new string []
                {
                    FindLatestSuppressionFile(string.Format(SuppressionFilesRequest.HashedFileNameFormat, list.suptype_id)),
                    FindLatestSuppressionFile(string.Format(SuppressionFilesRequest.FileNameFormat, list.suptype_id))
                };

                latestFile = availableFiles.FirstOrDefault();

                if (hashed.HasValue && !hashed.Value && (availableFiles.LastOrDefault() != null))
                {
                    latestFile = availableFiles.LastOrDefault();
                }

                if (String.IsNullOrWhiteSpace(latestFile))
                {
                    request.ErrorCode = SuppressionFilesRequest.RequestErrorCode.FileNotFound;
                    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, string.Format(InvalidMessageFormat, request.SuppressionFilesRequestId, request.ErrorCode, request.ErrorCode.GetDescription())));
                }
            }
        }