public async Task <IActionResult> RequestVm(Vm newVm) { if (!ModelState.IsValid) { return(BadRequest(ModelState.ToString())); } if (newVm?.Cluster?.Datacenter?.Adapter == null) { return(BadRequest("Неверно заполнены поля")); } #region CheckResponsibles // Проверка на корректность задания ответственных: администратора, менеджера и владельца var responsibles = new List <User>() { newVm.Admin, newVm.Manager, newVm.Owner }; responsibles = responsibles.GroupBy(x => x.Sam).Select(x => x.FirstOrDefault()).ToList(); List <User> users = _authService.GetUsersList(responsibles); if (responsibles.Count != users.Count) { return(BadRequest("Неверно заполнены поля ответственных за ВМ. Пожалуйста, выберите тех, кто есть в списке")); } #endregion Adapter adapter = await _context.Adapters.Where(x => x.IsOK).Include(c => c.Credentials) .Include(p => p.Provider) .Where(a => a.Id == newVm.Cluster.Datacenter.Adapter.Id) .SingleOrDefaultAsync(); var auditDays = (await _context.Audits.SingleOrDefaultAsync(x => x.AdapterId == adapter.Id && x.DatacenterId == newVm.Cluster.Datacenter.Id && x.ClusterId == newVm.Cluster.Id))?.AuditDays; if (auditDays != null) { newVm.AuditDate = DateTime.Now.ToShortDateString(); newVm.Deadline = DateTime.Now.AddDays((double)auditDays).ToShortDateString(); } var user = User.Claims.SingleOrDefault(x => x.Type == ClaimTypes.Name).Value; switch (adapter.Provider.Id) { case (int)ProviderType.Ovirt: ServicesResponse newVmResponse = await VmService.RequestVm(newVm, adapter, newVm.Network.Id, newVm.HddSize, newVm.Cluster.Datacenter.Id); if (!newVmResponse.isSuccess) { return(StatusCode(newVmResponse.errorCode, newVmResponse.errorMessage)); } break; case (int)ProviderType.VMware: var task = await SendVmRequest(adapter, newVm, user); TrackBackendTask(adapter, task); break; } _mailer.NotifyVmRequested(users, newVm); return(CreatedAtAction("RequestVm", newVm)); }