diff --git a/GameData/ApiClient.cs b/GameData/ApiClient.cs index 6a4831d..9696ce8 100644 --- a/GameData/ApiClient.cs +++ b/GameData/ApiClient.cs @@ -192,27 +192,25 @@ namespace GameData return res; } - public async Task Delete(object payload, string serviceUrl, bool suppressExceptions = true) + public async Task Delete(object payload, string serviceUrl, bool suppressExceptions = true) { - T res = default; - try { var response = await client.SendAsync(GetHttpRequestMessage(HttpMethod.Delete, serviceUrl, payload)); if (response.IsSuccessStatusCode) { - using (var responseStream = await response.Content.ReadAsStreamAsync()) - { - using (var streamReader = new StreamReader(responseStream)) - { - using (var jsonTextReader = new JsonTextReader(streamReader)) - { - var serializer = new JsonSerializer(); - res = serializer.Deserialize(jsonTextReader); - } - } - } + //using (var responseStream = await response.Content.ReadAsStreamAsync()) + //{ + // using (var streamReader = new StreamReader(responseStream)) + // { + // using (var jsonTextReader = new JsonTextReader(streamReader)) + // { + // var serializer = new JsonSerializer(); + // res = serializer.Deserialize(jsonTextReader); + // } + // } + //} } else { @@ -229,7 +227,7 @@ namespace GameData } } - return res; + //return res; } public async Task Get(string serviceUrl, bool suppressExceptions = false) diff --git a/GameData/Dummy/DummyExpenseRepository.cs b/GameData/Dummy/DummyExpenseRepository.cs index 8611b71..6921bc3 100644 --- a/GameData/Dummy/DummyExpenseRepository.cs +++ b/GameData/Dummy/DummyExpenseRepository.cs @@ -10,6 +10,11 @@ namespace GameData.Dummy } + public Task Delete(IEnumerable enumerable) + { + throw new NotImplementedException(); + } + public IEnumerable GetAll() { return IExpenseRepository.TestData; diff --git a/GameData/Dummy/DummyGameRepository.cs b/GameData/Dummy/DummyGameRepository.cs index 6114cd3..2f972fd 100644 --- a/GameData/Dummy/DummyGameRepository.cs +++ b/GameData/Dummy/DummyGameRepository.cs @@ -47,5 +47,10 @@ namespace GameData.Dummy { throw new NotImplementedException(); } + + public Task Delete(IEnumerable gameStates) + { + throw new NotImplementedException(); + } } } diff --git a/GameData/Repository/ExpenseRepository.cs b/GameData/Repository/ExpenseRepository.cs index c9a599e..2d37b9f 100644 --- a/GameData/Repository/ExpenseRepository.cs +++ b/GameData/Repository/ExpenseRepository.cs @@ -2,6 +2,7 @@ using GameModel.Contract; using GameModel.Settings; using Microsoft.Extensions.Logging; +using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; @@ -36,5 +37,13 @@ namespace GameData.Repository { return await _client.Post(memberExpense, UrlPlayerExpense); } + + public async Task Delete(IEnumerable items) + { + dynamic keys = new JObject(); + keys.keys = items.Select(_ => _.Id).ToArray(); + + await _client.Delete(keys, UrlPlayerExpense); + } } } diff --git a/GameData/Repository/GameRepository.cs b/GameData/Repository/GameRepository.cs index edf8748..2761771 100644 --- a/GameData/Repository/GameRepository.cs +++ b/GameData/Repository/GameRepository.cs @@ -94,5 +94,13 @@ namespace GameData.Repository return await _client.Post(payload, UrlGame); } + + public async Task Delete(IEnumerable gameStates) + { + dynamic keys = new JObject(); + keys.keys = gameStates.Select(_ => _.Id).ToArray(); + + await _client.Delete(keys, UrlGameState); + } } } diff --git a/GameHandler/GameStateHandler.cs b/GameHandler/GameStateHandler.cs index 49a3dc7..fc295a6 100644 --- a/GameHandler/GameStateHandler.cs +++ b/GameHandler/GameStateHandler.cs @@ -1,6 +1,7 @@ using GameModel; using GameModel.Contract; using GameModel.Contracts; +using Microsoft.VisualBasic.FileIO; using System; using System.Collections.Generic; using System.Linq; @@ -31,7 +32,7 @@ namespace GameHandler private List> redoableGameStates = new List>(); private List> redoableExpenseModels = new List>(); - private List> redoableemberExpenses = new List>(); + private List> redoableMeberExpenses = new List>(); private IGameRepository _gameRepository; private IExpenseRepository _expenseRepository; @@ -90,7 +91,22 @@ namespace GameHandler await Save(item); } - + await DeleteRedoableStates(); + } + + private async Task DeleteRedoableStates() + { + if (redoableGameStates.Count > 0) + { + await _gameRepository.Delete(redoableGameStates.Select(_ => _.Data)); + redoableGameStates.Clear(); + } + + if (redoableMeberExpenses.Count > 0) + { + await _expenseRepository.Delete(redoableMeberExpenses.Select(_ => _.Data)); + redoableMeberExpenses.Clear(); + } } private async Task Save(GameStateHandlerItem item) @@ -127,11 +143,11 @@ namespace GameHandler gameStates.AddRange(redoableGameStates.Where(_ => _.GameStateId == redoId)); expenseModels.AddRange(redoableExpenseModels.Where(_ => _.GameStateId == redoId)); - memberExpenses.AddRange(redoableemberExpenses.Where(_ => _.GameStateId == redoId)); + memberExpenses.AddRange(redoableMeberExpenses.Where(_ => _.GameStateId == redoId)); redoableGameStates.RemoveAll(_ => _.GameStateId == redoId); redoableExpenseModels.RemoveAll(_ => _.GameStateId == redoId); - redoableemberExpenses.RemoveAll(_ => _.GameStateId == redoId); + redoableMeberExpenses.RemoveAll(_ => _.GameStateId == redoId); } _gameStateId = gameStates.Last().GameStateId; @@ -147,7 +163,7 @@ namespace GameHandler redoableGameStates.AddRange(gameStates.Where(_ => _.GameStateId == _gameStateId)); redoableExpenseModels.AddRange(expenseModels.Where(_ => _.GameStateId == _gameStateId)); - redoableemberExpenses.AddRange(memberExpenses.Where(_ => _.GameStateId == _gameStateId)); + redoableMeberExpenses.AddRange(memberExpenses.Where(_ => _.GameStateId == _gameStateId)); gameStates.RemoveAll(_ => _.GameStateId == _gameStateId); expenseModels.RemoveAll(_ => _.GameStateId == _gameStateId); diff --git a/GameModel/Contracts/IExpenseRepository.cs b/GameModel/Contracts/IExpenseRepository.cs index 785d89c..a2aabe5 100644 --- a/GameModel/Contracts/IExpenseRepository.cs +++ b/GameModel/Contracts/IExpenseRepository.cs @@ -17,6 +17,7 @@ namespace GameModel.Contract Expense.Create(ExpenseType.Monetary,new[] { ExpenseTrigger.ExpensePoint }, "Strafpunkt, z.B. im \"Scheißspiel\"", 0.5m, false), }; + Task Delete(IEnumerable enumerable); Task> GetAll(); Task Save(PlayerExpense data); } diff --git a/GameModel/Contracts/IGameRepository.cs b/GameModel/Contracts/IGameRepository.cs index 83d7055..126783d 100644 --- a/GameModel/Contracts/IGameRepository.cs +++ b/GameModel/Contracts/IGameRepository.cs @@ -14,5 +14,6 @@ namespace GameModel.Contracts Task LoadGame(Guid gameId); Task Save(GameState gameState); Task Update(Game game); + Task Delete(IEnumerable gameStates); } }