Exemplo n.º 1
0
        public async Task <SubscriptionDate> AskAsync(LastSubscriptionDateForSubscriptionCriterion criterion)
        {
            var subscriptionIdCriterion = new SubscriptionIdCriterion();
            var subscriptionId          = await _queryBuilder.For <long>().WithAsync(subscriptionIdCriterion);

            var repositoryCriterion = new LastSubscriptionDateForSubscriptionRepositoryCriterion(subscriptionId);

            return(await _queryBuilder.For <SubscriptionDate>().WithAsync(repositoryCriterion));
        }
        public async Task <CommandResult> ExecuteAsync(AddToSubscriptionContext commandContext)
        {
            var subscriptionIdCriterion = new SubscriptionIdCriterion();
            var subscriptionId          = await _queryBuilder.For <long>().WithAsync(subscriptionIdCriterion);

            var repoContext = new AddToSubscriptionRepositoryContext(commandContext.ProductId, subscriptionId);

            return(await _commandBuilder.ExecuteAsync(repoContext));
        }
        public async Task <CommandResult> ExecuteAsync(SuspendResumeSubscriptionContext commandContext)
        {
            var today = commandContext.Today;

            var subscriptionIdCriterion = new SubscriptionIdCriterion();
            var subscriptionId          = await _queryBuilder.For <long>().WithAsync(subscriptionIdCriterion);

            var lastSubscriptionDateCriterion = new LastSubscriptionDateForSubscriptionRepositoryCriterion(subscriptionId);
            var lastSubscriptionDate          = await _queryBuilder.For <SubscriptionDate>().WithAsync(lastSubscriptionDateCriterion);

            var newSubscriptionDate = new SubscriptionDate
            {
                Date           = today,
                SubscriptionId = subscriptionId,
            };

            if (lastSubscriptionDate != null)
            {
                var lastSubscriptionDateIsToday = lastSubscriptionDate.Date.Date == today.Date;

                if (lastSubscriptionDateIsToday)
                {
                    var removeSubscriptionDateContext = new RemoveSubcriptionDateRepositoryContext(lastSubscriptionDate);
                    return(await _commandBuilder.ExecuteAsync(removeSubscriptionDateContext));
                }

                newSubscriptionDate.Type = lastSubscriptionDate.Type == SubscriptionDateType.Start
                    ? SubscriptionDateType.Suspend
                    : SubscriptionDateType.Start;
            }
            else
            {
                newSubscriptionDate.Type = SubscriptionDateType.Start;
            }

            var addSubscriptionDateContext = new AddSubcriptionDateRepositoryContext(newSubscriptionDate);

            return(await _commandBuilder.ExecuteAsync(addSubscriptionDateContext));
        }