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)); }
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()); }