Exemple #1
0
        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);
                }
            }
        }