121 lines
3.4 KiB
C#
121 lines
3.4 KiB
C#
using GameModel;
|
|
using GameModel.Contract;
|
|
using GameModel.Contracts;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace GameHandler
|
|
{
|
|
class GameStateHandlerItem<T>
|
|
{
|
|
internal Guid GameStateId;
|
|
internal bool Saved;
|
|
internal T Data;
|
|
public GameStateHandlerItem(Guid gameStateId, T data, bool saved)
|
|
{
|
|
GameStateId = gameStateId;
|
|
Saved = saved;
|
|
Data = data;
|
|
}
|
|
}
|
|
|
|
public class GameStateHandler
|
|
{
|
|
private Guid _gameStateId;
|
|
private List<GameStateHandlerItem<GameState>> gameStates = new List<GameStateHandlerItem<GameState>>();
|
|
private List<GameStateHandlerItem<ExpenseModel>> expenseModels = new List<GameStateHandlerItem<ExpenseModel>>();
|
|
private List<GameStateHandlerItem<MemberExpense>> memberExpenses = new List<GameStateHandlerItem<MemberExpense>>();
|
|
|
|
private IGameRepository _gameRepository;
|
|
private IExpenseRepository _expenseRepository;
|
|
|
|
public GameStateHandler(IGameRepository gameRepository, IExpenseRepository expenseRepository)
|
|
{
|
|
_gameRepository = gameRepository;
|
|
_expenseRepository = expenseRepository;
|
|
}
|
|
|
|
public ExpenseModel ExpenseModel
|
|
{
|
|
get
|
|
{
|
|
var res = expenseModels.LastOrDefault();
|
|
if (res != null)
|
|
{
|
|
return res.Data;
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public GameState GameState
|
|
{
|
|
get
|
|
{
|
|
var res = gameStates.LastOrDefault();
|
|
if (res != null)
|
|
{
|
|
return res.Data;
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|
|
internal void Add(ExpenseModel expenseModel)
|
|
{
|
|
if (ExpenseModel != null)
|
|
{
|
|
if (!expenseModel.Equals(ExpenseModel))
|
|
{
|
|
expenseModels.Add(new GameStateHandlerItem<ExpenseModel>(_gameStateId, expenseModel, false));
|
|
Save();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
expenseModels.Add(new GameStateHandlerItem<ExpenseModel>(_gameStateId, expenseModel, false));
|
|
Save();
|
|
}
|
|
|
|
|
|
foreach(var memberExpense in expenseModel.MemberExpenses.Where(_ => memberExpenses.Any(me => me.Data.Id.Equals(_.Id))))
|
|
{
|
|
memberExpenses.Add(new GameStateHandlerItem<MemberExpense>(_gameStateId,memberExpense,false));
|
|
}
|
|
}
|
|
|
|
internal void Add(GameState newState)
|
|
{
|
|
if (!newState.Equals(GameState))
|
|
{
|
|
_gameStateId = Guid.NewGuid();
|
|
gameStates.Add(new GameStateHandlerItem<GameState>(_gameStateId, newState, false));
|
|
Save();
|
|
}
|
|
}
|
|
|
|
private void Save()
|
|
{
|
|
foreach (var item in gameStates.Where(_ => !_.Saved))
|
|
{
|
|
_gameRepository.Save(item.Data);
|
|
item.Saved = true;
|
|
}
|
|
|
|
foreach (var item in memberExpenses)
|
|
{
|
|
_expenseRepository.Save(item.Data);
|
|
item.Saved = true;
|
|
}
|
|
}
|
|
|
|
public void Undo()
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|