From a2baa82630c5b9b9ea0fc43443c859e53aaf79f1 Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Sat, 25 Feb 2023 20:57:22 +0100 Subject: [PATCH] :hammer: update class gameController + ajout mapper + modif dbdatamanager --- code/server/ApiLeapHit/ApiLeapHit.csproj | 4 +- .../ApiLeapHit/Controllers/ChatController.cs | 28 +++ .../ApiLeapHit/Controllers/GameController.cs | 187 ++++++++++++++---- code/server/ApiLeapHit/Mapper/GameMapper.cs | 32 +++ .../Mapper/GameWithIdPlayerMapper.cs | 19 ++ code/server/ApiLeapHit/Mapper/PlayerMapper.cs | 20 ++ code/server/ApiLeapHit/Program.cs | 8 +- code/server/ApiLeapHit/appsettings.json | 11 +- code/server/DTO/DTOGameWithIdPlayer.cs | 17 ++ code/server/DTO/Factory/ApiResponse.cs | 20 ++ .../DataManager/DbDataManager.Chat.cs | 11 ++ .../DataManager/DbDataManager.Game.cs | 27 +++ .../DataManager/DbDataManager.Message.cs | 9 + code/server/DataBase/PongDB.db | Bin 57344 -> 57344 bytes code/server/DataBase/PongDB.db-shm | Bin 32768 -> 0 bytes code/server/DataBase/PongDB.db-wal | Bin 57712 -> 0 bytes 16 files changed, 353 insertions(+), 40 deletions(-) create mode 100644 code/server/ApiLeapHit/Mapper/GameMapper.cs create mode 100644 code/server/ApiLeapHit/Mapper/GameWithIdPlayerMapper.cs create mode 100644 code/server/ApiLeapHit/Mapper/PlayerMapper.cs create mode 100644 code/server/DTO/DTOGameWithIdPlayer.cs create mode 100644 code/server/DTO/Factory/ApiResponse.cs delete mode 100644 code/server/DataBase/PongDB.db-shm delete mode 100644 code/server/DataBase/PongDB.db-wal diff --git a/code/server/ApiLeapHit/ApiLeapHit.csproj b/code/server/ApiLeapHit/ApiLeapHit.csproj index f5db561..56b0e8b 100644 --- a/code/server/ApiLeapHit/ApiLeapHit.csproj +++ b/code/server/ApiLeapHit/ApiLeapHit.csproj @@ -1,4 +1,4 @@ - + net6.0 @@ -7,7 +7,9 @@ + + diff --git a/code/server/ApiLeapHit/Controllers/ChatController.cs b/code/server/ApiLeapHit/Controllers/ChatController.cs index 0856c37..d04390f 100644 --- a/code/server/ApiLeapHit/Controllers/ChatController.cs +++ b/code/server/ApiLeapHit/Controllers/ChatController.cs @@ -36,6 +36,34 @@ namespace ApiLeapHit.Controllers return Ok(); } + [HttpGet] + public async Task>> GetChats() + { + var chats = await _dataManager.GetChats(); + if (chats == null) + { + return NotFound(); + } + + var dtoChats = new List(); + foreach (var chat in chats) + { + var player1 = await _dataManager.GetPlayer(chat.player1); + var player2 = await _dataManager.GetPlayer(chat.player2); + + var dtoChat = new DTOChat + { + chatId = chat.chatId, + PlayerId1 = new DTOPlayer { playerId = player1.playerId, name = player1.name }, + PlayerId2 = new DTOPlayer { playerId = player2.playerId, name = player2.name } + }; + + dtoChats.Add(dtoChat); + } + + return Ok(dtoChats); + } + [HttpDelete("{id}")] public async Task RemoveChat(int id) { diff --git a/code/server/ApiLeapHit/Controllers/GameController.cs b/code/server/ApiLeapHit/Controllers/GameController.cs index 1796034..ca580b8 100644 --- a/code/server/ApiLeapHit/Controllers/GameController.cs +++ b/code/server/ApiLeapHit/Controllers/GameController.cs @@ -1,10 +1,13 @@ -using DataBase.DataManager; +using ApiLeapHit.Mapper; +using DataBase.DataManager; using DataBase.Entity; using DTO; +using DTO.Factory; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.Diagnostics; using System.Net; +using System.Text; namespace ApiLeapHit.Controllers { @@ -14,69 +17,181 @@ namespace ApiLeapHit.Controllers { private readonly DbDataManager _dataManager; + private readonly ILogger _logger; - public GameController(DbDataManager dataManager) + public GameController(DbDataManager dataManager, ILogger logger) { _dataManager = dataManager; + _logger = logger; } [HttpGet("{id}")] public async Task> GetGame(int id) { - var game = await _dataManager.GetGame(id); - if (game == null) + try { - return NotFound(); + var game = await _dataManager.GetGame(id); + if (game == null) + { + return NotFound(new ApiResponse("La game avec l'identifiant " + id + " n'existe pas.")); + } + var winner = await _dataManager.GetPlayer(game.winner); + //if (winner == null) + //{ + // return NotFound("Le joueur avec l'identifiant " + game.winner + " n'existe pas."); + //} + + var loser = await _dataManager.GetPlayer(game.loser); + //if (loser == null) + //{ + // return NotFound("Le joueur avec l'identifiant " + game.loser + " n'existe pas."); + //} + + return Ok(new ApiResponse("Récupération de la game réussie.", game.ToDto(winner, loser))); + } + catch (Exception ex) + { + return StatusCode(500, new ApiResponse("Une erreur est survenue lors de la récupération des données : " + ex.Message)); } + } - var winner = await _dataManager.GetPlayer(game.winner); - var loser = await _dataManager.GetPlayer(game.loser); + [HttpGet] + public async Task>> GetGames() + { + try + { + var games = await _dataManager.GetGames(); + if (games == null) + { + return NotFound(new ApiResponse>("Aucune game n'ont été trouvées.")); + } + //StringBuilder errorMessage = new StringBuilder(); + var dtoGames = new List(); + foreach (var game in games) + { + var winner = await _dataManager.GetPlayer(game.winner); + var loser = await _dataManager.GetPlayer(game.loser); - var dtoGame = new DTOGame + //if (winner == null || loser == null) + //{ + // errorMessage.Append("Le joueur gagnant ou le joueur perdant n'existe pas pour le jeu avec l'identifiant "); + // errorMessage.Append(game.gameId); + // errorMessage.Append("."); + // break; + //} + dtoGames.Add(game.ToDto(winner, loser)); + } + + //if (errorMessage.Length > 0) + //{ + // return NotFound(errorMessage.ToString()); + //} + return Ok(new ApiResponse>("La récupération des games à réussit." , dtoGames)); + } + catch (Exception ex) { - gameId = game.gameId, - durationGame = game.durationGame, - nbMaxEchanges = game.nbMaxEchanges, - playerWinner = new DTOPlayer { playerId = winner.playerId, name = winner.name, nbBallTouchTotal = winner.nbBallTouchTotal, timePlayed = winner.timePlayed }, - playerLoser = new DTOPlayer + return StatusCode(500, new ApiResponse("Une erreur est survenue lors de la récupération des données : " + ex.Message)); + } + } + + [HttpGet("byPlayer/{id}")] + public async Task>> GetGameByIdPlayer(int id) + { + try { + var games = await _dataManager.GetGameById(id); + if (games == null || games.Count == 0) { - playerId = loser.playerId, - name = loser.name, - nbBallTouchTotal = loser.nbBallTouchTotal, - timePlayed = loser.timePlayed + return NotFound(new ApiResponse>("Aucune game trouvé pour le joueur avec l'id : " + id)); } - }; - return Ok(dtoGame); + //StringBuilder errorMessage = new StringBuilder(); + var dtoGames = new List(); + foreach (var game in games) + { + var winner = await _dataManager.GetPlayer(game.winner); + var loser = await _dataManager.GetPlayer(game.loser); + + + //if (winner == null) + //{ + // errorMessage.Append("Le joueur gagnant n'existe pas pour le jeu avec l'identifiant "); + // errorMessage.Append(game.gameId); + // errorMessage.Append("."); + // break; + //} + + //if (loser == null) + //{ + // errorMessage.Append("Le joueur perdant n'existe pas pour le jeu avec l'identifiant "); + // errorMessage.Append(game.gameId); + // errorMessage.Append("."); + // break; + //} + + dtoGames.Add(game.ToDto(winner, loser)); + } + + //if (errorMessage.Length > 0) + //{ + // return NotFound(errorMessage.ToString()); + //} + return Ok(new ApiResponse>("Récupérations réussis des games pour le joueur " + id, dtoGames)); + } + catch (Exception ex) + { + return StatusCode(500, new ApiResponse("Une erreur est survenue lors de la récupération des données : " + ex.Message)); + } } [HttpPost] - public async Task AddGame([FromBody] DTOGame dtoGame) + public async Task AddGame([FromBody] DTOGameWithIdPlayer dtoGame) { - var winner = await _dataManager.GetPlayer(dtoGame.playerWinner.playerId); - var loser = await _dataManager.GetPlayer(dtoGame.playerLoser.playerId); + try { + var winner = await _dataManager.GetPlayer(dtoGame.playerWinner); + var loser = await _dataManager.GetPlayer(dtoGame.playerLoser); + + //StringBuilder errorMessage = new StringBuilder(); + + //if (winner == null) + //{ + // errorMessage.Append("Le joueur gagnant avec l'identifiant "); + // errorMessage.Append(dtoGame.playerWinner.playerId); + // errorMessage.Append(" n'existe pas."); + // return NotFound(errorMessage.ToString()); + //} - var game = new Game + //if (loser == null) + //{ + // errorMessage.Append("Le joueur perdant avec l'identifiant "); + // errorMessage.Append(dtoGame.playerLoser.playerId); + // errorMessage.Append(" n'existe pas."); + // return NotFound(errorMessage.ToString()); + //} + + var game = dtoGame.ToGame(winner, loser); + return Ok(new ApiResponse("La game a été ajoutée avec succès.", game)); + } + catch (Exception ex) { - durationGame = dtoGame.durationGame, - nbMaxEchanges = dtoGame.nbMaxEchanges, - winner = winner.playerId, - loser = loser.playerId - }; - - await _dataManager.AddGame(game); - return Ok(); + return StatusCode(500, new ApiResponse("Une erreur est survenue lors de la récupération des données : " + ex.Message)); + } } - [HttpDelete("{id}")] + [HttpDelete("{id}")] public async Task RemoveGame(int id) { - var result = await _dataManager.RemoveGame(id); - if (result) + try { + var result = await _dataManager.RemoveGame(id); + if (result) + { + return Ok(new ApiResponse( "La game avec l'identifiant " + id + " a été supprimée avec succès.")); + } + return NotFound(new ApiResponse("La game avec l'identifiant " + id + " n'existe pas.")); + } + catch (Exception ex) { - return Ok(result); + return StatusCode(500, new ApiResponse("Une erreur est survenue lors de la récupération des données : " + ex.Message)); } - return NotFound(result); } } } diff --git a/code/server/ApiLeapHit/Mapper/GameMapper.cs b/code/server/ApiLeapHit/Mapper/GameMapper.cs new file mode 100644 index 0000000..fe6f6db --- /dev/null +++ b/code/server/ApiLeapHit/Mapper/GameMapper.cs @@ -0,0 +1,32 @@ +using DataBase.Entity; +using DTO; + +namespace ApiLeapHit.Mapper +{ + public static class GameMapper + { + public static DTOGame ToDto(this Game game, Player winner, Player loser) + { + DTOGame dtoGame = new DTOGame() + { + gameId = game.gameId, + durationGame = game.durationGame, + nbMaxEchanges = game.nbMaxEchanges, + playerWinner = winner.ToDto(), + playerLoser = loser.ToDto() + }; + return dtoGame; + } + + public static Game ToGame(this DTOGame dtoGame, Player winner, Player loser) + { + return new Game + { + durationGame = dtoGame.durationGame, + nbMaxEchanges = dtoGame.nbMaxEchanges, + winner = winner.playerId, + loser = loser.playerId + }; + } + } +} diff --git a/code/server/ApiLeapHit/Mapper/GameWithIdPlayerMapper.cs b/code/server/ApiLeapHit/Mapper/GameWithIdPlayerMapper.cs new file mode 100644 index 0000000..33fa3d2 --- /dev/null +++ b/code/server/ApiLeapHit/Mapper/GameWithIdPlayerMapper.cs @@ -0,0 +1,19 @@ +using DataBase.Entity; +using DTO; + +namespace ApiLeapHit.Mapper +{ + public static class GameWithIdPlayerMapper + { + public static Game ToGame(this DTOGameWithIdPlayer dtoGame, Player winner, Player loser) + { + return new Game + { + durationGame = dtoGame.durationGame, + nbMaxEchanges = dtoGame.nbMaxEchanges, + winner = winner.playerId, + loser = loser.playerId + }; + } + } +} diff --git a/code/server/ApiLeapHit/Mapper/PlayerMapper.cs b/code/server/ApiLeapHit/Mapper/PlayerMapper.cs new file mode 100644 index 0000000..b828e76 --- /dev/null +++ b/code/server/ApiLeapHit/Mapper/PlayerMapper.cs @@ -0,0 +1,20 @@ +using DataBase.Entity; +using DTO; + +namespace ApiLeapHit.Mapper +{ + public static class PlayerMapper + { + public static DTOPlayer ToDto(this Player player) + { + DTOPlayer dtoPlayer = new DTOPlayer() + { + playerId = player.playerId, + name = player.name, + nbBallTouchTotal = player.nbBallTouchTotal, + timePlayed = player.timePlayed + }; + return dtoPlayer; + } + } +} diff --git a/code/server/ApiLeapHit/Program.cs b/code/server/ApiLeapHit/Program.cs index 672700e..8df64de 100644 --- a/code/server/ApiLeapHit/Program.cs +++ b/code/server/ApiLeapHit/Program.cs @@ -1,15 +1,19 @@ using DataBase.DataManager; +using Microsoft.Extensions.Logging; 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(); builder.Services.AddScoped(); //builder.Services.AddSingleton(); + +// Add logging +builder.Logging.AddConsole(); + var app = builder.Build(); // Configure the HTTP request pipeline. @@ -25,4 +29,4 @@ app.UseAuthorization(); app.MapControllers(); -app.Run(); +app.Run(); \ No newline at end of file diff --git a/code/server/ApiLeapHit/appsettings.json b/code/server/ApiLeapHit/appsettings.json index 10f68b8..7300b2a 100644 --- a/code/server/ApiLeapHit/appsettings.json +++ b/code/server/ApiLeapHit/appsettings.json @@ -2,7 +2,16 @@ "Logging": { "LogLevel": { "Default": "Information", - "Microsoft.AspNetCore": "Warning" + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + }, + "Console": { + "IncludeScopes": true, + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } } }, "AllowedHosts": "*" diff --git a/code/server/DTO/DTOGameWithIdPlayer.cs b/code/server/DTO/DTOGameWithIdPlayer.cs new file mode 100644 index 0000000..a586a0b --- /dev/null +++ b/code/server/DTO/DTOGameWithIdPlayer.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DTO +{ + public class DTOGameWithIdPlayer + { + public int gameId { get; set; } + public int durationGame { get; set; } + public int nbMaxEchanges { get; set; } + public int playerWinner { get; set; } + public int playerLoser { get; set; } + } +} diff --git a/code/server/DTO/Factory/ApiResponse.cs b/code/server/DTO/Factory/ApiResponse.cs new file mode 100644 index 0000000..e6db510 --- /dev/null +++ b/code/server/DTO/Factory/ApiResponse.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DTO.Factory +{ + public class ApiResponse + { + public string Message { get; set; } + public T Data { get; set; } + + public ApiResponse(string message, T data = default) + { + Message = message; + Data = data; + } + } +} diff --git a/code/server/DataBase/DataManager/DbDataManager.Chat.cs b/code/server/DataBase/DataManager/DbDataManager.Chat.cs index 683019d..bb38ac7 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Chat.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Chat.cs @@ -33,5 +33,16 @@ namespace DataBase.DataManager return false; } } + + public Task> GetChats() + { + using (var context = new PongDbContext()) + { + var chats = context.Chats.ToList(); + return Task.FromResult(chats); + } + } + + } } diff --git a/code/server/DataBase/DataManager/DbDataManager.Game.cs b/code/server/DataBase/DataManager/DbDataManager.Game.cs index 6b41046..0b72229 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Game.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Game.cs @@ -42,5 +42,32 @@ namespace DataBase.DataManager return Task.FromResult(game); } } + + public Task> GetGameById(int id) + { + using (var context = new PongDbContext()) + { + var games = context.Games.Where(g => g.winner == id || g.loser == id).ToList(); + return Task.FromResult(games); + } + } + + public Task> GetGames() + { + using (var context = new PongDbContext()) + { + var games = context.Games.ToList(); + return Task.FromResult(games); + } + } + + public Task GetNbGames() + { + using (var context = new PongDbContext()) + { + var nbgames = context.Games.ToList().Count(); + return Task.FromResult(nbgames); + } + } } } diff --git a/code/server/DataBase/DataManager/DbDataManager.Message.cs b/code/server/DataBase/DataManager/DbDataManager.Message.cs index 60ffad9..b0ba7a7 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Message.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Message.cs @@ -43,5 +43,14 @@ namespace DataBase.DataManager return false; } } + + public Task> GetMessages() + { + using (var context = new PongDbContext()) + { + var messages = context.Messages.ToList(); + return Task.FromResult(messages); + } + } } } diff --git a/code/server/DataBase/PongDB.db b/code/server/DataBase/PongDB.db index 1c57f161dd4a65412d7ed28da3008f03c55c15bb..3905c29bfea6fa6cd337514c2e01aa02d655ab00 100644 GIT binary patch delta 296 zcmYk0u}T9$6h+^gH?!{3$juf(MTHc8h#+Vseo+#BTA#ici!(O@hH3(P{+n_w?xHpa0f<%SBzgbME%<1u92 zdu(f(Mz&@X`YrNTLUqw;8+?VVd_#vQF(RV6-b^eBOH>WosfiU|*ZKLY~;3;#t1{?Gg``S0^z+$<}OE`0I4rFtN;K2 diff --git a/code/server/DataBase/PongDB.db-shm b/code/server/DataBase/PongDB.db-shm deleted file mode 100644 index d561b7d0046254a9cd36b187d1392c8b1896ae81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI*O=jGnq-ew}LKqKYoAUj8w)xnv7hlEa+s}M@+%89}-6r;tVw>tT?&YdZ-`X*|F?&~ad=&%;5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNApS%D%vS9Wa{M&P~z-SULR`~Ji11ga^}2OP#b|}d51u4wrisVGJ)3Rrj4vqNq_(W0t5&UAV7cs0RjXF5FkK+ R009C72oNAZfWSiu`~!2FDLw!I diff --git a/code/server/DataBase/PongDB.db-wal b/code/server/DataBase/PongDB.db-wal deleted file mode 100644 index 5fe8801ae09bceef01abbdf661a75c451ad9c40e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57712 zcmeI*J7^R^9LMpQo!!k%UK0d~ctl%4f{IEA+K7mV1|ty!HN}ZXRJ70eXfloSer zAgG`S3L=PNXO%}|EYg|E2ShH$2Qef^ycEvtdf`qmwmSI^+_JZ~#r;3K)t~+Euj4{| zNwj}hAw-LCYe?SR_3rTc(yGhho7Zr>NLuj|JwlFf(?;LI42-5I_I{1Q0*~ z0R#|00D=Erpe~3-CZlDbWh|uBa$DpY2Mw;UN?+j7Nr<%n@+IAbi3+& z*ojo$JNR7f-MA@UJDKJbP6;z-rhF8mCIk>b009ILKmY**5I_I{1eT;gtU{Yn7zB|F zg?;y+HE{19T<8n*%q(j=v}XC%G>>4`%@NElNhgX%009ILKmY**5I_I{1Q0;LTY)5~ zQ2ojya4mp^oWds;_naFW-S9N+3)nn@vJE9*A%Fk^2q1s}0tg_000IagfPg;&X{QwahHAbApT$M+_90B(Y0tg_000IagfB*srAb