Beispiel #1
0
        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));
        }
Beispiel #2
0
 private async Task RollbackFileProxyAsync(string key, string oldRecipeJson)
 {
     if (string.IsNullOrEmpty(oldRecipeJson))
     {
         await FileProxy.DeleteAsync(key);
     }
     else
     {
         await FileProxy.PutTextAsync(key, oldRecipeJson);
     }
 }