public void Create(Subscription subscription)
 {
     _subscriptionDbContext.Subscriptions.Add(subscription);
     _subscriptionDbContext.SaveChangesAsync();
     _subscriptionDbContext.SubscriptionJobs.Add(new SubscriptionJob()
     {
         ExecutionDate  = subscription.EndDate,
         IsExecuted     = false,
         SubscriptionId = subscription.Id
     });
     _subscriptionDbContext.Entry(subscription).State = EntityState.Detached;
     _subscriptionDbContext.SaveChangesAsync();
 }
        public void RenewSubscriptions()
        {
            var subscriptionJobsToBeRenewed = _dbContext.SubscriptionJobs
                                              .Where(s => !s.IsExecuted && s.ExecutionDate <= DateTime.Now).ToList();

            foreach (var subscriptionJob in subscriptionJobsToBeRenewed)
            {
                var subscription = _dbContext.Subscriptions.FirstOrDefault(s => s.Id == subscriptionJob.SubscriptionId);

                subscription.StartDate = DateTime.Now;
                subscription.EndDate   = DateTime.Now.AddDays(30);
                _dbContext.Subscriptions.Update(subscription);

                subscriptionJob.IsExecuted = true;
                _dbContext.SubscriptionJobs.Add(new SubscriptionJob()
                {
                    ExecutionDate  = subscription.EndDate,
                    IsExecuted     = false,
                    SubscriptionId = subscription.Id
                });
                _dbContext.SaveChangesAsync();
                _logger.LogInformation($"Subscription with id {subscription.Id} renewed");
            }
        }