diff --git a/src/LittleTown.Core.Tests/BoardTesting.cs b/src/LittleTown.Core.Tests/BoardTesting.cs index 22f486d..0062ea7 100644 --- a/src/LittleTown.Core.Tests/BoardTesting.cs +++ b/src/LittleTown.Core.Tests/BoardTesting.cs @@ -1,5 +1,5 @@ -using System.Text.Json; using LittleTown.Core.Enums; +using LittleTown.StaticDataAcces; namespace LittleTown.Core.Tests; @@ -10,9 +10,8 @@ public class BoardTesting public BoardTesting() { - string path = Path.Combine(Environment.CurrentDirectory, "../../../../LittleTown.Core/Data/Board1.json"); - string data = System.IO.File.ReadAllText(path); - _board = JsonSerializer.Deserialize(data) ?? throw new JsonException("Cannot deserialize Board"); + StaticDataGetter getter = new StaticDataGetter(); + _board = getter.GetBoard(1); } [Fact] diff --git a/src/LittleTown.Core.Tests/BuildingTesting.cs b/src/LittleTown.Core.Tests/BuildingTesting.cs new file mode 100644 index 0000000..cf7806b --- /dev/null +++ b/src/LittleTown.Core.Tests/BuildingTesting.cs @@ -0,0 +1,26 @@ + +using LittleTown.StaticDataAcces; + +namespace LittleTown.Core.Tests; + +public class BuildingTesting +{ + List _buildings; + + public BuildingTesting() + { + StaticDataGetter getter = new StaticDataGetter(); + _buildings = getter.GetBuildings(); + } + + [Fact] + public void TestCosts() + { + Building? b = _buildings.FirstOrDefault(b => b.Name.Equals("Atelier")); + Assert.Equal(2, b.Price[Enums.ResourceType.Rock]); + + b = _buildings.FirstOrDefault(b => b.Name == "Bar"); + Assert.Equal(2, b.Price[Enums.ResourceType.Cereal]); + Assert.Equal(2, b.Price[Enums.ResourceType.Rock]); + } +} \ No newline at end of file diff --git a/src/LittleTown.Core.Tests/LittleTown.Core.Tests.csproj b/src/LittleTown.Core.Tests/LittleTown.Core.Tests.csproj index 12e64a7..eea66cf 100644 --- a/src/LittleTown.Core.Tests/LittleTown.Core.Tests.csproj +++ b/src/LittleTown.Core.Tests/LittleTown.Core.Tests.csproj @@ -24,6 +24,7 @@ + diff --git a/src/LittleTown.Core/Building.cs b/src/LittleTown.Core/Building.cs new file mode 100644 index 0000000..685d1e8 --- /dev/null +++ b/src/LittleTown.Core/Building.cs @@ -0,0 +1,10 @@ +using LittleTown.Core.Enums; + +public class Building +{ + /// le nom du batiment (attention, c'est une clé de conversion) + public string Name { get; init; } + + /// Le cout a payer pour construire ce batiment + public IReadOnlyDictionary Price { get; init; } = new Dictionary(); +} \ No newline at end of file diff --git a/src/LittleTown.Core/PortInterfaces/IStaticDataGetter.cs b/src/LittleTown.Core/PortInterfaces/IStaticDataGetter.cs new file mode 100644 index 0000000..4f1800e --- /dev/null +++ b/src/LittleTown.Core/PortInterfaces/IStaticDataGetter.cs @@ -0,0 +1,16 @@ +namespace LittleTown.Core.Ports; + +/// +/// Interface d'un port permettan de récupérer les données statique du jeu +/// +public interface IStaticDataGetter +{ + /// Recuperer un plateau de jeu + /// la version du plateau (1 ou 2) + /// une instance du plateau avec les données statique + public Board GetBoard(int version); + + /// Recupérer la liste des batiments et leurs données statiques + /// + public List GetBuildings(); +} \ No newline at end of file diff --git a/src/LittleTown.Core/Data/Board1.json b/src/LittleTown.StaticDataAccess/Data/Board1.json similarity index 100% rename from src/LittleTown.Core/Data/Board1.json rename to src/LittleTown.StaticDataAccess/Data/Board1.json diff --git a/src/LittleTown.StaticDataAccess/Data/Buildings.json b/src/LittleTown.StaticDataAccess/Data/Buildings.json new file mode 100644 index 0000000..8b60c5f --- /dev/null +++ b/src/LittleTown.StaticDataAccess/Data/Buildings.json @@ -0,0 +1,15 @@ +[ + { + "Name": "Atelier", + "Price": { + "Rock": 2 + } + }, + { + "Name": "Bar", + "Price": { + "Rock": 2, + "Cereal": 2 + } + } +] \ No newline at end of file diff --git a/src/LittleTown.StaticDataAccess/LittleTown.StaticDataAccess.csproj b/src/LittleTown.StaticDataAccess/LittleTown.StaticDataAccess.csproj new file mode 100644 index 0000000..1c92177 --- /dev/null +++ b/src/LittleTown.StaticDataAccess/LittleTown.StaticDataAccess.csproj @@ -0,0 +1,18 @@ + + + + net8.0 + enable + enable + true + true + true + true + All + + + + + + + diff --git a/src/LittleTown.StaticDataAccess/StaticDataGetter.cs b/src/LittleTown.StaticDataAccess/StaticDataGetter.cs new file mode 100644 index 0000000..9b66adc --- /dev/null +++ b/src/LittleTown.StaticDataAccess/StaticDataGetter.cs @@ -0,0 +1,32 @@ +using System.Text.Json; +using LittleTown.Core; +using LittleTown.Core.Ports; + +namespace LittleTown.StaticDataAcces; + +/// +/// Implementation du getter de données static en fichier local +/// +public class StaticDataGetter : IStaticDataGetter +{ + + /// + public Board GetBoard(int version) + { + + string path = Path.Combine(Environment.CurrentDirectory, "../../../../LittleTown.StaticDataAccess/Data/Board1.json"); + string data = File.ReadAllText(path); + Board board = JsonSerializer.Deserialize(data) ?? throw new JsonException("Cannot deserialize Board"); + return board; + } + + /// + public List GetBuildings() + { + string path = Path.Combine(Environment.CurrentDirectory, "../../../../LittleTown.StaticDataAccess/Data/Buildings.json"); + string data = System.IO.File.ReadAllText(path); + List buildings = JsonSerializer.Deserialize>(data) ?? throw new JsonException("Cannot deserialize Buildings"); + + return buildings; + } +} \ No newline at end of file diff --git a/src/LittleTown.sln b/src/LittleTown.sln index e97ccff..300dd8f 100644 --- a/src/LittleTown.sln +++ b/src/LittleTown.sln @@ -7,6 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LittleTown.Core", "LittleTo EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LittleTown.Core.Tests", "LittleTown.Core.Tests\LittleTown.Core.Tests.csproj", "{32D41FF2-0674-4750-A171-010AB228AF18}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LittleTown.StaticDataAccess", "LittleTown.StaticDataAccess\LittleTown.StaticDataAccess.csproj", "{FA0DE9D0-F788-4734-BDA3-F89F71D757BA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -24,5 +26,9 @@ Global {32D41FF2-0674-4750-A171-010AB228AF18}.Debug|Any CPU.Build.0 = Debug|Any CPU {32D41FF2-0674-4750-A171-010AB228AF18}.Release|Any CPU.ActiveCfg = Release|Any CPU {32D41FF2-0674-4750-A171-010AB228AF18}.Release|Any CPU.Build.0 = Release|Any CPU + {FA0DE9D0-F788-4734-BDA3-F89F71D757BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FA0DE9D0-F788-4734-BDA3-F89F71D757BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FA0DE9D0-F788-4734-BDA3-F89F71D757BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FA0DE9D0-F788-4734-BDA3-F89F71D757BA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal