src/DataAccess/Services/SubscriptionsRepository.cs (151 lines of code) (raw):

using System; using System.Collections.Generic; using System.Linq; using Marketplace.SaaS.Accelerator.DataAccess.Context; using Marketplace.SaaS.Accelerator.DataAccess.Contracts; using Marketplace.SaaS.Accelerator.DataAccess.Entities; using Microsoft.EntityFrameworkCore; namespace Marketplace.SaaS.Accelerator.DataAccess.Services; /// <summary> /// Subscriptions Repository. /// </summary> /// <seealso cref="ISubscriptionsRepository" /> public class SubscriptionsRepository : ISubscriptionsRepository { /// <summary> /// The context. /// </summary> private readonly SaasKitContext context; /// <summary> /// The disposed. /// </summary> private bool disposed = false; /// <summary> /// Initializes a new instance of the <see cref="SubscriptionsRepository" /> class. /// </summary> /// <param name="context">The this.context.</param> public SubscriptionsRepository(SaasKitContext context) { this.context = context; } /// <summary> /// Adds the specified subscription details. /// </summary> /// <param name="subscriptionDetails">The subscription details.</param> /// <returns> Subscription Detail Id.</returns> public int Save(Subscriptions subscriptionDetails) { var existingSubscriptions = this.context.Subscriptions.Where(s => s.AmpsubscriptionId == subscriptionDetails.AmpsubscriptionId).FirstOrDefault(); if (existingSubscriptions != null) { existingSubscriptions.SubscriptionStatus = subscriptionDetails.SubscriptionStatus; existingSubscriptions.AmpplanId = subscriptionDetails.AmpplanId; existingSubscriptions.Ampquantity = subscriptionDetails.Ampquantity; existingSubscriptions.AmpOfferId = subscriptionDetails.AmpOfferId; existingSubscriptions.Term = subscriptionDetails.Term; existingSubscriptions.StartDate = subscriptionDetails.StartDate; existingSubscriptions.EndDate = subscriptionDetails.EndDate; this.context.Subscriptions.Update(existingSubscriptions); this.context.SaveChanges(); return existingSubscriptions.Id; } else { this.context.Subscriptions.Add(subscriptionDetails); } this.context.SaveChanges(); return subscriptionDetails.Id; } /// <summary> /// Adds the specified subscription details. /// </summary> /// <param name="subscriptionId">The subscription identifier.</param> /// <param name="subscriptionStatus">The subscription status.</param> /// <param name="isActive">if set to <c>true</c> [is active].</param> public void UpdateStatusForSubscription(Guid subscriptionId, string subscriptionStatus, bool isActive) { var existingSubscription = this.context.Subscriptions.Where(s => s.AmpsubscriptionId == subscriptionId).FirstOrDefault(); if (existingSubscription != null) { existingSubscription.IsActive = isActive; existingSubscription.SubscriptionStatus = subscriptionStatus; this.context.Subscriptions.Update(existingSubscription); } this.context.SaveChanges(); } /// <summary> /// Updates the plan for subscription. /// </summary> /// <param name="subscriptionId">The subscription identifier.</param> /// <param name="planId">The plan identifier.</param> public void UpdatePlanForSubscription(Guid subscriptionId, string planId) { var existingSubscription = this.context.Subscriptions.Where(s => s.AmpsubscriptionId == subscriptionId).FirstOrDefault(); if (existingSubscription != null) { existingSubscription.AmpplanId = planId; this.context.Subscriptions.Update(existingSubscription); } this.context.SaveChanges(); } /// <summary> /// Updates the Quantity for subscription. /// </summary> /// <param name="subscriptionId">The subscription identifier.</param> /// <param name="quantity">The Quantity.</param> public void UpdateQuantityForSubscription(Guid subscriptionId, int quantity) { var existingSubscription = this.context.Subscriptions.Where(s => s.AmpsubscriptionId == subscriptionId).FirstOrDefault(); if (existingSubscription != null) { existingSubscription.Ampquantity = quantity; this.context.Subscriptions.Update(existingSubscription); } this.context.SaveChanges(); } /// <summary> /// Gets this instance. /// </summary> /// <returns> Subscriptions.</returns> public IEnumerable<Subscriptions> Get() { return this.context.Subscriptions.Include(s => s.User).OrderByDescending(s => s.CreateDate); } /// <summary> /// Gets the specified identifier. /// </summary> /// <param name="id">The identifier.</param> /// <returns> Subscriptions.</returns> public Subscriptions Get(int id) { return this.context.Subscriptions.Where(s => s.Id == id).FirstOrDefault(); } /// <summary> /// Gets the subscriptions by email address. /// </summary> /// <param name="partnerEmailAddress">The partner email address.</param> /// <param name="subscriptionId">The subscription identifier.</param> /// <param name="isIncludeDeactvated">if set to <c>true</c> [is include deactvated].</param> /// <returns> List of Subscriptions.</returns> public IEnumerable<Subscriptions> GetSubscriptionsByEmailAddress(string partnerEmailAddress, Guid subscriptionId, bool isIncludeDeactvated = false) { if (subscriptionId != default) { return this.context.Subscriptions.Include(s => s.User).Where(s => s.User != null && s.User.EmailAddress == partnerEmailAddress && s.AmpsubscriptionId == subscriptionId); } else { return this.context.Subscriptions.Include(s => s.User).Where(s => s.User != null && s.User.EmailAddress == partnerEmailAddress); } } /// <summary> /// Gets the subscriptions by ScheduleId. /// </summary> /// <param name="subscriptionId">The subscription identifier.</param> /// <param name="isIncludeDeactvated">if set to <c>true</c> [is include deactvated].</param> /// <returns> Subscriptions.</returns> public Subscriptions GetById(Guid subscriptionId, bool isIncludeDeactvated = false) { if (subscriptionId != default) { return this.context.Subscriptions.Include(s => s.User).Where(s => s.AmpsubscriptionId == subscriptionId).FirstOrDefault(); } return null; } /// <summary> /// Gets the subscriptions by ScheduleId. /// </summary> /// <param name="subscriptionId">The subscription identifier.</param> /// <param name="planId">The plan identifier.</param> /// <returns> /// List of Subscription Parameters. /// </returns> public List<SubscriptionParametersOutput> GetSubscriptionsParametersById(Guid subscriptionId, Guid planId) { if (subscriptionId != default) { var subscriptionParameters = this.context.SubscriptionParametersOutput.FromSqlRaw("dbo.spGetSubscriptionParameters {0},{1}", subscriptionId, planId).ToList(); return subscriptionParameters.ToList(); } return new List<SubscriptionParametersOutput>(); } /// <summary> /// Updates the plan for subscription. /// </summary> /// <param name="subscriptionParametersOutput">The subscription parameters output.</param> public void AddSubscriptionParameters(SubscriptionParametersOutput subscriptionParametersOutput) { var existingSubscriptionparameter = this.context.SubscriptionAttributeValues.Where(s => s.Id == subscriptionParametersOutput.Id).FirstOrDefault(); if (existingSubscriptionparameter != null) { existingSubscriptionparameter.OfferId = subscriptionParametersOutput.OfferId; this.context.SubscriptionAttributeValues.Update(existingSubscriptionparameter); this.context.SaveChanges(); } else { SubscriptionAttributeValues newAttributeValue = new SubscriptionAttributeValues(); newAttributeValue.OfferId = subscriptionParametersOutput.OfferId; newAttributeValue.PlanAttributeId = subscriptionParametersOutput.PlanAttributeId; newAttributeValue.Value = subscriptionParametersOutput.Value; newAttributeValue.SubscriptionId = subscriptionParametersOutput.SubscriptionId; newAttributeValue.CreateDate = subscriptionParametersOutput.CreateDate; newAttributeValue.UserId = subscriptionParametersOutput.UserId; newAttributeValue.PlanId = subscriptionParametersOutput.PlanId; this.context.SubscriptionAttributeValues.Add(newAttributeValue); this.context.SaveChanges(); } } /// <summary> /// Removes the specified entity. /// </summary> /// <param name="entity">The entity.</param> public void Remove(Subscriptions entity) { this.context.Subscriptions.Remove(entity); this.context.SaveChanges(); } /// <summary> /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// </summary> public void Dispose() { this.Dispose(true); GC.SuppressFinalize(this); } /// <summary> /// Releases unmanaged and - optionally - managed resources. /// </summary> /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> protected virtual void Dispose(bool disposing) { if (!this.disposed) { if (disposing) { this.context.Dispose(); } } this.disposed = true; } }