public async Task <EdgeDefinition> RunAsync() { try { using (var context = this.dataAccess.GetContext()) { var results = await context.NoTracking <DAL.Entities.SearchResult>() .Include(r => r.Query) .Include(r => r.Query.Category) .Include(r => r.Query.Category.User) .Where(r => this.ResultIds.Contains(r.Id)) .ToListAsync(); var query = results.First().Query; var iftttSettings = await context.NoTracking <DAL.Entities.Settings>() .Where(s => s.User.UserId == query.Category.User.UserId && s.EnableIftttNotification) .Select(s => new { s.IftttMakerKey, s.IftttMakerEventName }) .SingleOrDefaultAsync(); if (query.EnableNotifications && !string.IsNullOrWhiteSpace(iftttSettings?.IftttMakerKey) && !string.IsNullOrWhiteSpace(iftttSettings?.IftttMakerEventName)) { var url = $"https://maker.ifttt.com/trigger/{iftttSettings.IftttMakerEventName}/with/key/{iftttSettings.IftttMakerKey}"; var content = new { value1 = new { Name = query.Name, Url = SearchQueryTransformations.EntityToUrl(query) }, value2 = results.Select(result => new { Name = result.Name, Description = result.Description, BidPrice = result.BidPrice, PurchasePrice = result.PurchasePrice, Url = SearchResultTransformations.EntityToUrl(result) }) .ToArray() }; var client = new HttpClient(); var response = await client.PostAsJsonAsync(url, content); } return(this.Next); } } catch (Exception e) { Context.GetCurrentLogger().Error(CLMTIDs.CouldNotTriggerIftttWebhook, e, "Could not trigger IFTTT webhook notification for result ids {ResultIds}!", this.ResultIds); return(this.Next); } }
public async Task <EdgeDefinition> RunAsync() { try { using (var context = this.dataAccess.GetContext()) { var results = await context.NoTracking <DAL.Entities.SearchResult>() .Include(r => r.Query) .Include(r => r.Query.Category) .Include(r => r.Query.Category.User) .Where(r => this.ResultIds.Contains(r.Id)) .ToListAsync(); var query = results.First().Query; var tos = (await context.NoTracking <DAL.Entities.Settings>() .Where(s => s.User.UserId == query.Category.User.UserId && s.EnableEmailNotification) .ToListAsync()) .SelectMany(s => new[] { s.Email, s.AlternativeEmail }) .Where(m => !string.IsNullOrWhiteSpace(m)) .Select(m => new EmailAddress(m)) .ToList(); if (query.EnableNotifications && tos.Count > 0) { var from = new EmailAddress("*****@*****.**"); var subject = $"Catch 'Em All Notification: {query.Name}"; var body = BodyFormatter(new { Name = query.Name, Url = Cirrus.Helpers.WorkflowNameBuilder.ToString(WorkflowIds.SearchQueryByIdWorkflow, new Dictionary <string, object> { { SearchQueryByIdWorkflow.InputQueryId, query.Id }, { SearchQueryByIdWorkflow.InputCanGoBack, false } }), Results = results.Select(r => new { r.Name, r.Description, r.BidPrice, r.PurchasePrice, ExternalUrl = SearchResultTransformations.EntityToUrl(r) }) }); var msg = MailHelper.CreateSingleEmailToMultipleRecipients(from, tos, subject, body, body); var client = new SendGridClient("sendgrid-api-token"); var response = await client.SendEmailAsync(msg); } return(this.Next); } } catch (Exception e) { Context.GetCurrentLogger().Error(CLMTIDs.CouldNotSendEmail, e, "Could not send notification email for result ids {ResultIds}!", this.ResultIds); return(this.Next); } }
protected override async Task <Models.SearchResult> LoadAsync() { using (var context = this.dataAccess.GetContext()) { var entity = await context.Tracking <DAL.Entities.SearchResult>() .Where(e => e.Id == this.Id) .SingleAsync(); entity.New = false; await context.SaveChangesAsync(); var dto = new Models.SearchResult { Id = entity.Id, Name = entity.Name, Description = entity.Description, FinalPrice = entity.FinalPrice, BidPrice = entity.BidPrice, PurchasePrice = entity.PurchasePrice, Ends = entity.Ends, Sold = entity.Sold, Closed = entity.Closed, Favorite = entity.Favorite, ExternalData = new Models.ExternalSearchResultData { Id = entity.Id, ExternalId = entity.ExternalId } }; dto.ExternalData.ExternalUrl = SearchResultTransformations.ModelToUrl(dto); return(dto); } }