protected async override Task <RepositoryResponse <bool> > TryDeleteAsync(string id) { if (!await Cache.ExistsAsync(id)) { return(new RepositoryResponse <bool>(error: "Recipe " + id + " does not exist")); } if (!await Cache.TryLockAsync(id)) { return(new RepositoryResponse <bool>(error: "Recipe " + id + " is already being changed")); } try { var oldRecipe = (await FileProxy.GetTextAsync("recipes/" + id)).Text; var key = "recipes/" + id; await FileProxy.DeleteAsync(key); try { await RecipeCache.RemoveAsync(id); } catch (Exception) // Rollback file { await RollbackFileProxyAsync(key, oldRecipe); throw; } } finally { await Cache.UnLockAsync(id); } return(new RepositoryResponse <bool>(response: true)); }
private async Task RollbackFileProxyAsync(string key, string oldRecipeJson) { if (string.IsNullOrEmpty(oldRecipeJson)) { await FileProxy.DeleteAsync(key); } else { await FileProxy.PutTextAsync(key, oldRecipeJson); } }