From 5b7f683bffb31f101c8bcdde1aa4405e39985e18 Mon Sep 17 00:00:00 2001 From: Damien Nortier Date: Fri, 15 Mar 2024 09:11:54 +0100 Subject: [PATCH] =?UTF-8?q?feat=20+=20perf=20:=20ajout=20d'une=20m=C3=A9th?= =?UTF-8?q?ode=20pour=20les=20lobbies=20+=20modifications=20des=20construc?= =?UTF-8?q?teurs=20permettant=20une=20meilleure=20injection=20de=20d=C3=A9?= =?UTF-8?q?pendance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataManagers/AdministratorDataManager.cs | 10 ++++++++-- WebApi/DataManagers/AnswerDataManager.cs | 10 ++++++++-- WebApi/DataManagers/ChapterDataManager.cs | 12 ++++++++--- WebApi/DataManagers/LobbyDataManager.cs | 15 ++++++++++++-- WebApi/DataManagers/PlayerDataManager.cs | 10 ++++++++-- WebApi/DataManagers/QuestionDataManager.cs | 9 +++++++-- WebApi/EntityManagers/LobbyEntityManager.cs | 20 +++++++++++++++---- WebApi/ManagerInterfaces/ILobbyManager.cs | 10 ++++++++++ .../AdministratorServiceManager.cs | 4 ++-- .../ServiceManagers/AnswerServiceManager.cs | 5 +++-- .../ServiceManagers/ChapterServiceManager.cs | 4 ++-- WebApi/ServiceManagers/LobbyServiceManager.cs | 11 +++++++--- .../ServiceManagers/PlayerServiceManager.cs | 4 ++-- .../ServiceManagers/QuestionServiceManager.cs | 4 ++-- 14 files changed, 98 insertions(+), 30 deletions(-) diff --git a/WebApi/DataManagers/AdministratorDataManager.cs b/WebApi/DataManagers/AdministratorDataManager.cs index 0f02222..030543e 100644 --- a/WebApi/DataManagers/AdministratorDataManager.cs +++ b/WebApi/DataManagers/AdministratorDataManager.cs @@ -1,4 +1,5 @@ using DbConnectionLibrairie; +using Entities; using EntityManagers; using ExtensionsClassLibrairie; using ManagerInterfaces; @@ -7,10 +8,15 @@ using OrderCriterias; namespace DataManagers { - public class AdministratorDataManager(MyDbContext dbContext) : IAdministratorManager + public class AdministratorDataManager : IAdministratorManager { - private AdministratorEntityManager manager = new AdministratorEntityManager(dbContext); + private IAdministratorManager manager; + + public AdministratorDataManager(IAdministratorManager manager) + { + this.manager = manager; + } public async Task addAdmin(Administrator admin) { diff --git a/WebApi/DataManagers/AnswerDataManager.cs b/WebApi/DataManagers/AnswerDataManager.cs index 4167175..d7ef7c8 100644 --- a/WebApi/DataManagers/AnswerDataManager.cs +++ b/WebApi/DataManagers/AnswerDataManager.cs @@ -1,4 +1,5 @@ using DbConnectionLibrairie; +using Entities; using EntityManagers; using ExtensionsClassLibrairie; using ManagerInterfaces; @@ -12,10 +13,15 @@ using System.Threading.Tasks; namespace DataManagers { - public class AnswerDataManager(MyDbContext dbContext) : IAnswerManager + public class AnswerDataManager : IAnswerManager { - private AnswerEntityManager manager = new AnswerEntityManager(dbContext); + private IAnswerManager manager; + + public AnswerDataManager(IAnswerManager manager) + { + this.manager = manager; + } public async Task addAnswer(Answer answer) { diff --git a/WebApi/DataManagers/ChapterDataManager.cs b/WebApi/DataManagers/ChapterDataManager.cs index 19140a4..2f40964 100644 --- a/WebApi/DataManagers/ChapterDataManager.cs +++ b/WebApi/DataManagers/ChapterDataManager.cs @@ -1,4 +1,5 @@ using DbConnectionLibrairie; +using Entities; using EntityManagers; using ExtensionsClassLibrairie; using ManagerInterfaces; @@ -12,10 +13,15 @@ using System.Threading.Tasks; namespace DataManagers { - public class ChapterDataManager(MyDbContext dbContext) : IChapterManager + public class ChapterDataManager : IChapterManager { - private ChapterEntityManager manager = new ChapterEntityManager(dbContext); - + private IChapterManager manager; + + public ChapterDataManager(IChapterManager manager) + { + this.manager = manager; + } + public async Task addChapter(Chapter chapter) { return await Task.FromResult((await manager.addChapter(chapter.ToEntity())).ToModel()); diff --git a/WebApi/DataManagers/LobbyDataManager.cs b/WebApi/DataManagers/LobbyDataManager.cs index b595b39..ebe406d 100644 --- a/WebApi/DataManagers/LobbyDataManager.cs +++ b/WebApi/DataManagers/LobbyDataManager.cs @@ -1,4 +1,5 @@ using DbConnectionLibrairie; +using Entities; using EntityManagers; using ExtensionsClassLibrairie; using ManagerInterfaces; @@ -12,9 +13,14 @@ using System.Threading.Tasks; namespace DataManagers { - public class LobbyDataManager(MyDbContext dbContext) : ILobbyManager + public class LobbyDataManager : ILobbyManager { - private LobbyEntityManager manager = new LobbyEntityManager(dbContext); + private ILobbyManager manager; + + public LobbyDataManager(ILobbyManager manager) + { + this.manager = manager; + } public async Task addLobby(Lobby lobby) { @@ -41,6 +47,11 @@ namespace DataManagers return await Task.FromResult((await manager.getLobby(id))?.ToModel()); } + public async Task getLobby(string name, int? idCreator) + { + return (await manager.getLobby(name, idCreator))?.ToModel(); + } + public int getNbLobbies() { return manager.getNbLobbies(); diff --git a/WebApi/DataManagers/PlayerDataManager.cs b/WebApi/DataManagers/PlayerDataManager.cs index 590143d..90eeee7 100644 --- a/WebApi/DataManagers/PlayerDataManager.cs +++ b/WebApi/DataManagers/PlayerDataManager.cs @@ -1,4 +1,5 @@ using DbConnectionLibrairie; +using Entities; using EntityManagers; using ExtensionsClassLibrairie; using ManagerInterfaces; @@ -12,9 +13,14 @@ using System.Threading.Tasks; namespace DataManagers { - public class PlayerDataManager(MyDbContext dbContext) : IPlayerManager + public class PlayerDataManager : IPlayerManager { - private PlayerEntityManager manager = new PlayerEntityManager(dbContext); + private IPlayerManager manager; + + public PlayerDataManager(IPlayerManager manager) + { + this.manager = manager; + } public async Task addPlayer(Player player) { diff --git a/WebApi/DataManagers/QuestionDataManager.cs b/WebApi/DataManagers/QuestionDataManager.cs index 0916de7..f51a566 100644 --- a/WebApi/DataManagers/QuestionDataManager.cs +++ b/WebApi/DataManagers/QuestionDataManager.cs @@ -13,10 +13,15 @@ using System.Threading.Tasks; namespace DataManagers { - public class QuestionDataManager(MyDbContext dbContext) : IQuestionManager + public class QuestionDataManager : IQuestionManager { - private QuestionEntityManager manager = new QuestionEntityManager(dbContext); + private IQuestionManager manager; + + public QuestionDataManager(IQuestionManager manager) + { + this.manager = manager; + } public async Task addQuestion(Question question) { diff --git a/WebApi/EntityManagers/LobbyEntityManager.cs b/WebApi/EntityManagers/LobbyEntityManager.cs index a991f39..0056fee 100644 --- a/WebApi/EntityManagers/LobbyEntityManager.cs +++ b/WebApi/EntityManagers/LobbyEntityManager.cs @@ -18,14 +18,14 @@ namespace EntityManagers public async Task addLobby(LobbyEntity lobby) { - var tmp = await dbContext.Lobbies.Where(l => l.Equals(lobby)).FirstOrDefaultAsync(); + var tmp = await dbContext.Lobbies.Where(l => l.IdCreator == lobby.IdCreator && l.Name == lobby.Name).FirstOrDefaultAsync(); if (tmp != null) // <=> he already exist { return tmp!; } dbContext.Lobbies.Add(lobby); await dbContext.SaveChangesAsync(); - return await dbContext.Lobbies.Where(l => l.Equals(lobby)).FirstAsync(); + return await dbContext.Lobbies.Where(l => l.IdCreator == lobby.IdCreator && l.Name == lobby.Name).FirstAsync(); } public async Task<(int nbPages, IEnumerable? lobbies)> getLobbies(int nb, int count, LobbyOrderCriteria orderCriteria = LobbyOrderCriteria.ById) @@ -50,7 +50,19 @@ namespace EntityManagers public async Task getLobby(int id) { - return await Task.FromResult(dbContext.Lobbies.Where(l => l.Id == id).FirstOrDefault()); + return await dbContext.Lobbies.SingleOrDefaultAsync(l => l.Id == id); + } + + public async Task getLobby(string name, int? idCreator) + { + if(name == null) + { + var tmp = dbContext.Lobbies.Where(l => l.Name == name && l.IdCreator != null); + if (tmp.Count() == 0) return null; + else if (tmp.Count() == 1) return tmp.First(); + else throw new Exception("too much lobbies"); + } + return await dbContext.Lobbies.SingleOrDefaultAsync(l => l.Name == name && l.IdCreator == idCreator); } public int getNbLobbies() @@ -60,7 +72,7 @@ namespace EntityManagers public async Task removeLobby(LobbyEntity lobby) { - var tmp = dbContext.Lobbies.Where(a => a.Equals(lobby)).FirstOrDefaultAsync().Result; + var tmp = dbContext.Lobbies.Where(l => l.IdCreator == lobby.IdCreator && l.Name == lobby.Name).FirstOrDefaultAsync().Result; if (tmp == null) return await Task.FromResult(tmp); dbContext.Lobbies.Remove(tmp); await dbContext.SaveChangesAsync(); diff --git a/WebApi/ManagerInterfaces/ILobbyManager.cs b/WebApi/ManagerInterfaces/ILobbyManager.cs index 8662bbb..5921b58 100644 --- a/WebApi/ManagerInterfaces/ILobbyManager.cs +++ b/WebApi/ManagerInterfaces/ILobbyManager.cs @@ -67,5 +67,15 @@ namespace ManagerInterfaces /// to the id or null if there isn't any /// public Task getLobby(int id); + /// + /// get a lobby with a name and a creator id + /// + /// name of the lobby + /// the id of the creator of the lobby + /// + /// the lobby that corresponde + /// to the id or null if there isn't any + /// + public Task getLobby(string name, int? idCreator); } } \ No newline at end of file diff --git a/WebApi/ServiceManagers/AdministratorServiceManager.cs b/WebApi/ServiceManagers/AdministratorServiceManager.cs index 8b7d820..abfc31b 100644 --- a/WebApi/ServiceManagers/AdministratorServiceManager.cs +++ b/WebApi/ServiceManagers/AdministratorServiceManager.cs @@ -13,10 +13,10 @@ using DTOs; namespace ServiceManagers { - public class AdministratorServiceManager(MyDbContext dbContext) : IAdministratorManager + public class AdministratorServiceManager(IAdministratorManager administratorManager) : IAdministratorManager { - private AdministratorDataManager manager = new AdministratorDataManager(dbContext); + private IAdministratorManager manager = administratorManager; public async Task addAdmin(AdministratorDto admin) { diff --git a/WebApi/ServiceManagers/AnswerServiceManager.cs b/WebApi/ServiceManagers/AnswerServiceManager.cs index ed9812f..7188860 100644 --- a/WebApi/ServiceManagers/AnswerServiceManager.cs +++ b/WebApi/ServiceManagers/AnswerServiceManager.cs @@ -10,13 +10,14 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using DTOs; +using Entities; namespace ServiceManagers { - public class AnswerServiceManager(MyDbContext dbContext) : IAnswerManager + public class AnswerServiceManager(IAnswerManager manager) : IAnswerManager { - private AnswerDataManager manager = new AnswerDataManager(dbContext); + private IAnswerManager manager = manager; public async Task addAnswer(AnswerDto answerdto) { diff --git a/WebApi/ServiceManagers/ChapterServiceManager.cs b/WebApi/ServiceManagers/ChapterServiceManager.cs index abc52f6..184b42e 100644 --- a/WebApi/ServiceManagers/ChapterServiceManager.cs +++ b/WebApi/ServiceManagers/ChapterServiceManager.cs @@ -13,9 +13,9 @@ using DTOs; namespace ServiceManagers { - public class ChapterServiceManager(MyDbContext dbContext) : IChapterManager + public class ChapterServiceManager(IChapterManager manager) : IChapterManager { - private ChapterDataManager manager = new ChapterDataManager(dbContext); + private IChapterManager manager = manager; public async Task addChapter(ChapterDto chapterdto) { diff --git a/WebApi/ServiceManagers/LobbyServiceManager.cs b/WebApi/ServiceManagers/LobbyServiceManager.cs index 614e501..e6cae8a 100644 --- a/WebApi/ServiceManagers/LobbyServiceManager.cs +++ b/WebApi/ServiceManagers/LobbyServiceManager.cs @@ -13,9 +13,9 @@ using DTOs; namespace ServiceManagers { - public class LobbyServiceManager(MyDbContext dbContext) : ILobbyManager + public class LobbyServiceManager(ILobbyManager manager) : ILobbyManager { - private LobbyDataManager manager = new LobbyDataManager(dbContext); + private ILobbyManager manager = manager; public async Task addLobby(LobbyDto lobbydto) { @@ -39,7 +39,12 @@ namespace ServiceManagers public async Task getLobby(int id) { - return await Task.FromResult((await manager.getLobby(id))?.ToDto()); + return (await manager.getLobby(id))?.ToDto(); + } + + public async Task getLobby(string name, int? idCreator) + { + return (await manager.getLobby(name, idCreator))?.ToDto(); } public int getNbLobbies() diff --git a/WebApi/ServiceManagers/PlayerServiceManager.cs b/WebApi/ServiceManagers/PlayerServiceManager.cs index a67da73..1475d90 100644 --- a/WebApi/ServiceManagers/PlayerServiceManager.cs +++ b/WebApi/ServiceManagers/PlayerServiceManager.cs @@ -13,9 +13,9 @@ using DTOs; namespace ServiceManagers { - public class PlayerServiceManager(MyDbContext dbContext) : IPlayerManager + public class PlayerServiceManager(IPlayerManager manager) : IPlayerManager { - private PlayerDataManager manager = new PlayerDataManager(dbContext); + private IPlayerManager manager = manager; public async Task addPlayer(PlayerDto playerdto) { diff --git a/WebApi/ServiceManagers/QuestionServiceManager.cs b/WebApi/ServiceManagers/QuestionServiceManager.cs index 5112b60..229135f 100644 --- a/WebApi/ServiceManagers/QuestionServiceManager.cs +++ b/WebApi/ServiceManagers/QuestionServiceManager.cs @@ -15,10 +15,10 @@ using System.Threading.Tasks; namespace ServiceManagers { - public class QuestionServiceManager(MyDbContext dbContext) : IQuestionManager + public class QuestionServiceManager(IQuestionManager manager) : IQuestionManager { - private QuestionDataManager manager = new QuestionDataManager(dbContext); + private IQuestionManager manager = manager; public async Task addQuestion(QuestionDto question) {