public async Task FindTrips(RailwayMonitoring monitoring) { var monitoringResult = dataContext.RailwayMonitoring.Include(m => m.Trips).FirstOrDefault(m => m.Id == monitoring.Id); if (monitoringResult == null) { RecurringJob.RemoveIfExists(monitoring.Guid); return; } if (monitoringResult.DepartureDate <= DateTime.Now) { RecurringJob.RemoveIfExists(monitoring.Guid); monitoringResult.IsSuccessful = false; monitoringResult.IsInProcess = false; dataContext.Entry(monitoringResult).State = EntityState.Modified; await dataContext.SaveChangesAsync(); return; } var trips = (await tripFinder.FindTripsAsync(monitoringResult.From, monitoringResult.To, monitoringResult.DepartureDate)).ToList().ConvertAll(t => (Train)t) .FindAll(t => t.Types.Any(p => p.Places >= monitoring.MinPlaces)); if (trips.Any()) { if (!string.IsNullOrEmpty(monitoring.PlacesType)) { trips = trips.FindAll(t => t.Types.Any(p => p.Letter == monitoring.PlacesType)); } if (trips.Any()) { monitoringResult.IsSuccessful = true; monitoringResult.IsInProcess = false; monitoringResult.Trips = trips; dataContext.Entry(monitoringResult).State = EntityState.Modified; await dataContext.SaveChangesAsync(); var user = await dataContext.Users.FindAsync(monitoringResult.UserId); if (user.EmailNotificationEnabled) { smtpService.SendRailwayNotification(monitoringResult, user.Email); } if (user.SmsNotificationEnabled) { smsService.SendRailwayNotification(monitoringResult, user.PhoneNumber); } RecurringJob.RemoveIfExists(monitoring.Guid); } } }
public async Task SendRailwayNotification(RailwayMonitoring railwayMonitoring, string email) { var to = new MailAddress(email); var body = await renderer.RenderViewToStringAsync("Templates/RailwayNotificationTemplate.cshtml", railwayMonitoring); var message = new MailMessage(from, to) { Subject = $"{railwayMonitoring.From} - {railwayMonitoring.To}. Поїздки знайдено!", Body = body, IsBodyHtml = true }; SendEmail(message); }
public void SendRailwayNotification(RailwayMonitoring railwayMonitoring, string phoneNumber) { var stringBuilder = new StringBuilder(); stringBuilder.AppendLine($"{railwayMonitoring.From} - {railwayMonitoring.To}. Поїздки знайдено!"); stringBuilder.AppendLine("Потяги"); foreach (var railwayMonitoringTrip in railwayMonitoring.Trips) { stringBuilder.AppendLine( $"{railwayMonitoringTrip.From.StationTrain} - {railwayMonitoringTrip.To.StationTrain}: {railwayMonitoringTrip.DepartureDate}"); } MessageResource.Create( from: new PhoneNumber(smsConfig.Number), to: new PhoneNumber(phoneNumber), body: stringBuilder.ToString(), client: twilioRestClient); }
public async Task StartMonitoring(string from, string to, DateTime departureDate, string placesType, int minPlaces, string userId) { var user = await dataContext.Users.Include(u => u.RailwayMonitoring) .FirstOrDefaultAsync(u => u.Id == userId); var monitoring = new RailwayMonitoring { Guid = Guid.NewGuid().ToString(), DepartureDate = departureDate, From = from, To = to, PlacesType = placesType, MinPlaces = minPlaces, IsInProcess = true }; user.RailwayMonitoring.Add(monitoring); dataContext.Entry(user).State = EntityState.Modified; dataContext.SaveChanges(); RecurringJob.AddOrUpdate <RailwayJob>(monitoring.Guid, j => j.FindTrips(monitoring), hangFireConfig.MonitoringCron); }