Merge pull request 'Modify database to persist to JSON' (#54) from fix/recipe-remove into master
continuous-integration/drone/push Build is passing Details

Reviewed-on: ShopNCook/ShopNCook#54
pull/55/head
Maxime BATISTA 2 years ago
commit fdb27b6f2c

@ -5,6 +5,8 @@ using System.Collections.Immutable;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace LocalEndpoint.Data
@ -62,9 +64,11 @@ namespace LocalEndpoint.Data
Save(ACCOUNTS_FILENAME, ACCOUNTS_SERIALIZER, accountsData);
}
public Recipe GetRecipe(Guid id)
public Recipe? GetRecipe(Guid id)
{
return ConvertRecipeDataToRecipe(recipesData[id]);
if (recipesData.TryGetValue(id, out RecipeData? data))
return ConvertRecipeDataToRecipe(data);
return null;
}
public RecipeRate GetRecipeRate(Guid user, Guid recipe)
@ -141,19 +145,16 @@ namespace LocalEndpoint.Data
if (fileInfo.Length == 0)
return new Dictionary<K, V>(); //file is empty thus there is nothing to deserialize
Console.WriteLine(File.ReadAllText(file));
using (var stream = File.OpenRead(file))
return deserializer.ReadObject(stream) as Dictionary<K, V> ?? throw new Exception("object read from " + file + " is not a dictionnary");
string text = File.ReadAllText(file);
return JsonSerializer.Deserialize<Dictionary<K, V>>(text);
}
private void Save<K, T>(string fileName, DataContractSerializer serializer, Dictionary<K, T> dict)
{
using (var stream = File.OpenWrite(dbPath + "/" + fileName))
{
serializer.WriteObject(stream, dict);
stream.Flush();
}
string json = JsonSerializer.Serialize(dict);
File.WriteAllText(dbPath + "/" + fileName, json);
}
}

@ -9,7 +9,7 @@ namespace LocalEndpoint.Data
public interface Database
{
public Recipe GetRecipe(Guid id);
public Recipe? GetRecipe(Guid id);
public RecipeRate GetRecipeRate(Guid user, Guid recipe);

@ -21,7 +21,7 @@ namespace LocalEndpoint
return db.ListAllRecipes().Take(4).ToImmutableList().ConvertAll(v => v.Info);
}
public Recipe GetRecipe(RecipeInfo info)
public Recipe? GetRecipe(RecipeInfo info)
{
return db.GetRecipe(info.Id);
}

@ -8,7 +8,7 @@ namespace Endpoint
{
public ImmutableList<RecipeInfo> PopularRecipes();
public Recipe GetRecipe(RecipeInfo info);
public Recipe? GetRecipe(RecipeInfo info);
public IAccountOwnedRecipes GetRecipesOf(Account account);
public IAccountRecipesPreferences GetPreferencesOf(Account account);

@ -31,7 +31,7 @@ public partial class FavoritesPage : ContentPage
{
RecipeViewLayout.Children.Add(new RecipeView(info, () =>
{
Recipe recipe = service.GetRecipe(info);
Recipe? recipe = service.GetRecipe(info);
Shell.Current.Navigation.PushAsync(new RecipePage(recipe, notifier, preferences, 1));
}));
});

@ -20,8 +20,13 @@ public partial class HomePage : ContentPage
{
layout.Children.Add(new RecipeView(info, () =>
{
Recipe recipe = service.GetRecipe(info);
Recipe? recipe = service.GetRecipe(info);
if (recipe != null)
Shell.Current.Navigation.PushAsync(new RecipePage(recipe, notifier, preferences, 1));
else
{
notifier.Error("Could not find recipe");
}
}));
}

Loading…
Cancel
Save