From 4d9e8bfc08b9d6706d27b3b6fabf8a0777b069de Mon Sep 17 00:00:00 2001 From: "zakariya.saoula" Date: Mon, 13 Mar 2023 16:12:08 +0100 Subject: [PATCH] =?UTF-8?q?d=C3=A9but=20des=20routes=20et=20mise=20en=20pl?= =?UTF-8?q?ace=20de=20l'interface=20idatamanager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/Model/IDataManager.cs | 48 +++++++++++++ Sources/Model/Model.csproj | 4 ++ Sources/Model/Player.cs | 6 ++ Sources/Model/Stats.cs | 4 +- Sources/Shared/IGenericDataManager.cs | 11 +++ Sources/Shared/Shared.csproj | 9 +++ Sources/Stub/Stub/Extensions.cs | 67 +++++++++++++++++++ Sources/Stub/Stub/Stub.csproj | 13 ++++ Sources/Stub/Stub/StubData.Cases.cs | 55 +++++++++++++++ Sources/Stub/Stub/StubData.Games.cs | 51 ++++++++++++++ Sources/Stub/Stub/StubData.GamesMode.cs | 51 ++++++++++++++ Sources/Stub/Stub/StubData.Grilles.cs | 45 +++++++++++++ Sources/Stub/Stub/StubData.Players.cs | 46 +++++++++++++ Sources/Stub/Stub/StubData.Stats.cs | 52 ++++++++++++++ Sources/Stub/Stub/StubData.Turns.cs | 51 ++++++++++++++ Sources/Stub/Stub/StubData.cs | 38 +++++++++++ Sources/Tests/ModelTest/ModelTest.csproj | 24 +++++++ Sources/Tests/ModelTest/UnitTest1.cs | 11 +++ Sources/Tests/ModelTest/Usings.cs | 1 + Sources/Trek12_API.sln | 40 ++++++++--- .../Controllers/PlayerController.cs | 65 ++++++++++++++++++ .../Trek12_API/Converter/PlayerConverter.cs | 33 +++++++++ .../Trek12_API/Converter/StatsConverter.cs | 42 ++++++++++++ Sources/Trek12_API/DTO/PlayerDTO.cs | 9 +++ Sources/Trek12_API/DTO/StatsDTO.cs | 11 +++ Sources/Trek12_API/Trek12_API.csproj | 4 ++ 26 files changed, 779 insertions(+), 12 deletions(-) create mode 100644 Sources/Model/IDataManager.cs create mode 100644 Sources/Shared/IGenericDataManager.cs create mode 100644 Sources/Shared/Shared.csproj create mode 100644 Sources/Stub/Stub/Extensions.cs create mode 100644 Sources/Stub/Stub/Stub.csproj create mode 100644 Sources/Stub/Stub/StubData.Cases.cs create mode 100644 Sources/Stub/Stub/StubData.Games.cs create mode 100644 Sources/Stub/Stub/StubData.GamesMode.cs create mode 100644 Sources/Stub/Stub/StubData.Grilles.cs create mode 100644 Sources/Stub/Stub/StubData.Players.cs create mode 100644 Sources/Stub/Stub/StubData.Stats.cs create mode 100644 Sources/Stub/Stub/StubData.Turns.cs create mode 100644 Sources/Stub/Stub/StubData.cs create mode 100644 Sources/Tests/ModelTest/ModelTest.csproj create mode 100644 Sources/Tests/ModelTest/UnitTest1.cs create mode 100644 Sources/Tests/ModelTest/Usings.cs create mode 100644 Sources/Trek12_API/Controllers/PlayerController.cs create mode 100644 Sources/Trek12_API/Converter/PlayerConverter.cs create mode 100644 Sources/Trek12_API/Converter/StatsConverter.cs create mode 100644 Sources/Trek12_API/DTO/PlayerDTO.cs create mode 100644 Sources/Trek12_API/DTO/StatsDTO.cs diff --git a/Sources/Model/IDataManager.cs b/Sources/Model/IDataManager.cs new file mode 100644 index 0000000..3d9c4aa --- /dev/null +++ b/Sources/Model/IDataManager.cs @@ -0,0 +1,48 @@ +using Shared; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Model +{ + public interface IDataManager + { + IPlayersManager PlayersMgr { get; } + IGamesManager GamesMgr { get; } + IGamesModeManager GamesModeMgr { get; } + ICasesManager CasesMgr { get; } + IGrillesManager GrillesMgr { get; } + IStatsManager StatsMgr { get; } + ITurnsManager TurnsMgr { get; } + } + + public interface IPlayersManager : IGenericDataManager + { + } + + public interface IGamesManager : IGenericDataManager + { + } + + public interface IGamesModeManager : IGenericDataManager + { + } + + public interface ICasesManager : IGenericDataManager + { + } + + public interface IGrillesManager : IGenericDataManager + { + } + + public interface IStatsManager : IGenericDataManager + { + } + + public interface ITurnsManager : IGenericDataManager + { + } +} diff --git a/Sources/Model/Model.csproj b/Sources/Model/Model.csproj index bafd05b..6c2a3aa 100644 --- a/Sources/Model/Model.csproj +++ b/Sources/Model/Model.csproj @@ -6,4 +6,8 @@ enable + + + + diff --git a/Sources/Model/Player.cs b/Sources/Model/Player.cs index f68fd70..315ee58 100644 --- a/Sources/Model/Player.cs +++ b/Sources/Model/Player.cs @@ -25,6 +25,12 @@ Stats = new Stats(); } + public Player(string pseudo, Stats stats) + { + Pseudo = pseudo; + Stats = stats; + } + //nécessaire ? //public bool Equals(Player? other) // => Pseudo.Equals(other?.Pseudo); diff --git a/Sources/Model/Stats.cs b/Sources/Model/Stats.cs index c706cff..0603f37 100644 --- a/Sources/Model/Stats.cs +++ b/Sources/Model/Stats.cs @@ -16,9 +16,7 @@ namespace Model public Stats() - { - - } + {} public override string ToString() => $"{NbWin} {NbPlayed} {MaxChain} {MaxZone} {MaxZone}"; diff --git a/Sources/Shared/IGenericDataManager.cs b/Sources/Shared/IGenericDataManager.cs new file mode 100644 index 0000000..79c2d60 --- /dev/null +++ b/Sources/Shared/IGenericDataManager.cs @@ -0,0 +1,11 @@ +namespace Shared +{ + public interface IGenericDataManager + { + Task GetNbItems(); + Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false); + Task UpdateItem(T oldItem, T newItem); + Task AddItem(T item); + Task DeleteItem(T item); + } +} \ No newline at end of file diff --git a/Sources/Shared/Shared.csproj b/Sources/Shared/Shared.csproj new file mode 100644 index 0000000..132c02c --- /dev/null +++ b/Sources/Shared/Shared.csproj @@ -0,0 +1,9 @@ + + + + net6.0 + enable + enable + + + diff --git a/Sources/Stub/Stub/Extensions.cs b/Sources/Stub/Stub/Extensions.cs new file mode 100644 index 0000000..5d1b109 --- /dev/null +++ b/Sources/Stub/Stub/Extensions.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Stub +{ + static class Extensions + { + internal static Task> GetItemsWithFilterAndOrdering(this IEnumerable collection, + Func filter, int index, int count, string? orderingPropertyName = null, bool descending = false) + { + IEnumerable temp = collection; + temp = temp.Where(item => filter(item)); + if (orderingPropertyName != null) + { + var prop = typeof(T).GetProperty(orderingPropertyName!); + if (prop != null) + { + temp = descending ? temp.OrderByDescending(item => prop.GetValue(item)) + : temp.OrderBy(item => prop.GetValue(item)); + } + } + return Task.FromResult>(temp.Skip(index * count).Take(count)); + } + + //internal static Task GetNbItemsWithFilter(this IEnumerable collection, Func filter) + //{ + // return Task.FromResult(collection.Count(item => filter(item))); + //} + + internal static Task AddItem(this IList collection, T? item) + { + if (item == null || collection.Contains(item)) + { + return Task.FromResult(default(T)); + } + collection.Add(item); + return Task.FromResult(item); + } + + internal static Task DeleteItem(this IList collection, T? item) + { + if (item == null) + { + return Task.FromResult(false); + } + bool result = collection.Remove(item!); + return Task.FromResult(result); + } + + internal static Task UpdateItem(this IList collection, T? oldItem, T? newItem) + { + if (oldItem == null || newItem == null) return Task.FromResult(default(T)); + + if (!collection.Contains(oldItem)) + { + return Task.FromResult(default(T)); + } + + collection.Remove(oldItem!); + collection.Add(newItem!); + return Task.FromResult(newItem); + } + } +} diff --git a/Sources/Stub/Stub/Stub.csproj b/Sources/Stub/Stub/Stub.csproj new file mode 100644 index 0000000..8a6ca9a --- /dev/null +++ b/Sources/Stub/Stub/Stub.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + enable + + + + + + + diff --git a/Sources/Stub/Stub/StubData.Cases.cs b/Sources/Stub/Stub/StubData.Cases.cs new file mode 100644 index 0000000..bc4d855 --- /dev/null +++ b/Sources/Stub/Stub/StubData.Cases.cs @@ -0,0 +1,55 @@ +using Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Stub +{ + public partial class StubData + { + private List Cases = new() + { + new Case(1), + new Case(12), + new Case(4), + new Case(9), + new Case(8), + new Case(6), + }; + + public class CasesManager : ICasesManager + { + private readonly StubData parent; + + public CasesManager(StubData parent) + => this.parent = parent; + + public Task AddItem(Case? item) + { + throw new NotImplementedException(); + } + + public Task DeleteItem(Case? item) + { + throw new NotImplementedException(); + } + + public Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) + { + throw new NotImplementedException(); + } + + public Task GetNbItems() + { + throw new NotImplementedException(); + } + + public Task UpdateItem(Case? oldItem, Case? newItem) + { + throw new NotImplementedException(); + } + } + } +} diff --git a/Sources/Stub/Stub/StubData.Games.cs b/Sources/Stub/Stub/StubData.Games.cs new file mode 100644 index 0000000..0a7b2f9 --- /dev/null +++ b/Sources/Stub/Stub/StubData.Games.cs @@ -0,0 +1,51 @@ +using Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Stub +{ + public partial class StubData + { + private List games = new() + { + //new Game(new TimeSpan(1,20,0),new DateOnly(2023,06,03)), + //new Game(), + }; + + public class GamesManager : IGamesManager + { + private readonly StubData parent; + + public GamesManager(StubData parent) + => this.parent = parent; + + public Task AddItem(Game? item) + { + throw new NotImplementedException(); + } + + public Task DeleteItem(Game? item) + { + throw new NotImplementedException(); + } + + public Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) + { + throw new NotImplementedException(); + } + + public Task GetNbItems() + { + throw new NotImplementedException(); + } + + public Task UpdateItem(Game? oldItem, Game? newItem) + { + throw new NotImplementedException(); + } + } + } +} diff --git a/Sources/Stub/Stub/StubData.GamesMode.cs b/Sources/Stub/Stub/StubData.GamesMode.cs new file mode 100644 index 0000000..1705ab2 --- /dev/null +++ b/Sources/Stub/Stub/StubData.GamesMode.cs @@ -0,0 +1,51 @@ +using Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Stub +{ + public partial class StubData + { + private List GamesMode = new() + { + //new GameMode(), + //new GameMode(), + }; + + public class GamesModeManager : IGamesModeManager + { + private readonly StubData parent; + + public GamesModeManager(StubData parent) + => this.parent = parent; + + public Task AddItem(GameMode? item) + { + throw new NotImplementedException(); + } + + public Task DeleteItem(GameMode? item) + { + throw new NotImplementedException(); + } + + public Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) + { + throw new NotImplementedException(); + } + + public Task GetNbItems() + { + throw new NotImplementedException(); + } + + public Task UpdateItem(GameMode? oldItem, GameMode? newItem) + { + throw new NotImplementedException(); + } + } + } +} diff --git a/Sources/Stub/Stub/StubData.Grilles.cs b/Sources/Stub/Stub/StubData.Grilles.cs new file mode 100644 index 0000000..1f1d140 --- /dev/null +++ b/Sources/Stub/Stub/StubData.Grilles.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Model; + +namespace Stub +{ + public partial class StubData + { + private List grilles = new() + { + new Grille(new List {new Case(3), new Case(5), new Case(6), new Case(7), new Case(8), new Case(9), + new Case(12), new Case(4), new Case(2), new Case(10), new Case(8), new Case(2),}), + //new Grille(), + }; + + public class GrillesManager : IGrillesManager + { + private readonly StubData parent; + + public GrillesManager(StubData parent) + => this.parent = parent; + + public Task AddItem(Grille? item) + => parent.grilles.AddItem(item); + + public Task DeleteItem(Grille? item) + => parent.grilles.DeleteItem(item); + + public Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) + => parent.grilles.GetItemsWithFilterAndOrdering( + c => true, + index, count, + orderingPropertyName, descending); + + public Task GetNbItems() + => Task.FromResult(parent.grilles.Count); + + public Task UpdateItem(Grille? oldItem, Grille? newItem) + => parent.grilles.UpdateItem(oldItem,newItem); + } + } +} diff --git a/Sources/Stub/Stub/StubData.Players.cs b/Sources/Stub/Stub/StubData.Players.cs new file mode 100644 index 0000000..c895578 --- /dev/null +++ b/Sources/Stub/Stub/StubData.Players.cs @@ -0,0 +1,46 @@ +using Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Stub +{ + public partial class StubData + { + private List players = new() + { + new Player("Aurelien"), + new Player("Theo"), + new Player("Maxence"), + new Player("Zakariya"), + }; + + public class PlayersManager : IPlayersManager + { + private readonly StubData parent; + + public PlayersManager(StubData parent) + => this.parent = parent; + + public Task AddItem(Player? item) + => parent.players.AddItem(item); + + public Task DeleteItem(Player? item) + => parent.players.DeleteItem(item); + + public Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) + => parent.players.GetItemsWithFilterAndOrdering( + c => true, + index, count, + orderingPropertyName, descending); + + public Task GetNbItems() + => Task.FromResult(parent.players.Count); + + public Task UpdateItem(Player? oldItem, Player? newItem) + => parent.players.UpdateItem(oldItem, newItem); + } + } +} diff --git a/Sources/Stub/Stub/StubData.Stats.cs b/Sources/Stub/Stub/StubData.Stats.cs new file mode 100644 index 0000000..0af6076 --- /dev/null +++ b/Sources/Stub/Stub/StubData.Stats.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Model; + +namespace Stub +{ + public partial class StubData + { + private List stats = new() + { + new Stats(), + //new Stat(), + }; + + public class StatsManager : IStatsManager + { + private readonly StubData parent; + + public StatsManager(StubData parent) + => this.parent = parent; + + public Task AddItem(Stats? item) + { + throw new NotImplementedException(); + } + + public Task DeleteItem(Stats? item) + { + throw new NotImplementedException(); + } + + public Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) + => parent.stats.GetItemsWithFilterAndOrdering( + c => true, + index, count, + orderingPropertyName, descending); + + public Task GetNbItems() + { + throw new NotImplementedException(); + } + + public Task UpdateItem(Stats? oldItem, Stats? newItem) + { + throw new NotImplementedException(); + } + } + } +} diff --git a/Sources/Stub/Stub/StubData.Turns.cs b/Sources/Stub/Stub/StubData.Turns.cs new file mode 100644 index 0000000..6bd2581 --- /dev/null +++ b/Sources/Stub/Stub/StubData.Turns.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Model; + +namespace Stub +{ + public partial class StubData + { + private List Turns = new() + { + //new Turn(), + //new Turn(), + }; + + public class TurnsManager : ITurnsManager + { + private readonly StubData parent; + + public TurnsManager(StubData parent) + => this.parent = parent; + + public Task AddItem(Turn? item) + { + throw new NotImplementedException(); + } + + public Task DeleteItem(Turn? item) + { + throw new NotImplementedException(); + } + + public Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) + { + throw new NotImplementedException(); + } + + public Task GetNbItems() + { + throw new NotImplementedException(); + } + + public Task UpdateItem(Turn? oldItem, Turn? newItem) + { + throw new NotImplementedException(); + } + } + } +} diff --git a/Sources/Stub/Stub/StubData.cs b/Sources/Stub/Stub/StubData.cs new file mode 100644 index 0000000..e492098 --- /dev/null +++ b/Sources/Stub/Stub/StubData.cs @@ -0,0 +1,38 @@ +using Model; + +namespace Stub +{ + public partial class StubData : IDataManager + { + public StubData() + { + //ChampionsMgr = new ChampionsManager(this); + //SkinsMgr = new SkinsManager(this); + //RunesMgr = new RunesManager(this); + //RunePagesMgr = new RunePagesManager(this); + + PlayersMgr = new PlayersManager(this); + GamesMgr = new GamesManager(this); + GamesModeMgr = new GamesModeManager(this); + CasesMgr = new CasesManager(this); + GrillesMgr = new GrillesManager(this); + StatsMgr = new StatsManager(this); + TurnsMgr = new TurnsManager(this); + } + + public IPlayersManager PlayersMgr { get; } + + public IGamesManager GamesMgr { get; } + + public IGamesModeManager GamesModeMgr { get; } + + public ICasesManager CasesMgr { get; } + + public IGrillesManager GrillesMgr { get; } + + public IStatsManager StatsMgr { get; } + + public ITurnsManager TurnsMgr { get; } + + } +} \ No newline at end of file diff --git a/Sources/Tests/ModelTest/ModelTest.csproj b/Sources/Tests/ModelTest/ModelTest.csproj new file mode 100644 index 0000000..c5d1063 --- /dev/null +++ b/Sources/Tests/ModelTest/ModelTest.csproj @@ -0,0 +1,24 @@ + + + + net6.0 + enable + enable + + false + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + diff --git a/Sources/Tests/ModelTest/UnitTest1.cs b/Sources/Tests/ModelTest/UnitTest1.cs new file mode 100644 index 0000000..ea0b6e4 --- /dev/null +++ b/Sources/Tests/ModelTest/UnitTest1.cs @@ -0,0 +1,11 @@ +namespace ModelTest +{ + public class UnitTest1 + { + [Fact] + public void Test1() + { + + } + } +} \ No newline at end of file diff --git a/Sources/Tests/ModelTest/Usings.cs b/Sources/Tests/ModelTest/Usings.cs new file mode 100644 index 0000000..8c927eb --- /dev/null +++ b/Sources/Tests/ModelTest/Usings.cs @@ -0,0 +1 @@ +global using Xunit; \ No newline at end of file diff --git a/Sources/Trek12_API.sln b/Sources/Trek12_API.sln index 101180a..d29939e 100644 --- a/Sources/Trek12_API.sln +++ b/Sources/Trek12_API.sln @@ -1,17 +1,25 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.810.22 +# Visual Studio Version 17 +VisualStudioVersion = 17.2.32505.173 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{C75DF644-C41F-4A08-8B69-C8554204AC72}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Trek12_API", "Trek12_API\Trek12_API.csproj", "{3BF053E1-44DF-4305-ACBA-21F7A053A514}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Trek12_API", "Trek12_API\Trek12_API.csproj", "{3BF053E1-44DF-4305-ACBA-21F7A053A514}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Model", "Model\Model.csproj", "{4BEFD382-A3A4-444E-973E-73F410F9CED4}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Model", "Model\Model.csproj", "{4BEFD382-A3A4-444E-973E-73F410F9CED4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EntityFrameWorkLib", "Trek12_Lib\EntityFrameWorkLib.csproj", "{D6B8B866-0510-454A-A00A-BF403E81CE3E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EntityFrameWorkLib", "Trek12_Lib\EntityFrameWorkLib.csproj", "{D6B8B866-0510-454A-A00A-BF403E81CE3E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DbConsole", "Tests\DbConsole\DbConsole.csproj", "{75B303CC-F36E-46FA-BE23-05EEA35D9B28}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DbConsole", "Tests\DbConsole\DbConsole.csproj", "{75B303CC-F36E-46FA-BE23-05EEA35D9B28}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelTest", "Tests\ModelTest\ModelTest.csproj", "{6EC6383D-10E8-44E1-8EDD-EF4DF460A9B1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Stub", "Stub", "{B1585816-FCBB-484F-A1AA-C7AEB501C39B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stub", "Stub\Stub\Stub.csproj", "{5E45E953-4FCC-42B6-9F22-15108D002D78}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared", "Shared\Shared.csproj", "{8B6EC777-57F8-4509-9163-4312A40FE63C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -35,14 +43,28 @@ Global {75B303CC-F36E-46FA-BE23-05EEA35D9B28}.Debug|Any CPU.Build.0 = Debug|Any CPU {75B303CC-F36E-46FA-BE23-05EEA35D9B28}.Release|Any CPU.ActiveCfg = Release|Any CPU {75B303CC-F36E-46FA-BE23-05EEA35D9B28}.Release|Any CPU.Build.0 = Release|Any CPU + {6EC6383D-10E8-44E1-8EDD-EF4DF460A9B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6EC6383D-10E8-44E1-8EDD-EF4DF460A9B1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6EC6383D-10E8-44E1-8EDD-EF4DF460A9B1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6EC6383D-10E8-44E1-8EDD-EF4DF460A9B1}.Release|Any CPU.Build.0 = Release|Any CPU + {5E45E953-4FCC-42B6-9F22-15108D002D78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5E45E953-4FCC-42B6-9F22-15108D002D78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5E45E953-4FCC-42B6-9F22-15108D002D78}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5E45E953-4FCC-42B6-9F22-15108D002D78}.Release|Any CPU.Build.0 = Release|Any CPU + {8B6EC777-57F8-4509-9163-4312A40FE63C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8B6EC777-57F8-4509-9163-4312A40FE63C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8B6EC777-57F8-4509-9163-4312A40FE63C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8B6EC777-57F8-4509-9163-4312A40FE63C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {4D47853B-D1A3-49A5-84BA-CD2DC65FD105} - EndGlobalSection GlobalSection(NestedProjects) = preSolution {75B303CC-F36E-46FA-BE23-05EEA35D9B28} = {C75DF644-C41F-4A08-8B69-C8554204AC72} + {6EC6383D-10E8-44E1-8EDD-EF4DF460A9B1} = {C75DF644-C41F-4A08-8B69-C8554204AC72} + {5E45E953-4FCC-42B6-9F22-15108D002D78} = {B1585816-FCBB-484F-A1AA-C7AEB501C39B} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4D47853B-D1A3-49A5-84BA-CD2DC65FD105} EndGlobalSection EndGlobal diff --git a/Sources/Trek12_API/Controllers/PlayerController.cs b/Sources/Trek12_API/Controllers/PlayerController.cs new file mode 100644 index 0000000..ed77754 --- /dev/null +++ b/Sources/Trek12_API/Controllers/PlayerController.cs @@ -0,0 +1,65 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Model; +using Stub; +using Trek12_API.Converter; +using Trek12_API.DTO; + +namespace Trek12_API.Controllers +{ + [ApiController] + [Route("[controller]")] + public class PlayerController : ControllerBase + { + private StubData.PlayersManager playersManager { get; set; } = new StubData.PlayersManager(new StubData()); + + private readonly ILogger _logger; + + public PlayerController(ILogger logger) + { + _logger = logger; + } + + [HttpGet] + public async Task Get() + { + //si count > nb_max + //_logger.LogWarning + reaffecter count + var list = await playersManager.GetItems(0, await playersManager.GetNbItems()); + return Ok(list.Select(player => player?.toDTO())); + } + + [HttpGet] + public async Task GetById() + { + var list = await playersManager.GetItems(0, await playersManager.GetNbItems()); + return Ok(list.Select(player => player?.toDTO())); + } + + [HttpPost] + public async Task Post(PlayerDTO player) + { + Player playerToCreate = player.toModel(); + await playersManager.AddItem(playerToCreate); + return Ok(playerToCreate?.toDTO()); + } + + [HttpDelete("{player}")] + public async Task Delete(PlayerDTO player) + { + var playerToDelete = player.toModel(); + //faire recherche pour voir si player existe + await playersManager.DeleteItem(playerToDelete); + return Ok(); + } + + [HttpPut] + public async Task Update(string pseudo, PlayerDTO playerOld) + { + Player playerOldModel = playerOld.toModel(); + Player playerNew = new Player(pseudo, playerOldModel.Stats); + await playersManager.UpdateItem(playerOldModel, playerNew); + return Ok(playerNew); + } + } +} diff --git a/Sources/Trek12_API/Converter/PlayerConverter.cs b/Sources/Trek12_API/Converter/PlayerConverter.cs new file mode 100644 index 0000000..d4099bb --- /dev/null +++ b/Sources/Trek12_API/Converter/PlayerConverter.cs @@ -0,0 +1,33 @@ +using Model; +using Trek12_API.DTO; + +namespace Trek12_API.Converter +{ + public static class PlayerConverter + { + public static PlayerDTO toDTO(this Player player) + { + return new PlayerDTO() + { + Pseudo = player.Pseudo, + Stats = player.Stats.toDTO(), + }; + } + + public static Player toModel(this PlayerDTO player) + { + return new Player(player.Pseudo, player.Stats.toModel()); + + } + + public static IEnumerable toModels(this IEnumerable players) + { + return players.Select(c => c.toModel()); + } + + public static IEnumerable toDTOs(this IEnumerable players) + { + return players.Select(c => c.toDTO()); + } + } +} diff --git a/Sources/Trek12_API/Converter/StatsConverter.cs b/Sources/Trek12_API/Converter/StatsConverter.cs new file mode 100644 index 0000000..b81f855 --- /dev/null +++ b/Sources/Trek12_API/Converter/StatsConverter.cs @@ -0,0 +1,42 @@ +using Model; +using Trek12_API.DTO; + +namespace Trek12_API.Converter +{ + public static class StatsConverter + { + public static StatsDTO toDTO(this Stats stats) + { + return new StatsDTO() + { + NbPlayed = stats.NbPlayed, + NbWin = stats.NbWin, + MaxChain = stats.MaxChain, + MaxPoints = stats.MaxPoints, + MaxZone = stats.MaxZone, + }; + } + + public static Stats toModel(this StatsDTO stats) + { + return new Stats() + { + NbPlayed = stats.NbPlayed, + NbWin = stats.NbWin, + MaxChain = stats.MaxChain, + MaxPoints = stats.MaxPoints, + MaxZone = stats.MaxZone, + }; + } + + public static IEnumerable toModels(this IEnumerable stats) + { + return stats.Select(c => c.toModel()); + } + + public static IEnumerable toDTOs(this IEnumerable stats) + { + return stats.Select(c => c.toDTO()); + } + } +} diff --git a/Sources/Trek12_API/DTO/PlayerDTO.cs b/Sources/Trek12_API/DTO/PlayerDTO.cs new file mode 100644 index 0000000..4a3828b --- /dev/null +++ b/Sources/Trek12_API/DTO/PlayerDTO.cs @@ -0,0 +1,9 @@ +namespace Trek12_API.DTO +{ + public class PlayerDTO + { + public string Pseudo { get; set; } + public StatsDTO Stats { get; set; } = new StatsDTO(); + + } +} diff --git a/Sources/Trek12_API/DTO/StatsDTO.cs b/Sources/Trek12_API/DTO/StatsDTO.cs new file mode 100644 index 0000000..f6906bc --- /dev/null +++ b/Sources/Trek12_API/DTO/StatsDTO.cs @@ -0,0 +1,11 @@ +namespace Trek12_API.DTO +{ + public class StatsDTO + { + public int NbWin { get; set; } + public int NbPlayed { get; set; } + public int MaxChain { get; set; } + public int MaxZone { get; set; } + public int MaxPoints { get; set; } + } +} diff --git a/Sources/Trek12_API/Trek12_API.csproj b/Sources/Trek12_API/Trek12_API.csproj index 8cb33cf..e5726d1 100644 --- a/Sources/Trek12_API/Trek12_API.csproj +++ b/Sources/Trek12_API/Trek12_API.csproj @@ -10,4 +10,8 @@ + + + +