dev
This commit is contained in:
parent
a373efefbd
commit
e8ecac57c1
|
|
@ -1,4 +1,5 @@
|
|||
using GameData.Model;
|
||||
using GameData.Helper;
|
||||
using GameData.Model;
|
||||
using GameData.Repository;
|
||||
using GameModel.Settings;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
|
@ -84,7 +85,7 @@ namespace GameData
|
|||
StringContent content = null;
|
||||
if (payload != null)
|
||||
{
|
||||
var payloadString = JsonConvert.SerializeObject(payload);
|
||||
var payloadString = LowercaseJsonSerializer.SerializeObject(payload);
|
||||
content = new StringContent(payloadString, Encoding.UTF8, "application/json");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,12 +15,12 @@ namespace GameData.Dummy
|
|||
return IExpenseRepository.TestData;
|
||||
}
|
||||
|
||||
public void Save(MemberExpense data)
|
||||
public void Save(PlayerExpense data)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
Task IExpenseRepository.Save(MemberExpense data)
|
||||
Task<PlayerExpense> IExpenseRepository.Save(PlayerExpense data)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
using Newtonsoft.Json.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace GameData.Helper
|
||||
{
|
||||
public class LowercaseJsonSerializer
|
||||
{
|
||||
private static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
|
||||
{
|
||||
ContractResolver = new LowercaseContractResolver()
|
||||
};
|
||||
|
||||
public static string SerializeObject(object o)
|
||||
{
|
||||
return JsonConvert.SerializeObject(o, Formatting.Indented, Settings);
|
||||
}
|
||||
|
||||
public class LowercaseContractResolver : DefaultContractResolver
|
||||
{
|
||||
protected override string ResolvePropertyName(string propertyName)
|
||||
{
|
||||
return propertyName.ToLower();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -15,8 +15,9 @@ namespace GameData.Repository
|
|||
readonly ILogger<ExpenseRepository> _log;
|
||||
private ApiClient _client;
|
||||
|
||||
string Url => "items/expense";
|
||||
List<MemberExpense> _memberExpenses = new List<MemberExpense>();
|
||||
string UrlExpense => "items/expense";
|
||||
string UrlPlayerExpense => "items/playerexpense";
|
||||
List<PlayerExpense> _memberExpenses = new List<PlayerExpense>();
|
||||
|
||||
public ExpenseRepository(ILogger<ExpenseRepository> log, ApiClient apiClient)
|
||||
{
|
||||
|
|
@ -28,12 +29,12 @@ namespace GameData.Repository
|
|||
|
||||
public IEnumerable<Expense> GetAll()
|
||||
{
|
||||
return _client.Get<Expense>(Url);
|
||||
return _client.Get<Expense>(UrlExpense).ToList();
|
||||
}
|
||||
|
||||
public async Task Save(MemberExpense memberExpense)
|
||||
public async Task<PlayerExpense> Save(PlayerExpense memberExpense)
|
||||
{
|
||||
_memberExpenses.Add(memberExpense);
|
||||
return await _client.Post<PlayerExpense>(memberExpense, UrlPlayerExpense);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
using GameModel;
|
||||
using GameHandler.UnitTests.Mocks;
|
||||
using GameModel;
|
||||
using GameModel.Exceptions;
|
||||
using GameModel.Mocks;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using GameHandler.Extensions;
|
||||
using GameModel;
|
||||
using GameModel.Mocks;
|
||||
using NUnit.Framework.Legacy;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
using Autofac;
|
||||
using GameHandler.DeathGame;
|
||||
using GameHandler.UnitTests.Mocks;
|
||||
using GameModel;
|
||||
using GameModel.Contract;
|
||||
using GameModel.Contracts;
|
||||
using GameModel.Exceptions;
|
||||
using GameModel.Mocks;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
|
@ -22,7 +23,8 @@ namespace GameHandler.UnitTests
|
|||
{
|
||||
|
||||
var builder = new ContainerBuilder();
|
||||
builder.RegisterType<FakeExpenseRepository>().As<IExpenseRepository>();
|
||||
builder.RegisterType<FakeExpenseRepository>().As<IExpenseRepository>();
|
||||
builder.RegisterType<FakeGameRepository>().As<IGameRepository>();
|
||||
service = new GameService(builder.Build());
|
||||
}
|
||||
|
||||
|
|
@ -55,13 +57,13 @@ namespace GameHandler.UnitTests
|
|||
}
|
||||
|
||||
[Test]
|
||||
public void HandleThrow_UpdatesTheBoardState()
|
||||
public async Task HandleThrow_UpdatesTheBoardState()
|
||||
{
|
||||
var ts1 = service.Start(DeathGameHandler.GAMENAME_DEATHBOX);
|
||||
var ts1 = await service.Start(DeathGameHandler.GAMENAME_DEATHBOX);
|
||||
var bs1 = ts1.ThrowState.BoardState;
|
||||
|
||||
var pinThrow = PinThrow.Create(1,PinPicture.Create(1,PinState.Down), false, false);
|
||||
var ts2 = service.HandleThrow(pinThrow);
|
||||
var ts2 = await service.HandleThrow(pinThrow);
|
||||
var bs2 = ts2.ThrowState.BoardState;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
using GameModel.Contract;
|
||||
using GameModel;
|
||||
using GameModel.Contract;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace GameModel.Mocks
|
||||
namespace GameHandler.UnitTests.Mocks
|
||||
{
|
||||
public class FakeExpenseRepository : IExpenseRepository
|
||||
{
|
||||
|
|
@ -15,5 +16,10 @@ namespace GameModel.Mocks
|
|||
{
|
||||
return IExpenseRepository.TestData;
|
||||
}
|
||||
|
||||
public Task<PlayerExpense> Save(PlayerExpense data)
|
||||
{
|
||||
return Task.FromResult(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
using GameModel;
|
||||
using GameModel.Contracts;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace GameHandler.UnitTests.Mocks
|
||||
{
|
||||
internal class FakeGameRepository : IGameRepository
|
||||
{
|
||||
public Task<Game> Create(Game game)
|
||||
{
|
||||
return Task.FromResult(Game.Create());
|
||||
}
|
||||
|
||||
public GameState Load(Guid gameId)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task Save(GameState gameState)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public Task Update(Game game)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -30,7 +30,7 @@ namespace GameHandler
|
|||
throw new InvalidPinThrowException($"Player {gameExenseEventArgs.PlayerId} not found");
|
||||
}
|
||||
|
||||
List<MemberExpense> memberExpenses = PrepareResult(ref expenseModelToAppend);
|
||||
List<PlayerExpense> memberExpenses = PrepareResult(ref expenseModelToAppend);
|
||||
var triggers = gameExenseEventArgs.Triggers;
|
||||
|
||||
AssignExpenses(gameExenseEventArgs.PlayerId, gameExenseEventArgs.PlayerIds, memberExpenses, triggers);
|
||||
|
|
@ -38,7 +38,7 @@ namespace GameHandler
|
|||
return expenseModelToAppend with { MemberExpenses = memberExpenses.ToArray() };
|
||||
}
|
||||
|
||||
private void AssignExpenses(int playerId, int[] playerIds, List<MemberExpense> memberExpenses, ExpenseTrigger[] triggers)
|
||||
private void AssignExpenses(int playerId, int[] playerIds, List<PlayerExpense> memberExpenses, ExpenseTrigger[] triggers)
|
||||
{
|
||||
var destExpenses = _expenseRepository.GetAll().Where(_ => _.ExpenseTriggers.Any(et => triggers.Any(et2 => et2 == et)));
|
||||
|
||||
|
|
@ -49,12 +49,12 @@ namespace GameHandler
|
|||
{
|
||||
foreach (var player in inversePlayers)
|
||||
{
|
||||
memberExpenses.Add(MemberExpense.Create(player, expense));
|
||||
memberExpenses.Add(PlayerExpense.Create(player, expense));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
memberExpenses.Add(MemberExpense.Create(playerId, expense));
|
||||
memberExpenses.Add(PlayerExpense.Create(playerId, expense));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -66,7 +66,7 @@ namespace GameHandler
|
|||
throw new InvalidPinThrowException($"Player {pinThrow.PlayerId} not found");
|
||||
}
|
||||
|
||||
List<MemberExpense> memberExpenses = PrepareResult(ref expenseModelToAppend);
|
||||
List<PlayerExpense> memberExpenses = PrepareResult(ref expenseModelToAppend);
|
||||
|
||||
var triggers = pinThrow.GetExpenseTriggers(currentState);
|
||||
AssignExpenses(pinThrow.PlayerId, PlayerIds, memberExpenses, triggers);
|
||||
|
|
@ -74,13 +74,13 @@ namespace GameHandler
|
|||
return expenseModelToAppend with { MemberExpenses = memberExpenses.ToArray() };
|
||||
}
|
||||
|
||||
private static List<MemberExpense> PrepareResult(ref ExpenseModel expenseModelToAppend)
|
||||
private static List<PlayerExpense> PrepareResult(ref ExpenseModel expenseModelToAppend)
|
||||
{
|
||||
if (expenseModelToAppend == null)
|
||||
{
|
||||
expenseModelToAppend = new ExpenseModel(Array.Empty<MemberExpense>());
|
||||
expenseModelToAppend = new ExpenseModel(Array.Empty<PlayerExpense>());
|
||||
}
|
||||
var memberExpenses = new List<MemberExpense>(expenseModelToAppend.MemberExpenses);
|
||||
var memberExpenses = new List<PlayerExpense>(expenseModelToAppend.MemberExpenses);
|
||||
return memberExpenses;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ namespace GameHandler
|
|||
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 List<GameStateHandlerItem<PlayerExpense>> memberExpenses = new List<GameStateHandlerItem<PlayerExpense>>();
|
||||
|
||||
private IGameRepository _gameRepository;
|
||||
private IExpenseRepository _expenseRepository;
|
||||
|
|
@ -71,20 +71,20 @@ namespace GameHandler
|
|||
if (!expenseModel.Equals(ExpenseModel))
|
||||
{
|
||||
expenseModels.Add(new GameStateHandlerItem<ExpenseModel>(_gameStateId, expenseModel, false));
|
||||
await Save();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
expenseModels.Add(new GameStateHandlerItem<ExpenseModel>(_gameStateId, expenseModel, false));
|
||||
await Save();
|
||||
}
|
||||
|
||||
|
||||
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<MemberExpense>(_gameStateId,memberExpense,false));
|
||||
memberExpenses.Add(new GameStateHandlerItem<PlayerExpense>(_gameStateId,memberExpense with { GamestateId = _gameStateId },false));
|
||||
}
|
||||
|
||||
await Save();
|
||||
}
|
||||
|
||||
internal async Task Add(GameState newState, Game game)
|
||||
|
|
@ -92,7 +92,7 @@ namespace GameHandler
|
|||
if (!newState.Equals(GameState))
|
||||
{
|
||||
_gameStateId = Guid.NewGuid();
|
||||
gameStates.Add(new GameStateHandlerItem<GameState>(_gameStateId, newState, false));
|
||||
gameStates.Add(new GameStateHandlerItem<GameState>(_gameStateId, newState with { Id = _gameStateId }, false));
|
||||
await Save();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,6 @@ namespace GameModel.Contract
|
|||
};
|
||||
|
||||
IEnumerable<Expense> GetAll();
|
||||
Task Save(MemberExpense data);
|
||||
Task<PlayerExpense> Save(PlayerExpense data);
|
||||
}
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@ using System.Threading.Tasks;
|
|||
|
||||
namespace GameModel
|
||||
{
|
||||
public record ExpenseModel(MemberExpense[] MemberExpenses)
|
||||
public record ExpenseModel(PlayerExpense[] MemberExpenses)
|
||||
{
|
||||
public virtual bool Equals(ExpenseModel other)
|
||||
{
|
||||
|
|
@ -19,7 +19,7 @@ namespace GameModel
|
|||
|
||||
public static ExpenseModel Create()
|
||||
{
|
||||
return new ExpenseModel(Array.Empty<MemberExpense>());
|
||||
return new ExpenseModel(Array.Empty<PlayerExpense>());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,16 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace GameModel
|
||||
{
|
||||
public record MemberExpense(Guid Id, int MemberId, Guid ExpenseId, ExpenseType ExpenseType, DateTime Created, decimal Price, string Name)
|
||||
{
|
||||
public static MemberExpense Create(int MemberId, Expense Expense)
|
||||
{
|
||||
return new MemberExpense(Guid.NewGuid(), MemberId, Expense.Id, Expense.ExpenseType, DateTime.Now, Expense.Price, Expense.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace GameModel
|
||||
{
|
||||
public record PlayerExpense(Guid Id, int PlayerId, Guid ExpenseId, ExpenseType ExpenseType,
|
||||
DateTime Created, decimal Price, string Name, Guid GamestateId)
|
||||
{
|
||||
public static PlayerExpense Create(int playerId, Expense expense)
|
||||
{
|
||||
return new PlayerExpense(Guid.NewGuid(), playerId, expense.Id, expense.ExpenseType,
|
||||
DateTime.Now, expense.Price, expense.Name, Guid.Empty);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue