public async Task FindTrips(BlaBlaCarMonitoring monitoring) { var monitoringResult = dataContext.BlaBlaCarMonitoring.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 => (Trip)t) .FindAll(t => t.SeatsLeft >= monitoring.MinPlaces); 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.SendBlaBlaCarNotification(monitoringResult, user.Email); } if (user.SmsNotificationEnabled) { smsService.SendBlaBlaCarNotification(monitoringResult, user.PhoneNumber); } RecurringJob.RemoveIfExists(monitoring.Guid); } }