public Attempt<OperationResult?> DeleteContainer(int containerId, int userId = Cms.Core.Constants.Security.SuperUserId) { var evtMsgs = EventMessagesFactory.Get(); using (var scope = ScopeProvider.CreateCoreScope()) { var container = _dataTypeContainerRepository.Get(containerId); if (container == null) return OperationResult.Attempt.NoOperation(evtMsgs); // 'container' here does not know about its children, so we need // to get it again from the entity repository, as a light entity var entity = _entityRepository.Get(container.Id); if (entity?.HasChildren ?? false) { scope.Complete(); return Attempt.Fail(new OperationResult(OperationResultType.FailedCannot, evtMsgs)); } var deletingEntityContainerNotification = new EntityContainerDeletingNotification(container, evtMsgs); if (scope.Notifications.PublishCancelable(deletingEntityContainerNotification)) { scope.Complete(); return Attempt.Fail(new OperationResult(OperationResultType.FailedCancelledByEvent, evtMsgs)); } _dataTypeContainerRepository.Delete(container); scope.Notifications.Publish(new EntityContainerDeletedNotification(container, evtMsgs).WithStateFrom(deletingEntityContainerNotification)); scope.Complete(); } // TODO: Audit trail ? return OperationResult.Attempt.Succeed(evtMsgs); }
public Attempt <OperationResult?> DeleteContainer(int containerId, int userId = Constants.Security.SuperUserId) { EventMessages eventMessages = EventMessagesFactory.Get(); using ICoreScope scope = ScopeProvider.CreateCoreScope(); scope.WriteLock(WriteLockIds); // also for containers EntityContainer?container = _containerRepository?.Get(containerId); if (container == null) { return(OperationResult.Attempt.NoOperation(eventMessages)); } // 'container' here does not know about its children, so we need // to get it again from the entity repository, as a light entity IEntitySlim?entity = _entityRepository.Get(container.Id); if (entity?.HasChildren ?? false) { scope.Complete(); return(Attempt.Fail(new OperationResult(OperationResultType.FailedCannot, eventMessages))); } var deletingNotification = new EntityContainerDeletingNotification(container, eventMessages); if (scope.Notifications.PublishCancelable(deletingNotification)) { scope.Complete(); return(Attempt.Fail(new OperationResult(OperationResultType.FailedCancelledByEvent, eventMessages))); } _containerRepository?.Delete(container); scope.Complete(); var deletedNotification = new EntityContainerDeletedNotification(container, eventMessages); deletedNotification.WithStateFrom(deletingNotification); scope.Notifications.Publish(deletedNotification); return(OperationResult.Attempt.Succeed(eventMessages)); // TODO: Audit trail ? }