예제 #1
0
        public async Task EditAsync(int jumpStartId, DateTime dateTime, List <string> distributionGroups,
                                    List <int> articleIds)
        {
            if (articleIds.Count > _jumpStartPlanService.MaximumArticlesPerDayCount)
            {
                throw new InvalidActionException(
                          $"Maximum {_jumpStartPlanService.MaximumArticlesPerDayCount} articles are allowed per email");
            }

            var jumpStart = await GetAsync(jumpStartId);

            var newArticles = await _dbContext.Articles.Where(item => articleIds.Contains(item.Id))
                              .ToListAsync();

            jumpStart.DateTime           = dateTime;
            jumpStart.DistributionGroups = string.Join(',', distributionGroups);
            jumpStart.Articles           = newArticles;
            _dbContext.JumpStarts.Update(jumpStart);

            foreach (var article in newArticles)
            {
                article.JumpStart = jumpStart;
                article.Order     = articleIds.IndexOf(article.Id);
            }

            _dbContext.UpdateRange(newArticles);

            await _dbContext.SaveChangesAsync();
        }
예제 #2
0
        public async Task CreateAsync(DateTime dateTime, List <string> distributionGroups, List <int> postIds)
        {
            var posts = await _dbContext.Posts.Where(item => postIds.Contains(item.Id))
                        .ToListAsync();

            var isValid = posts.All(item => item.Date.Date <= dateTime.Date && item.JumpStartId == null) &&
                          posts.Count == postIds.Count;

            if (!isValid)
            {
                throw new InvalidActionException("Invalid posts");
            }

            var jumpStart = new JumpStart
            {
                DateTime           = dateTime,
                DistributionGroups = string.Join(',', distributionGroups),
                Status             = JumpStartStatus.ReadyToSend,
                Posts = posts
            };

            foreach (var post in posts)
            {
                post.JumpStart = jumpStart;
                post.Order     = postIds.IndexOf(post.Id);
            }

            _dbContext.UpdateRange(posts);

            await _dbContext.SaveChangesAsync();

            _backgroundJobClient.Enqueue <JumpStartPdfService>(service =>
                                                               service.CreatePdfAsync(jumpStart.Id));
        }
예제 #3
0
        public async Task SendAsync()
        {
            var newJumpStarts = await _dbContext.NewJumpStarts
                                .Where(item => item.Status == NewJumpStartStatus.Preview &&
                                       item.DateTime < DateTime.UtcNow.AddMinutes(15)).ToListAsync();

            foreach (var newJumpStart in newJumpStarts)
            {
                newJumpStart.Status = NewJumpStartStatus.Sending;
            }

            _dbContext.UpdateRange(newJumpStarts);
            await _dbContext.SaveChangesAsync();

            foreach (var newJumpStart in newJumpStarts)
            {
                _backgroundJobClient.Enqueue <EmailRecipientJob>(job =>
                                                                 job.CreateForNewJumpStart(newJumpStart.Id));
            }
        }
예제 #4
0
        public async Task SendAsync()
        {
            var jumpStarts = new List <JumpStart>();
            var settings   = await _settingsService.GetValueAsync <VolkswagenSettings>(VolkswagenCompany.Slug);

            var dailyPlans = await _jumpStartPlanService.GetAsync();

            dailyPlans = dailyPlans.Where(item => item.DateTime < DateTime.UtcNow.AddMinutes(15)).ToList();

            foreach (var dailyPlan in dailyPlans)
            {
                var jumpStart = dailyPlan.JumpStart;

                if (jumpStart is null)
                {
                    if (!settings.EnableAutoSend)
                    {
                        // Do not send these articles because admin didn't schedule it and the auto send is off
                        continue;
                    }

                    jumpStart = await CreateJumpStart(dailyPlan.DateTime, dailyPlan.DistributionGroups,
                                                      dailyPlan.Articles);
                }

                jumpStart.Status = JumpStartStatus.Sending;
                jumpStarts.Add(jumpStart);
            }

            _dbContext.UpdateRange(jumpStarts);
            await _dbContext.SaveChangesAsync();

            foreach (var jumpStart in jumpStarts)
            {
                _backgroundJobClient.Enqueue <JumpStartPdfJob>(service =>
                                                               service.CreatePdfAsync(jumpStart.Id));
            }
        }