public IActionResult Synchronize(SyncAccountViewModel syncViewModel) { Dictionary <string, string> syncErrors = new Dictionary <string, string>(); if (repository.TrySyncPositions(syncViewModel, syncErrors)) { return(RedirectToAction("InitializeAccTeam", ACC_MANAGER, new { accountId = CurrentAccount.Id })); } ModelStateDictionary modelState = ModelState; foreach (KeyValuePair <string, string> syncError in syncErrors) { modelState.AddModelError(syncError.Key, syncError.Value); } return(BadRequest(modelState)); }
/// <summary> /// Метод пытается синхронизовать команду по клиенту, и, в случае ошибок, возвращает их /// </summary> /// <param name="syncViewModel"></param> /// <param name="syncErrors"></param> /// <returns></returns> public bool TrySyncPositions(SyncAccountViewModel syncViewModel, Dictionary <string, string> syncErrors) { if (!accountRepository.TryGetItemById(syncViewModel.AccountId, out Account account)) { syncErrors.Add("SyncManagersException", resManager.GetString("SyncManagersException")); return(false); } if (string.IsNullOrEmpty(syncViewModel.PrimaryManagerId) || !Guid.TryParse(syncViewModel.PrimaryManagerId, out Guid primaryManagerId)) { syncErrors.Add("SyncManagersException", resManager.GetString("SyncManagersException")); return(false); } SetUpPrimaryManager(primaryManagerId, account); if (syncViewModel.ManagersToAdd.Count == 0 && syncViewModel.ManagersToRemove.Count == 0) { context.SaveChanges(); return(true); } foreach (string managerToAddId in syncViewModel.ManagersToAdd) { if (!TryAddManagerToTeam(account, managerToAddId, ref syncErrors)) { return(false); } } foreach (string managerToRemoveId in syncViewModel.ManagersToRemove) { if (!TryRemoveManagerFromTeam(account, managerToRemoveId, ref syncErrors)) { return(false); } } context.SaveChanges(); return(true); }