public SystemDeleteResult Delete(int id) { var system = _itSystemRepository.GetSystem(id); if (system == null) { return(SystemDeleteResult.NotFound); } if (_authorizationContext.AllowDelete(system) == false) { return(SystemDeleteResult.Forbidden); } if (system.Usages.Any()) { return(SystemDeleteResult.InUse); } if (system.Children.Any()) { return(SystemDeleteResult.HasChildren); } if (system.ItInterfaceExhibits.Any()) { return(SystemDeleteResult.HasInterfaceExhibits); } using (var transaction = _transactionManager.Begin(IsolationLevel.Serializable)) { try { var deleteReferenceResult = _referenceService.DeleteBySystemId(system.Id); if (deleteReferenceResult.Ok == false) { _logger.Error($"Failed to delete external references of it system with id: {system.Id}. Service returned a {deleteReferenceResult.Error}"); transaction.Rollback(); return(SystemDeleteResult.UnknownError); } _itSystemRepository.DeleteSystem(system); transaction.Commit(); return(SystemDeleteResult.Ok); } catch (Exception e) { _logger.Error(e, $"Failed to delete it system with id: {system.Id}"); transaction.Rollback(); return(SystemDeleteResult.UnknownError); } } }