public async Task PaymentSuccess(string tenantId, string tenantName, BillingPeriod billingPeriod, decimal amount, PaymentMethod paymentMethod, string planName) { //TODO: Should billing info be saved in default tenant only, in the tenant's db, or both ? // Retrieve settings for speficified tenant. var settingsList = await _shellSettingsManager.LoadSettingsAsync(); if (settingsList.Any()) { var settings = settingsList.SingleOrDefault(s => string.Equals(s.Name, tenantName, StringComparison.OrdinalIgnoreCase)); var shellScope = await _shellHost.GetScopeAsync(settings); await shellScope.UsingAsync(async scope => { //Check if billing history exists var tenantBillingRepo = scope.ServiceProvider.GetServices <ITenantBillingHistoryRepository>().FirstOrDefault(); var tenantBillingHistory = await tenantBillingRepo.GetTenantBillingDetailsByNameAsync(tenantName); if (tenantBillingHistory == null) { tenantBillingHistory = new TenantBillingDetails(tenantId, tenantName, planName); } if (tenantBillingHistory.IsNewPaymentMethod(paymentMethod)) { tenantBillingHistory.AddNewPaymentMethod(paymentMethod); } tenantBillingHistory.AddMonthlyBill(billingPeriod, PaymentStatus.Success, amount, paymentMethod.CreditCardInfo); await tenantBillingRepo.CreateAsync(tenantBillingHistory); }); } }
public Task CreateAsync(TenantBillingDetails tenantBillingDetails) { var cacheKey = $"{TenantBillingHistoryCacheKey}-{tenantBillingDetails.TenantName}"; _session.Save(tenantBillingDetails); _memoryCache.Set(cacheKey, tenantBillingDetails); return(Task.CompletedTask); }