From a9f36c9fc1020845bc567300888a16e89be4d49e Mon Sep 17 00:00:00 2001 From: "damien.nortier" Date: Mon, 4 Mar 2024 21:13:22 +0100 Subject: [PATCH] ajout des data managers et service managers --- WebApi/DataManagers/AnswerDataManager.cs | 80 ++++++++++++++ WebApi/DataManagers/ChapterDataManager.cs | 59 ++++++++++ WebApi/DataManagers/DataManagers.csproj | 2 + WebApi/DataManagers/LobbyDataManager.cs | 59 ++++++++++ WebApi/DataManagers/PlayerDataManager.cs | 89 +++++++++++++++ WebApi/DataManagers/QuestionDataManager.cs | 103 +++++++++++++++++ WebApi/EntityManagers/PlayerEntityManager.cs | 2 +- WebApi/ManagerInterfaces/IPlayerManager.cs | 2 +- .../AdministratorServiceManager.cs | 66 +++++++++++ .../ServiceManagers/AnswerServiceManager.cs | 81 ++++++++++++++ .../ServiceManagers/ChapterServiceManager.cs | 60 ++++++++++ WebApi/ServiceManagers/LobbyServiceManager.cs | 60 ++++++++++ .../ServiceManagers/PlayerServiceManager.cs | 90 +++++++++++++++ .../ServiceManagers/QuestionServiceManager.cs | 104 ++++++++++++++++++ WebApi/ServiceManagers/ServiceManagers.csproj | 18 +++ .../AbstractUnitTestEM.cs | 7 +- .../UnitTestAnswerManager.cs | 55 ++++----- .../UnitTestsEntityManagers.csproj | 2 +- WebApi/WebApi.sln | 19 +++- .../Controllers/WeatherForecastController.cs | 33 ++++++ WebApi/WebApi/Program.cs | 25 +++++ WebApi/WebApi/Properties/launchSettings.json | 41 +++++++ WebApi/WebApi/WeatherForecast.cs | 13 +++ WebApi/WebApi/WebApi.csproj | 13 +++ WebApi/WebApi/WebApi.http | 6 + WebApi/WebApi/appsettings.Development.json | 8 ++ WebApi/WebApi/appsettings.json | 9 ++ 27 files changed, 1063 insertions(+), 43 deletions(-) create mode 100644 WebApi/DataManagers/AnswerDataManager.cs create mode 100644 WebApi/DataManagers/ChapterDataManager.cs create mode 100644 WebApi/DataManagers/LobbyDataManager.cs create mode 100644 WebApi/DataManagers/PlayerDataManager.cs create mode 100644 WebApi/DataManagers/QuestionDataManager.cs create mode 100644 WebApi/ServiceManagers/AdministratorServiceManager.cs create mode 100644 WebApi/ServiceManagers/AnswerServiceManager.cs create mode 100644 WebApi/ServiceManagers/ChapterServiceManager.cs create mode 100644 WebApi/ServiceManagers/LobbyServiceManager.cs create mode 100644 WebApi/ServiceManagers/PlayerServiceManager.cs create mode 100644 WebApi/ServiceManagers/QuestionServiceManager.cs create mode 100644 WebApi/ServiceManagers/ServiceManagers.csproj create mode 100644 WebApi/WebApi/Controllers/WeatherForecastController.cs create mode 100644 WebApi/WebApi/Program.cs create mode 100644 WebApi/WebApi/Properties/launchSettings.json create mode 100644 WebApi/WebApi/WeatherForecast.cs create mode 100644 WebApi/WebApi/WebApi.csproj create mode 100644 WebApi/WebApi/WebApi.http create mode 100644 WebApi/WebApi/appsettings.Development.json create mode 100644 WebApi/WebApi/appsettings.json diff --git a/WebApi/DataManagers/AnswerDataManager.cs b/WebApi/DataManagers/AnswerDataManager.cs new file mode 100644 index 0000000..ae72651 --- /dev/null +++ b/WebApi/DataManagers/AnswerDataManager.cs @@ -0,0 +1,80 @@ +using DbConnectionLibrairie; +using EntityManagers; +using ExtensionsClassLibrairie; +using ManagerInterfaces; +using Model; +using OrderCriterias; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataManagers +{ + public class AnswerDataManager(MyDbContext dbContext) : IAnswerManager + { + + private AnswerEntityManager manager = new AnswerEntityManager(dbContext); + + public async Task addAnswer(Answer answer) + { + return await Task.FromResult((await manager.addAnswer(answer.ToEntity())).ToModel()); + } + + public async Task getAnswer(uint id) + { + return await Task.FromResult((await manager.getAnswer(id))?.ToModel()); + } + + public async Task<(int nbPages, IEnumerable? answers)> getAnswers(int nb, int count, AnswerOrderCriteria orderCriteria = AnswerOrderCriteria.ById) + { + List? tmp = new List(); + var res = await manager.getAnswers(nb, count, orderCriteria); + if (res.answers == null) tmp = null; + else + { + foreach (var item in res.answers) + { + tmp.Add(item.ToModel()); + } + } + return await Task.FromResult<(int nbPages, IEnumerable? answers)>((res.nbPages, tmp)); + } + + public async Task?> getAnswersByIdQuestion(uint id) + { + var tmp = await manager.getAnswersByIdQuestion(id); + List? answer = new List(); + if (tmp == null) answer = null; + else + { + foreach (var item in tmp) + { + answer.Add(item.ToModel()); + } + } + return await Task.FromResult?>(answer); + } + + public int getNbElements() + { + return manager.getNbElements(); + } + + public async Task removeAnswer(uint id) + { + return (await manager.removeAnswer(id))?.ToModel(); + } + + public async Task removeAnswer(Answer answer) + { + return (await manager.removeAnswer(answer.ToEntity()))?.ToModel(); + } + + public async Task updateAnswer(uint id, Answer answer) + { + return (await manager.updateAnswer(id, answer.ToEntity()))?.ToModel(); + } + } +} diff --git a/WebApi/DataManagers/ChapterDataManager.cs b/WebApi/DataManagers/ChapterDataManager.cs new file mode 100644 index 0000000..78c5507 --- /dev/null +++ b/WebApi/DataManagers/ChapterDataManager.cs @@ -0,0 +1,59 @@ +using DbConnectionLibrairie; +using EntityManagers; +using ExtensionsClassLibrairie; +using ManagerInterfaces; +using Model; +using OrderCriterias; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataManagers +{ + public class ChapterDataManager(MyDbContext dbContext) : IChapterManager + { + private ChapterEntityManager manager = new ChapterEntityManager(dbContext); + + public async Task addChapter(Chapter chapter) + { + return await Task.FromResult((await manager.addChapter(chapter.ToEntity())).ToModel()); + } + + public async Task getChapter(uint id) + { + return await Task.FromResult((await manager.getChapter(id))?.ToModel()); + } + + public async Task<(int nbPages, IEnumerable? chapters)> getChapters(int nb, int count, ChapterOrderCriteria orderCriteria = ChapterOrderCriteria.ById) + { + List? tmp = new List(); + var res = await manager.getChapters(nb, count, orderCriteria); + if (res.chapters == null) tmp = null; + else + { + foreach (var item in res.chapters) + { + tmp.Add(item.ToModel()); + } + } + return await Task.FromResult<(int nbPages, IEnumerable? chapters)>((res.nbPages, tmp)); + } + + public int getNbElements() + { + return manager.getNbElements(); + } + + public async Task removeChapter(Chapter chapter) + { + return (await manager.removeChapter(chapter.ToEntity()))?.ToModel(); + } + + public async Task removeChapter(uint id) + { + return (await manager.removeChapter(id))?.ToModel(); + } + } +} diff --git a/WebApi/DataManagers/DataManagers.csproj b/WebApi/DataManagers/DataManagers.csproj index 76cd6fc..e4eabc8 100644 --- a/WebApi/DataManagers/DataManagers.csproj +++ b/WebApi/DataManagers/DataManagers.csproj @@ -8,7 +8,9 @@ + + diff --git a/WebApi/DataManagers/LobbyDataManager.cs b/WebApi/DataManagers/LobbyDataManager.cs new file mode 100644 index 0000000..9dd8796 --- /dev/null +++ b/WebApi/DataManagers/LobbyDataManager.cs @@ -0,0 +1,59 @@ +using DbConnectionLibrairie; +using EntityManagers; +using ExtensionsClassLibrairie; +using ManagerInterfaces; +using Model; +using OrderCriterias; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataManagers +{ + public class LobbyDataManager(MyDbContext dbContext) : ILobbyManager + { + private LobbyEntityManager manager = new LobbyEntityManager(dbContext); + + public async Task addLobby(Lobby lobby) + { + return await Task.FromResult((await manager.addLobby(lobby.ToEntity())).ToModel()); + } + + public async Task<(int nbPages, IEnumerable? lobbies)> getLobbies(int nb, int count, LobbyOrderCriteria orderCriteria = LobbyOrderCriteria.ById) + { + List? tmp = new List(); + var res = await manager.getLobbies(nb, count, orderCriteria); + if (res.lobbies == null) tmp = null; + else + { + foreach (var item in res.lobbies) + { + tmp.Add(item.ToModel()); + } + } + return await Task.FromResult<(int nbPages, IEnumerable? lobbies)>((res.nbPages, tmp)); + } + + public async Task getLobby(uint id) + { + return await Task.FromResult((await manager.getLobby(id))?.ToModel()); + } + + public int getNbElements() + { + return manager.getNbElements(); + } + + public async Task removeLobby(Lobby lobby) + { + return (await manager.removeLobby(lobby.ToEntity()))?.ToModel(); + } + + public async Task removeLobby(uint id) + { + return (await manager.removeLobby(id))?.ToModel(); + } + } +} diff --git a/WebApi/DataManagers/PlayerDataManager.cs b/WebApi/DataManagers/PlayerDataManager.cs new file mode 100644 index 0000000..c7c46b2 --- /dev/null +++ b/WebApi/DataManagers/PlayerDataManager.cs @@ -0,0 +1,89 @@ +using DbConnectionLibrairie; +using EntityManagers; +using ExtensionsClassLibrairie; +using ManagerInterfaces; +using Model; +using OrderCriterias; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataManagers +{ + public class PlayerDataManager(MyDbContext dbContext) : IPlayerManager + { + private PlayerEntityManager manager = new PlayerEntityManager(dbContext); + + public async Task addPlayer(Player player) + { + return await Task.FromResult((await manager.addPlayer(player.ToEntity())).ToModel()); + } + + public async Task getMaxScorePlayer(uint id, uint idChapter) + { + return await manager.getMaxScorePlayer(id, idChapter); + } + + public async Task getMaxScorePlayer(uint id) + { + return await manager.getMaxScorePlayer(id); + } + + public int getNbElements() + { + return manager.getNbElements(); + } + + public async Task getPlayer(uint id) + { + return await Task.FromResult((await manager.getPlayer(id))?.ToModel()); + } + + public async Task getPlayer(string nickname) + { + return await Task.FromResult((await manager.getPlayer(nickname))?.ToModel()); + } + + public async Task<(int nbPages, IEnumerable? players)> getPlayers(int nb, int count, PlayerOrderCriteria orderCriteria = PlayerOrderCriteria.ById) + { + List? tmp = new List(); + var res = await manager.getPlayers(nb, count, orderCriteria); + if (res.players == null) tmp = null; + else + { + foreach (var item in res.players) + { + tmp.Add(item.ToModel()); + } + } + return await Task.FromResult<(int nbPages, IEnumerable? players)>((res.nbPages, tmp)); + } + + public async Task?> getPlayersInALobby(uint idLobby) + { + List? tmp = new List(); + var res = await manager.getPlayersInALobby(idLobby); + if (res == null) tmp = null; + else + { + foreach (var item in res) + { + tmp.Add(item.ToModel()); + } + } + return await Task.FromResult?>(tmp); + } + + public async Task removePlayer(Player player) + { + return (await manager.removePlayer(player.ToEntity()))?.ToModel(); + } + + public async Task removePlayer(uint id) + { + return (await manager.removePlayer(id))?.ToModel(); + } + } +} diff --git a/WebApi/DataManagers/QuestionDataManager.cs b/WebApi/DataManagers/QuestionDataManager.cs new file mode 100644 index 0000000..8d9d900 --- /dev/null +++ b/WebApi/DataManagers/QuestionDataManager.cs @@ -0,0 +1,103 @@ +using DbConnectionLibrairie; +using Entities; +using EntityManagers; +using ExtensionsClassLibrairie; +using ManagerInterfaces; +using Model; +using OrderCriterias; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataManagers +{ + public class QuestionDataManager(MyDbContext dbContext) : IQuestionManager + { + + private QuestionEntityManager manager = new QuestionEntityManager(dbContext); + + public async Task addQuestion(Question question) + { + return await Task.FromResult((await manager.addQuestion(question.ToEntity())).ToModel()); + } + + public async Task> addQuestions(IEnumerable questions) + { + var tmp = new List(); + foreach (var question in questions) + { + tmp.Add(question.ToEntity()); + } + var res = await manager.addQuestions(tmp); + var tmp2 = new List(); + foreach (var item in res) + { + tmp2.Add(item.ToModel()); + } + return tmp2; + } + + public int getNbElements() + { + return manager.getNbElements(); + } + + public async Task getQuestion(uint id) + { + return await Task.FromResult((await manager.getQuestion(id))?.ToModel()); + } + + public async Task<(int nbPages, IEnumerable? questions)> getQuestions(int nb, int count, QuestionOrderCriteria orderCriteria = QuestionOrderCriteria.ById) + { + List? tmp = new List(); + var res = await manager.getQuestions(nb, count, orderCriteria); + if (res.questions == null) tmp = null; + else + { + foreach (var item in res.questions) + { + tmp.Add(item.ToModel()); + } + } + return await Task.FromResult<(int nbPages, IEnumerable? questions)>((res.nbPages, tmp)); + } + + public async Task<(int nbPages, IEnumerable? questions)?> getQuestionsByChapterAndDifficulty(int idChapter, int difficulty, int nb, int count, QuestionOrderCriteria orderCriteria = QuestionOrderCriteria.ById) + { + List? tmp = new List(); + var res = await manager.getQuestionsByChapterAndDifficulty(idChapter, difficulty, nb, count, orderCriteria); + if (res == null) return await Task.FromResult<(int nbPages, IEnumerable? questions)?>(null); + if (res.Value.questions == null) tmp = null; + else + { + foreach (var item in res.Value.questions) + { + tmp.Add(item.ToModel()); + } + } + return await Task.FromResult<(int nbPages, IEnumerable? questions)>((res.Value.nbPages, tmp)); + } + + public async Task removeQuestion(Question question) + { + return (await manager.removeQuestion(question.ToEntity()))?.ToModel(); + } + + public async Task removeQuestion(uint id) + { + return (await manager.removeQuestion(id))?.ToModel(); + } + + public async Task updateQuestion(uint id, Question question) + { + return (await manager.updateQuestion(id, question.ToEntity()))?.ToModel(); + } + + public async Task updateQuestionNbFalls(uint id) + { + return (await manager.updateQuestionNbFalls(id))?.ToModel(); + } + } +} diff --git a/WebApi/EntityManagers/PlayerEntityManager.cs b/WebApi/EntityManagers/PlayerEntityManager.cs index 7f9538c..1bd655a 100644 --- a/WebApi/EntityManagers/PlayerEntityManager.cs +++ b/WebApi/EntityManagers/PlayerEntityManager.cs @@ -56,7 +56,7 @@ namespace EntityManagers return await dbContext.Players.Where(p => p.Nickname == nickname).FirstOrDefaultAsync(); } - public async Task<(int nbPage, IEnumerable? players)> getPlayers(int nb, int count, PlayerOrderCriteria orderCriteria = PlayerOrderCriteria.ById) + public async Task<(int nbPages, IEnumerable? players)> getPlayers(int nb, int count, PlayerOrderCriteria orderCriteria = PlayerOrderCriteria.ById) { int nbEl = getNbElements(); if (nb < 0 || count < 0 || nb > nbEl / count) return await Task.FromResult<(int nbPages, IEnumerable? players)>((nbEl / count, null)); diff --git a/WebApi/ManagerInterfaces/IPlayerManager.cs b/WebApi/ManagerInterfaces/IPlayerManager.cs index f51ef26..aa3578a 100644 --- a/WebApi/ManagerInterfaces/IPlayerManager.cs +++ b/WebApi/ManagerInterfaces/IPlayerManager.cs @@ -62,7 +62,7 @@ namespace ManagerInterfaces /// does not exist (<=> (nb-1)*count outside /// boundaries (0, getNbElement()-1))) /// - public Task<(int nbPage, IEnumerable? players)> getPlayers(int nb, int count, PlayerOrderCriteria orderCriteria = PlayerOrderCriteria.ById); + public Task<(int nbPages, IEnumerable? players)> getPlayers(int nb, int count, PlayerOrderCriteria orderCriteria = PlayerOrderCriteria.ById); /// /// get a player /// diff --git a/WebApi/ServiceManagers/AdministratorServiceManager.cs b/WebApi/ServiceManagers/AdministratorServiceManager.cs new file mode 100644 index 0000000..dd2295e --- /dev/null +++ b/WebApi/ServiceManagers/AdministratorServiceManager.cs @@ -0,0 +1,66 @@ +using DbConnectionLibrairie; +using DataManagers; +using ExtensionsClassLibrairie; +using ManagerInterfaces; +using Model; +using OrderCriterias; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using DTOs; + +namespace ToModel +{ + public class AdministratorServiceManager(MyDbContext dbContext) : IAdministratorManager + { + + private AdministratorDataManager manager = new AdministratorDataManager(dbContext); + + public async Task addAdmin(AdministratorDto admin) + { + return await Task.FromResult((await manager.addAdmin(admin.ToModel())).ToDto()); + } + + public async Task getAdministratorByUsername(string username) + { + return await Task.FromResult((await manager.getAdministratorByUsername(username))?.ToDto()); + } + + public async Task<(int nbPages, IEnumerable? administrators)> getAdministrators(int nb, int count, AdministratorOrderCriteria orderCriteria = AdministratorOrderCriteria.ById) + { + List? tmp = new List(); + var res = await manager.getAdministrators(nb, count, orderCriteria); + if (res.administrators == null) tmp = null; + else + { + foreach (var item in res.administrators) + { + tmp.Add(item.ToDto()); + } + } + return await Task.FromResult<(int nbPages, IEnumerable? administrators)>((res.nbPages, tmp)); + } + + public int getNbElements() + { + return manager.getNbElements(); + } + + public async Task removeAdmin(AdministratorDto admin) + { + return (await manager.removeAdmin(admin.ToModel()))?.ToDto(); + } + + public async Task removeAdmin(int id) + { + return (await manager.removeAdmin(id))?.ToDto(); + } + + public async Task setPassword(string username, string newHashedPassword) + { + return await manager.setPassword(username, newHashedPassword); + } + } +} diff --git a/WebApi/ServiceManagers/AnswerServiceManager.cs b/WebApi/ServiceManagers/AnswerServiceManager.cs new file mode 100644 index 0000000..c96f842 --- /dev/null +++ b/WebApi/ServiceManagers/AnswerServiceManager.cs @@ -0,0 +1,81 @@ +using DbConnectionLibrairie; +using DataManagers; +using ExtensionsClassLibrairie; +using ManagerInterfaces; +using Model; +using OrderCriterias; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using DTOs; + +namespace ServiceManagers +{ + public class AnswerServiceManager(MyDbContext dbContext) : IAnswerManager + { + + private AnswerDataManager manager = new AnswerDataManager(dbContext); + + public async Task addAnswer(AnswerDto answerdto) + { + return await Task.FromResult((await manager.addAnswer(answerdto.ToModel())).ToDto()); + } + + public async Task getAnswer(uint id) + { + return await Task.FromResult((await manager.getAnswer(id))?.ToDto()); + } + + public async Task<(int nbPages, IEnumerable? answers)> getAnswers(int nb, int count, AnswerOrderCriteria orderCriteria = AnswerOrderCriteria.ById) + { + List? tmp = new List(); + var res = await manager.getAnswers(nb, count, orderCriteria); + if (res.answers == null) tmp = null; + else + { + foreach (var item in res.answers) + { + tmp.Add(item.ToDto()); + } + } + return await Task.FromResult<(int nbPages, IEnumerable? answers)>((res.nbPages, tmp)); + } + + public async Task?> getAnswersByIdQuestion(uint id) + { + var tmp = await manager.getAnswersByIdQuestion(id); + List? answerdto = new List(); + if (tmp == null) answerdto = null; + else + { + foreach (var item in tmp) + { + answerdto.Add(item.ToDto()); + } + } + return await Task.FromResult?>(answerdto); + } + + public int getNbElements() + { + return manager.getNbElements(); + } + + public async Task removeAnswer(uint id) + { + return (await manager.removeAnswer(id))?.ToDto(); + } + + public async Task removeAnswer(AnswerDto answerdto) + { + return (await manager.removeAnswer(answerdto.ToModel()))?.ToDto(); + } + + public async Task updateAnswer(uint id, AnswerDto answerdto) + { + return (await manager.updateAnswer(id, answerdto.ToModel()))?.ToDto(); + } + } +} diff --git a/WebApi/ServiceManagers/ChapterServiceManager.cs b/WebApi/ServiceManagers/ChapterServiceManager.cs new file mode 100644 index 0000000..5cbf6a9 --- /dev/null +++ b/WebApi/ServiceManagers/ChapterServiceManager.cs @@ -0,0 +1,60 @@ +using DbConnectionLibrairie; +using DataManagers; +using ExtensionsClassLibrairie; +using ManagerInterfaces; +using Model; +using OrderCriterias; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using DTOs; + +namespace ServiceManagers +{ + public class ChapterServiceManager(MyDbContext dbContext) : IChapterManager + { + private ChapterDataManager manager = new ChapterDataManager(dbContext); + + public async Task addChapter(ChapterDto chapterdto) + { + return await Task.FromResult((await manager.addChapter(chapterdto.ToModel())).ToDto()); + } + + public async Task getChapter(uint id) + { + return await Task.FromResult((await manager.getChapter(id))?.ToDto()); + } + + public async Task<(int nbPages, IEnumerable? chapters)> getChapters(int nb, int count, ChapterOrderCriteria orderCriteria = ChapterOrderCriteria.ById) + { + List? tmp = new List(); + var res = await manager.getChapters(nb, count, orderCriteria); + if (res.chapters == null) tmp = null; + else + { + foreach (var item in res.chapters) + { + tmp.Add(item.ToDto()); + } + } + return await Task.FromResult<(int nbPages, IEnumerable? chapters)>((res.nbPages, tmp)); + } + + public int getNbElements() + { + return manager.getNbElements(); + } + + public async Task removeChapter(ChapterDto chapterdto) + { + return (await manager.removeChapter(chapterdto.ToModel()))?.ToDto(); + } + + public async Task removeChapter(uint id) + { + return (await manager.removeChapter(id))?.ToDto(); + } + } +} diff --git a/WebApi/ServiceManagers/LobbyServiceManager.cs b/WebApi/ServiceManagers/LobbyServiceManager.cs new file mode 100644 index 0000000..39ade52 --- /dev/null +++ b/WebApi/ServiceManagers/LobbyServiceManager.cs @@ -0,0 +1,60 @@ +using DbConnectionLibrairie; +using DataManagers; +using ExtensionsClassLibrairie; +using ManagerInterfaces; +using Model; +using OrderCriterias; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using DTOs; + +namespace ServiceManagers +{ + public class LobbyServiceManager(MyDbContext dbContext) : ILobbyManager + { + private LobbyDataManager manager = new LobbyDataManager(dbContext); + + public async Task addLobby(LobbyDto lobbydto) + { + return await Task.FromResult((await manager.addLobby(lobbydto.ToModel())).ToDto()); + } + + public async Task<(int nbPages, IEnumerable? lobbies)> getLobbies(int nb, int count, LobbyOrderCriteria orderCriteria = LobbyOrderCriteria.ById) + { + List? tmp = new List(); + var res = await manager.getLobbies(nb, count, orderCriteria); + if (res.lobbies == null) tmp = null; + else + { + foreach (var item in res.lobbies) + { + tmp.Add(item.ToDto()); + } + } + return await Task.FromResult<(int nbPages, IEnumerable? lobbies)>((res.nbPages, tmp)); + } + + public async Task getLobby(uint id) + { + return await Task.FromResult((await manager.getLobby(id))?.ToDto()); + } + + public int getNbElements() + { + return manager.getNbElements(); + } + + public async Task removeLobby(LobbyDto lobbydto) + { + return (await manager.removeLobby(lobbydto.ToModel()))?.ToDto(); + } + + public async Task removeLobby(uint id) + { + return (await manager.removeLobby(id))?.ToDto(); + } + } +} diff --git a/WebApi/ServiceManagers/PlayerServiceManager.cs b/WebApi/ServiceManagers/PlayerServiceManager.cs new file mode 100644 index 0000000..c45ecfd --- /dev/null +++ b/WebApi/ServiceManagers/PlayerServiceManager.cs @@ -0,0 +1,90 @@ +using DbConnectionLibrairie; +using DataManagers; +using ExtensionsClassLibrairie; +using ManagerInterfaces; +using Model; +using OrderCriterias; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using DTOs; + +namespace ServiceManagers +{ + public class PlayerServiceManager(MyDbContext dbContext) : IPlayerManager + { + private PlayerDataManager manager = new PlayerDataManager(dbContext); + + public async Task addPlayer(PlayerDto playerdto) + { + return await Task.FromResult((await manager.addPlayer(playerdto.ToModel())).ToDto()); + } + + public async Task getMaxScorePlayer(uint id, uint idChapter) + { + return await manager.getMaxScorePlayer(id, idChapter); + } + + public async Task getMaxScorePlayer(uint id) + { + return await manager.getMaxScorePlayer(id); + } + + public int getNbElements() + { + return manager.getNbElements(); + } + + public async Task getPlayer(uint id) + { + return await Task.FromResult((await manager.getPlayer(id))?.ToDto()); + } + + public async Task getPlayer(string nickname) + { + return await Task.FromResult((await manager.getPlayer(nickname))?.ToDto()); + } + + public async Task<(int nbPages, IEnumerable? players)> getPlayers(int nb, int count, PlayerOrderCriteria orderCriteria = PlayerOrderCriteria.ById) + { + List? tmp = new List(); + var res = await manager.getPlayers(nb, count, orderCriteria); + if (res.players == null) tmp = null; + else + { + foreach (var item in res.players) + { + tmp.Add(item.ToDto()); + } + } + return await Task.FromResult<(int nbPages, IEnumerable? players)>((res.nbPages, tmp)); + } + + public async Task?> getPlayersInALobby(uint idLobby) + { + List? tmp = new List(); + var res = await manager.getPlayersInALobby(idLobby); + if (res == null) tmp = null; + else + { + foreach (var item in res) + { + tmp.Add(item.ToDto()); + } + } + return await Task.FromResult?>(tmp); + } + + public async Task removePlayer(PlayerDto playerdto) + { + return (await manager.removePlayer(playerdto.ToModel()))?.ToDto(); + } + + public async Task removePlayer(uint id) + { + return (await manager.removePlayer(id))?.ToDto(); + } + } +} diff --git a/WebApi/ServiceManagers/QuestionServiceManager.cs b/WebApi/ServiceManagers/QuestionServiceManager.cs new file mode 100644 index 0000000..65a49ac --- /dev/null +++ b/WebApi/ServiceManagers/QuestionServiceManager.cs @@ -0,0 +1,104 @@ +using DbConnectionLibrairie; +using DTOs; +using Entities; +using EntityManagers; +using ExtensionsClassLibrairie; +using ManagerInterfaces; +using Model; +using OrderCriterias; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataManagers +{ + public class QuestionServiceManager(MyDbContext dbContext) : IQuestionManager + { + + private QuestionDataManager manager = new QuestionDataManager(dbContext); + + public async Task addQuestion(QuestionDto question) + { + return await Task.FromResult((await manager.addQuestion(question.ToModel())).ToDto()); + } + + public async Task> addQuestions(IEnumerable questions) + { + var tmp = new List(); + foreach (var question in questions) + { + tmp.Add(question.ToModel()); + } + var res = await manager.addQuestions(tmp); + var tmp2 = new List(); + foreach (var item in res) + { + tmp2.Add(item.ToDto()); + } + return tmp2; + } + + public int getNbElements() + { + return manager.getNbElements(); + } + + public async Task getQuestion(uint id) + { + return await Task.FromResult((await manager.getQuestion(id))?.ToDto()); + } + + public async Task<(int nbPages, IEnumerable? questions)> getQuestions(int nb, int count, QuestionOrderCriteria orderCriteria = QuestionOrderCriteria.ById) + { + List? tmp = new List(); + var res = await manager.getQuestions(nb, count, orderCriteria); + if (res.questions == null) tmp = null; + else + { + foreach (var item in res.questions) + { + tmp.Add(item.ToDto()); + } + } + return await Task.FromResult<(int nbPages, IEnumerable? questions)>((res.nbPages, tmp)); + } + + public async Task<(int nbPages, IEnumerable? questions)?> getQuestionsByChapterAndDifficulty(int idChapter, int difficulty, int nb, int count, QuestionOrderCriteria orderCriteria = QuestionOrderCriteria.ById) + { + List? tmp = new List(); + var res = await manager.getQuestionsByChapterAndDifficulty(idChapter, difficulty, nb, count, orderCriteria); + if (res == null) return await Task.FromResult<(int nbPages, IEnumerable? questions)?>(null); + if (res.Value.questions == null) tmp = null; + else + { + foreach (var item in res.Value.questions) + { + tmp.Add(item.ToDto()); + } + } + return await Task.FromResult<(int nbPages, IEnumerable? questions)>((res.Value.nbPages, tmp)); + } + + public async Task removeQuestion(QuestionDto question) + { + return (await manager.removeQuestion(question.ToModel()))?.ToDto(); + } + + public async Task removeQuestion(uint id) + { + return (await manager.removeQuestion(id))?.ToDto(); + } + + public async Task updateQuestion(uint id, QuestionDto question) + { + return (await manager.updateQuestion(id, question.ToModel()))?.ToDto(); + } + + public async Task updateQuestionNbFalls(uint id) + { + return (await manager.updateQuestionNbFalls(id))?.ToDto(); + } + } +} diff --git a/WebApi/ServiceManagers/ServiceManagers.csproj b/WebApi/ServiceManagers/ServiceManagers.csproj new file mode 100644 index 0000000..41bbbd3 --- /dev/null +++ b/WebApi/ServiceManagers/ServiceManagers.csproj @@ -0,0 +1,18 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + + diff --git a/WebApi/UnitTestsEntityManagers/AbstractUnitTestEM.cs b/WebApi/UnitTestsEntityManagers/AbstractUnitTestEM.cs index 9cbca87..c2a9f24 100644 --- a/WebApi/UnitTestsEntityManagers/AbstractUnitTestEM.cs +++ b/WebApi/UnitTestsEntityManagers/AbstractUnitTestEM.cs @@ -15,10 +15,11 @@ namespace UnitTestsEntityManagers public abstract class AbstractUnitTestEM { protected MyDbContext dbContext; + protected HttpClient httpClient; /// /// constructor of the class : - /// initialise the dbContext + /// initialise the database context /// public AbstractUnitTestEM() { @@ -27,6 +28,8 @@ namespace UnitTestsEntityManagers .Options; dbContext = new MyDbContext(opt); + + httpClient = new HttpClient(); } /// @@ -35,7 +38,7 @@ namespace UnitTestsEntityManagers /// ~AbstractUnitTestEM() { - dbContext.DisposeAsync(); + dbContext.Dispose(); } } } diff --git a/WebApi/UnitTestsEntityManagers/UnitTestAnswerManager.cs b/WebApi/UnitTestsEntityManagers/UnitTestAnswerManager.cs index 7526de7..68cde03 100644 --- a/WebApi/UnitTestsEntityManagers/UnitTestAnswerManager.cs +++ b/WebApi/UnitTestsEntityManagers/UnitTestAnswerManager.cs @@ -22,22 +22,19 @@ namespace UnitTestsEntityManagers /// test of the 'ajouterAnswer' method of an AnswerManager /// [Fact] - public void TestAjouterAnswer() + public async void TestAjouterAnswer() { - var answerToAdd = new AnswerEntity { Id = -1, Content = "châteîgne" }; - var a = mgr.ajouterAnswer(answerToAdd); - // 1) with an id less than 0 - // WF : it works so 'a' is not null, - // his content is equal to the - // content of 'answerToAdd' - // and since it's the first answer - // that we add, his id equal 0 + var answerToAdd = new AnswerEntity { Id = 0, Content = "damien" }; + var a = await mgr.addAnswer(answerToAdd); + // 1) normal insertion + // WF : it work perfectally + // and a is the same as answerToAdd Assert.NotNull(a); Assert.Equal(answerToAdd.Content, a.Content); - Assert.NotEqual(0, a.Id); + Assert.Equal(answerToAdd.Id, a.Id); answerToAdd = new AnswerEntity { Id = 5, Content = "damien" }; - a = mgr.ajouterAnswer(answerToAdd); + a = await mgr.addAnswer(answerToAdd); // 2) with a random id greater than 0 // WF : it works so 'a' is not null, // his content is equal to the @@ -46,16 +43,16 @@ namespace UnitTestsEntityManagers // that we add, his id equal 1 Assert.NotNull(a); Assert.Equal(answerToAdd.Content, a.Content); - Assert.NotEqual(1, a.Id); + Assert.NotEqual((uint)1, a.Id); answerToAdd = new AnswerEntity { Id = 7, Content = "châteîgne" }; - a = mgr.ajouterAnswer(answerToAdd); + a = await mgr.addAnswer(answerToAdd); // 3) with a content that we already have added // WF : it don't works so 'a' is null Assert.Null(a); answerToAdd = new AnswerEntity { Id = 7, Content = "CHÂTEÎGNE" }; - a = mgr.ajouterAnswer(answerToAdd); + a = await mgr.addAnswer(answerToAdd); // 3) with a content that we already have added // but in upperCase instead of lowerCase // WF : it don't works so 'a' is null @@ -66,40 +63,34 @@ namespace UnitTestsEntityManagers /// test of the 'supprimerAnswer' method of an AnswerManager /// [Fact] - public void TestSupprimerAnswer() + public async Task TestSupprimerAnswer() { // remember that we have only 2 answers in the database : // 1) (0, "châteigne") // 2) (1, "damien") - var a = mgr.supprimerAnswer(-3); - // 1) with an id less than 0 - // WF : it don't work because there's no - // negative id so 'a' is null - Assert.Null(a); - - a = mgr.supprimerAnswer(3); - // 2) with an id greater or equal + var a = await mgr.removeAnswer(2); + // 1) with an id greater or equal // to the number of element // WF : it don't works so 'a' is null, Assert.Null(a); - a = mgr.supprimerAnswer(0); + a = await mgr.removeAnswer(0); // 1) with an id that belongs to an answer // WF : it works so 'a' is not null, // and since we've delete the answer with // the id 0, the content is "châteigne" Assert.NotNull(a); - Assert.Equal(0, a.Id); + Assert.Equal((uint)0, a.Id); Assert.Equal("châteigne", a.Content); - a = mgr.supprimerAnswer(0); + a = await mgr.removeAnswer(1); // 1) same thing with the id 1 just - // for cleaning the database + // to clean the database // WF : it works so 'a' is not null, // and since we've delete the answer with // the id 1, the content is "damien" Assert.NotNull(a); - Assert.Equal(0, a.Id); + Assert.Equal((uint)0, a.Id); Assert.Equal("damien", a.Content); // now, the database should be clean @@ -112,18 +103,18 @@ namespace UnitTestsEntityManagers /// test of the 'getNbElement' method of an AnswerManager /// [Fact] - public void TestGetNbElement() + public async Task TestGetNbElement() { - Assert.Equal(0, mgr.getNbElement()); // just to be sure + Assert.Equal(0, mgr.getNbElements()); // just to be sure Assert.NotNull(answers); // just to be sure int count = 0; foreach (var answer in answers) { - mgr.ajouterAnswer(answer); + await mgr.addAnswer(answer); count++; - Assert.Equal(count, mgr.getNbElement()); + Assert.Equal(count, mgr.getNbElements()); } } diff --git a/WebApi/UnitTestsEntityManagers/UnitTestsEntityManagers.csproj b/WebApi/UnitTestsEntityManagers/UnitTestsEntityManagers.csproj index ef25513..ceec912 100644 --- a/WebApi/UnitTestsEntityManagers/UnitTestsEntityManagers.csproj +++ b/WebApi/UnitTestsEntityManagers/UnitTestsEntityManagers.csproj @@ -12,7 +12,7 @@ - + diff --git a/WebApi/WebApi.sln b/WebApi/WebApi.sln index 2d8a8d3..dfcaa8a 100644 --- a/WebApi/WebApi.sln +++ b/WebApi/WebApi.sln @@ -17,16 +17,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrderCriterias", "OrderCrit EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTestsEntityManagers", "UnitTestsEntityManagers\UnitTestsEntityManagers.csproj", "{6E2E46BB-91F0-4F5C-B378-A54E4F80ED0C}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FakeDatas", "FakeDatas", "{295BDC09-893D-4862-8F6C-6B65FACCB802}" - ProjectSection(SolutionItems) = preProject - fake-Answers.json = fake-Answers.json - EndProjectSection -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Model", "Model\Model.csproj", "{95E60A3C-AB3C-4B8F-BAA2-EEB899E12CE7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExtensionsClassLibrairie", "ExtensionsClassLibrairie\ExtensionsClassLibrairie.csproj", "{66AAAC2F-10B0-4F29-971C-3548EB34B621}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataManagers", "DataManagers\DataManagers.csproj", "{C609569C-353E-4F1A-BDEE-7C686FBDA084}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataManagers", "DataManagers\DataManagers.csproj", "{C609569C-353E-4F1A-BDEE-7C686FBDA084}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceManagers", "ServiceManagers\ServiceManagers.csproj", "{5E2AC4B3-3DC6-48CF-9F90-5EDFFCF0A385}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebApi", "WebApi\WebApi.csproj", "{7A65FECF-F4F5-4D88-853D-F21A3BAA5E39}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -74,6 +73,14 @@ Global {C609569C-353E-4F1A-BDEE-7C686FBDA084}.Debug|Any CPU.Build.0 = Debug|Any CPU {C609569C-353E-4F1A-BDEE-7C686FBDA084}.Release|Any CPU.ActiveCfg = Release|Any CPU {C609569C-353E-4F1A-BDEE-7C686FBDA084}.Release|Any CPU.Build.0 = Release|Any CPU + {5E2AC4B3-3DC6-48CF-9F90-5EDFFCF0A385}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5E2AC4B3-3DC6-48CF-9F90-5EDFFCF0A385}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5E2AC4B3-3DC6-48CF-9F90-5EDFFCF0A385}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5E2AC4B3-3DC6-48CF-9F90-5EDFFCF0A385}.Release|Any CPU.Build.0 = Release|Any CPU + {7A65FECF-F4F5-4D88-853D-F21A3BAA5E39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7A65FECF-F4F5-4D88-853D-F21A3BAA5E39}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7A65FECF-F4F5-4D88-853D-F21A3BAA5E39}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7A65FECF-F4F5-4D88-853D-F21A3BAA5E39}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/WebApi/WebApi/Controllers/WeatherForecastController.cs b/WebApi/WebApi/Controllers/WeatherForecastController.cs new file mode 100644 index 0000000..e08016f --- /dev/null +++ b/WebApi/WebApi/Controllers/WeatherForecastController.cs @@ -0,0 +1,33 @@ +using Microsoft.AspNetCore.Mvc; + +namespace WebApi.Controllers +{ + [ApiController] + [Route("[controller]")] + public class WeatherForecastController : ControllerBase + { + private static readonly string[] Summaries = new[] + { + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + }; + + private readonly ILogger _logger; + + public WeatherForecastController(ILogger logger) + { + _logger = logger; + } + + [HttpGet(Name = "GetWeatherForecast")] + public IEnumerable Get() + { + return Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = Summaries[Random.Shared.Next(Summaries.Length)] + }) + .ToArray(); + } + } +} diff --git a/WebApi/WebApi/Program.cs b/WebApi/WebApi/Program.cs new file mode 100644 index 0000000..48863a6 --- /dev/null +++ b/WebApi/WebApi/Program.cs @@ -0,0 +1,25 @@ +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. + +builder.Services.AddControllers(); +// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} + +app.UseHttpsRedirection(); + +app.UseAuthorization(); + +app.MapControllers(); + +app.Run(); diff --git a/WebApi/WebApi/Properties/launchSettings.json b/WebApi/WebApi/Properties/launchSettings.json new file mode 100644 index 0000000..9cf9895 --- /dev/null +++ b/WebApi/WebApi/Properties/launchSettings.json @@ -0,0 +1,41 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:6506", + "sslPort": 44397 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "http://localhost:5293", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "https://localhost:7194;http://localhost:5293", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/WebApi/WebApi/WeatherForecast.cs b/WebApi/WebApi/WeatherForecast.cs new file mode 100644 index 0000000..7b55bf8 --- /dev/null +++ b/WebApi/WebApi/WeatherForecast.cs @@ -0,0 +1,13 @@ +namespace WebApi +{ + public class WeatherForecast + { + public DateOnly Date { get; set; } + + public int TemperatureC { get; set; } + + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + + public string? Summary { get; set; } + } +} diff --git a/WebApi/WebApi/WebApi.csproj b/WebApi/WebApi/WebApi.csproj new file mode 100644 index 0000000..9daa180 --- /dev/null +++ b/WebApi/WebApi/WebApi.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + + diff --git a/WebApi/WebApi/WebApi.http b/WebApi/WebApi/WebApi.http new file mode 100644 index 0000000..08a4548 --- /dev/null +++ b/WebApi/WebApi/WebApi.http @@ -0,0 +1,6 @@ +@WebApi_HostAddress = http://localhost:5293 + +GET {{WebApi_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/WebApi/WebApi/appsettings.Development.json b/WebApi/WebApi/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/WebApi/WebApi/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/WebApi/WebApi/appsettings.json b/WebApi/WebApi/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/WebApi/WebApi/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +}