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)); }