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
{
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
});
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);

View File

@ -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<ExpenseModel>(_gameStateId, expenseModel, false));
expenseModels.Add(new GameStateHandlerItem<ExpenseModel>(_gameStateId, expenseModel));
}
}
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))))
{
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)
@ -92,24 +98,15 @@ namespace GameHandler
if (!newState.Equals(GameState))
{
_gameStateId = Guid.NewGuid();
gameStates.Add(new GameStateHandlerItem<GameState>(_gameStateId, newState with { Id = _gameStateId }, false));
await Save();
var item = new GameStateHandlerItem<GameState>(_gameStateId, newState with { Id = _gameStateId, Counter = gameStates.Count + 1 });
gameStates.Add(item);
await Save(item);
}
}
private async Task Save()
private async Task Save(GameStateHandlerItem<GameState> 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()

View File

@ -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);
}
}
}