public async Task <IActionResult> Configure(int?id = null) { ConfigureJobModel model = CreateModel <ConfigureJobModel>(); if (id.HasValue && id > 0) { BackupJob job = await backupJobRepository.Get(id.Value); if (job == null) { return(NotFound()); } var providers = job.Providers.OrderBy(p => p.Order); model.ID = job.ID; model.Name = job.Name; model.CronSchedule = await schedulerService.GetCronSchedule(id.Value); model.BackupProvider = providers.FirstOrDefault().Provider.ID; model.StorageProvider = providers.LastOrDefault().Provider.ID; model.TransformProviders = providers.Where(p => p.Provider.Type == ProviderType.Transform).Select(tp => tp.Provider.ID).ToArray(); model.ProviderInstances = job.Providers.ToDictionary(k => k.Provider.ID, v => v.ID); } return(View(model)); }
public async Task <IActionResult> Configure(ConfigureJobModel model) { // TODO: find out why ModelState is invalid with unvalidated state (probably because of the IEnumerable/Dictionary Providers property) if (ModelState.ErrorCount == 0) { try { int[] providerIDs = model.GetProviderIDs(); List <ProviderInstance> providerInstances = new List <ProviderInstance>(providerIDs.Length); for (int i = 0; i < providerIDs.Length; i++) { Provider provider = await providerRepository.Get(providerIDs[i]); ProviderInstance providerInstance = await providerMappingService.CreateProviderInstance(provider, model.Providers.ElementAt(i)); providerInstance.Order = i; providerInstances.Add(providerInstance); } int jobId = await backupJobRepository.AddOrUpdate(model.ID, model.Name, providerInstances); await schedulerService.CreateOrUpdate(jobId, model.CronSchedule); } catch (Exception ex) { logger.LogError(ex, $"Failed to save job '{model.Name}' to database"); } } return(RedirectToAction("Index")); }