From a82d709abc4baef7e6169da3217d0013d2436719 Mon Sep 17 00:00:00 2001 From: Christian Kauer Date: Fri, 29 Dec 2023 21:08:17 +0100 Subject: [PATCH] dev --- GameData/Model/GameStateDo.cs | 2 +- GameData/Repository/GameRepository.cs | 2 +- GameHandler/GameStateHandler.cs | 37 ++++++++++++--------------- GameModel/GameState.cs | 5 ++-- 4 files changed, 22 insertions(+), 24 deletions(-) diff --git a/GameData/Model/GameStateDo.cs b/GameData/Model/GameStateDo.cs index 9b4aea7..b0bf279 100644 --- a/GameData/Model/GameStateDo.cs +++ b/GameData/Model/GameStateDo.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace GameData.Model { - public record GameStateDo(Guid Id, Guid GameId, string GameName, string GameState) + public record GameStateDo(Guid Id, Guid GameId, string GameName, string GameState, int Counter) { } } diff --git a/GameData/Repository/GameRepository.cs b/GameData/Repository/GameRepository.cs index c5edc6c..ff352f5 100644 --- a/GameData/Repository/GameRepository.cs +++ b/GameData/Repository/GameRepository.cs @@ -37,7 +37,7 @@ namespace GameData.Repository { TypeNameHandling = TypeNameHandling.Auto }); - var gameStateDo = new GameStateDo(gameState.Id, gameState.GameId, gameState.GameName, str); + var gameStateDo = new GameStateDo(gameState.Id, gameState.GameId, gameState.GameName, str, gameState.Counter); var res = await _client.Post(gameStateDo,UrlGameState); diff --git a/GameHandler/GameStateHandler.cs b/GameHandler/GameStateHandler.cs index 218ab5d..a18f21b 100644 --- a/GameHandler/GameStateHandler.cs +++ b/GameHandler/GameStateHandler.cs @@ -14,10 +14,9 @@ namespace GameHandler internal Guid GameStateId; internal bool Saved; internal T Data; - public GameStateHandlerItem(Guid gameStateId, T data, bool saved) + public GameStateHandlerItem(Guid gameStateId, T data) { GameStateId = gameStateId; - Saved = saved; Data = data; } } @@ -70,21 +69,28 @@ namespace GameHandler { if (!expenseModel.Equals(ExpenseModel)) { - expenseModels.Add(new GameStateHandlerItem(_gameStateId, expenseModel, false)); + expenseModels.Add(new GameStateHandlerItem(_gameStateId, expenseModel)); } } else { - expenseModels.Add(new GameStateHandlerItem(_gameStateId, expenseModel, false)); + expenseModels.Add(new GameStateHandlerItem(_gameStateId, expenseModel)); } foreach(var memberExpense in expenseModel.MemberExpenses.Where(_ => !memberExpenses.Any(me => me.Data.Id.Equals(_.Id)))) { - memberExpenses.Add(new GameStateHandlerItem(_gameStateId,memberExpense with { GamestateId = _gameStateId },false)); + var item = new GameStateHandlerItem(_gameStateId, memberExpense with { GamestateId = _gameStateId }); + memberExpenses.Add(item); + await Save(item); } - await Save(); + + } + + private async Task Save(GameStateHandlerItem item) + { + await _expenseRepository.Save(item.Data); } internal async Task Add(GameState newState, Game game) @@ -92,24 +98,15 @@ namespace GameHandler if (!newState.Equals(GameState)) { _gameStateId = Guid.NewGuid(); - gameStates.Add(new GameStateHandlerItem(_gameStateId, newState with { Id = _gameStateId }, false)); - await Save(); + var item = new GameStateHandlerItem(_gameStateId, newState with { Id = _gameStateId, Counter = gameStates.Count + 1 }); + gameStates.Add(item); + await Save(item); } } - private async Task Save() + private async Task Save(GameStateHandlerItem item) { - await Task.WhenAll(gameStates.Where(_ => !_.Saved) - .Select(_ => _gameRepository.Save(_.Data))) - .ContinueWith(_ => { - gameStates.ForEach(gs => { gs.Saved = true; }); - }); - - await Task.WhenAll(memberExpenses.Where(_ => !_.Saved) - .Select(_ => _expenseRepository.Save(_.Data))) - .ContinueWith(_ => { - memberExpenses.ForEach(me => { me.Saved = true; }); - }); + await _gameRepository.Save(item.Data); } public void Undo() diff --git a/GameModel/GameState.cs b/GameModel/GameState.cs index bad0ea9..6b398b1 100644 --- a/GameModel/GameState.cs +++ b/GameModel/GameState.cs @@ -7,11 +7,12 @@ using System.Threading.Tasks; namespace GameModel { - public record GameState(Guid Id, Guid GameId, string GameName, ThrowState ThrowState, int NextPlayerId, IGameModel GameModel) + public record GameState(Guid Id, Guid GameId, string GameName, + ThrowState ThrowState, int NextPlayerId, IGameModel GameModel, int Counter) { public static GameState Create(Guid gameId, string gameName, ThrowState throwState, int nextPlayerId, IGameModel gameModel) { - return new GameState(Guid.NewGuid(), gameId, gameName, throwState, nextPlayerId, gameModel); + return new GameState(Guid.NewGuid(), gameId, gameName, throwState, nextPlayerId, gameModel, 0); } } }