public async Task <IActionResult> DeleteById(int id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (!_entityIndex.Exists(ResourceType.Media, id))
            {
                return(NotFound());
            }

            var status = _entityIndex.Status(ResourceType.Media, id).GetValueOrDefault();

            if (!UserPermissions.IsAllowedToDelete(User.Identity, status, _entityIndex.Owner(ResourceType.Media, id)))
            {
                return(Forbid());
            }

            if (!UserPermissions.IsAllowedToDelete(User.Identity, status, _entityIndex.Owner(ResourceType.Media, id)))
            {
                return(BadRequest(ErrorMessages.CannotBeDeleted(ResourceType.Media, id)));
            }

            if (status == ContentStatus.Published)
            {
                return(BadRequest(ErrorMessages.CannotBeDeleted(ResourceType.Media, id)));
            }

            if (_referencesIndex.IsUsed(ResourceType.Media, id))
            {
                return(BadRequest(ErrorMessages.ResourceInUse));
            }

            // Remove file
            var directoryPath = Path.GetDirectoryName(_mediaIndex.GetFilePath(id));

            if (directoryPath != null && Directory.Exists(directoryPath))
            {
                Directory.Delete(directoryPath, true);
            }

            var ev = new MediaDeleted
            {
                Id        = id,
                UserId    = User.Identity.GetUserIdentity(),
                Timestamp = DateTimeOffset.Now
            };

            await _eventStore.AppendEventAsync(ev);

            await InvalidateThumbnailCacheAsync(id);

            return(StatusCode(204));
        }
Example #2
0
        public async Task <IActionResult> DeleteAsync(int id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (!_entityIndex.Exists(ResourceType.Exhibit, id))
            {
                return(NotFound());
            }

            var status = _entityIndex.Status(ResourceType.Exhibit, id).GetValueOrDefault();

            if (!UserPermissions.IsAllowedToDelete(User.Identity, status, _entityIndex.Owner(ResourceType.Exhibit, id)))
            {
                return(BadRequest(ErrorMessages.CannotBeDeleted(ResourceType.Exhibit, id)));
            }

            if (status == ContentStatus.Published)
            {
                return(BadRequest(ErrorMessages.CannotBeDeleted(ResourceType.Exhibit, id)));
            }

            // check if exhibit is in use and can't be deleted (it's in use if and only if it is contained in a route).
            if (_referencesIndex.IsUsed(ResourceType.Exhibit, id))
            {
                return(BadRequest(ErrorMessages.ResourceInUse));
            }

            // remove the exhibit
            var ev = new ExhibitDeleted
            {
                Id        = id,
                UserId    = User.Identity.GetUserIdentity(),
                Timestamp = DateTimeOffset.Now
            };

            await _eventStore.AppendEventAsync(ev);

            return(NoContent());
        }
        public async Task <IActionResult> DeleteAsync(int id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (!_entityIndex.Exists(ResourceType.Route, id))
            {
                return(NotFound());
            }

            var status = _entityIndex.Status(ResourceType.Route, id).GetValueOrDefault();

            if (!UserPermissions.IsAllowedToDelete(User.Identity, status, _entityIndex.Owner(ResourceType.Route, id)))
            {
                return(Forbid());
            }

            if (status == ContentStatus.Published)
            {
                return(BadRequest(ErrorMessages.CannotBeDeleted(ResourceType.Route, id)));
            }

            if (_referencesIndex.IsUsed(ResourceType.Route, id))
            {
                return(BadRequest(ErrorMessages.ResourceInUse));
            }

            // validation passed, emit event
            var ev = new RouteDeleted
            {
                Id        = id,
                UserId    = User.Identity.GetUserIdentity(),
                Timestamp = DateTimeOffset.Now
            };

            await _eventStore.AppendEventAsync(ev);

            return(NoContent());
        }