This commit is contained in:
Christian Kauer 2023-12-29 21:08:17 +01:00
parent dd24bd4871
commit a82d709abc
4 changed files with 22 additions and 24 deletions

View File

@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace GameData.Model 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)
{ {
} }
} }

View File

@ -37,7 +37,7 @@ namespace GameData.Repository
{ {
TypeNameHandling = TypeNameHandling.Auto 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>(gameStateDo,UrlGameState); var res = await _client.Post<GameStateDo>(gameStateDo,UrlGameState);

View File

@ -14,10 +14,9 @@ namespace GameHandler
internal Guid GameStateId; internal Guid GameStateId;
internal bool Saved; internal bool Saved;
internal T Data; internal T Data;
public GameStateHandlerItem(Guid gameStateId, T data, bool saved) public GameStateHandlerItem(Guid gameStateId, T data)
{ {
GameStateId = gameStateId; GameStateId = gameStateId;
Saved = saved;
Data = data; Data = data;
} }
} }
@ -70,21 +69,28 @@ namespace GameHandler
{ {
if (!expenseModel.Equals(ExpenseModel)) if (!expenseModel.Equals(ExpenseModel))
{ {
expenseModels.Add(new GameStateHandlerItem<ExpenseModel>(_gameStateId, expenseModel, false)); expenseModels.Add(new GameStateHandlerItem<ExpenseModel>(_gameStateId, expenseModel));
} }
} }
else else
{ {
expenseModels.Add(new GameStateHandlerItem<ExpenseModel>(_gameStateId, expenseModel, false)); expenseModels.Add(new GameStateHandlerItem<ExpenseModel>(_gameStateId, expenseModel));
} }
foreach(var memberExpense in expenseModel.MemberExpenses.Where(_ => !memberExpenses.Any(me => me.Data.Id.Equals(_.Id)))) foreach(var memberExpense in expenseModel.MemberExpenses.Where(_ => !memberExpenses.Any(me => me.Data.Id.Equals(_.Id))))
{ {
memberExpenses.Add(new GameStateHandlerItem<PlayerExpense>(_gameStateId,memberExpense with { GamestateId = _gameStateId },false)); var item = new GameStateHandlerItem<PlayerExpense>(_gameStateId, memberExpense with { GamestateId = _gameStateId });
memberExpenses.Add(item);
await Save(item);
} }
await Save();
}
private async Task Save(GameStateHandlerItem<PlayerExpense> item)
{
await _expenseRepository.Save(item.Data);
} }
internal async Task Add(GameState newState, Game game) internal async Task Add(GameState newState, Game game)
@ -92,24 +98,15 @@ namespace GameHandler
if (!newState.Equals(GameState)) if (!newState.Equals(GameState))
{ {
_gameStateId = Guid.NewGuid(); _gameStateId = Guid.NewGuid();
gameStates.Add(new GameStateHandlerItem<GameState>(_gameStateId, newState with { Id = _gameStateId }, false)); var item = new GameStateHandlerItem<GameState>(_gameStateId, newState with { Id = _gameStateId, Counter = gameStates.Count + 1 });
await Save(); gameStates.Add(item);
await Save(item);
} }
} }
private async Task Save() private async Task Save(GameStateHandlerItem<GameState> item)
{ {
await Task.WhenAll(gameStates.Where(_ => !_.Saved) await _gameRepository.Save(item.Data);
.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; });
});
} }
public void Undo() public void Undo()

View File

@ -7,11 +7,12 @@ using System.Threading.Tasks;
namespace GameModel 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) 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);
} }
} }
} }