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