From f48b5e2fc759c0b1a2a1892345380de6a23ce3ed Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Wed, 1 Mar 2023 14:01:49 +0100 Subject: [PATCH 1/5] =?UTF-8?q?=F0=9F=93=88=20DockerFile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/Dockerfile | 41 +++++++++++++++++------------------------ 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/code/Dockerfile b/code/Dockerfile index 1285831..a9ae473 100644 --- a/code/Dockerfile +++ b/code/Dockerfile @@ -1,30 +1,23 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build - -# Premičre étape de la construction -WORKDIR /app/server -RUN dotnet new console -COPY Server/Program.cs Program.cs -RUN dotnet publish -c Release -o out +FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base +WORKDIR /app +EXPOSE 80 +EXPOSE 443 -# Deuxičme étape de la construction -WORKDIR /app/api -COPY ApiLeapHit/ApiLeapHit.csproj . -COPY DTO/DTO.csproj DTO/ -COPY DataBase/DataBase.csproj DataBase/ -RUN dotnet restore +FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build +WORKDIR /src +COPY ["server/ApiLeapHit/ApiLeapHit.csproj", "ApiLeapHit/"] +COPY ["server/DTO/DTO.csproj", "DTO/"] +COPY ["server/DataBase/DataBase.csproj", "DataBase/"] +RUN dotnet restore "server/ApiLeapHit/ApiLeapHit.csproj" COPY . . -WORKDIR /app/api/ApiLeapHit -RUN dotnet build -c Release -o /app/build +WORKDIR "/src/ApiLeapHit" +RUN dotnet build "ApiLeapHit.csproj" -c Release -o /app/build -# Troisičme étape de la construction -FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS final -WORKDIR /app -COPY --from=build /app/server/out . -COPY --from=build /app/api/build . +FROM build AS publish +RUN dotnet publish "ApiLeapHit.csproj" -c Release -o /app/publish -# Configuration de l'application -EXPOSE 80 -EXPOSE 443 -EXPOSE 3131 +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "ApiLeapHit.dll"] From 2c89f32cf64abf888c4b408f8fa8180e3a22ef78 Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Tue, 7 Mar 2023 10:03:27 +0100 Subject: [PATCH 2/5] :memo: Dockerfile Test --- .../Controllers/MessageController.cs | 12 ++-- .../Controllers/PlayerController.cs | 66 +++++++++--------- code/server/DTO/Factory/ApiResponse.cs | 3 +- code/server/DataBase/PongDB.db | Bin 57344 -> 57344 bytes code/server/DataBase/PongDB.db-shm | Bin 0 -> 32768 bytes code/server/DataBase/PongDB.db-wal | 0 code/server/{ApiLeapHit => }/Dockerfile | 0 .../TestControleurs/TestControleurs.csproj | 1 + code/server/TestControleurs/UnitTestGames.cs | 13 ++-- 9 files changed, 48 insertions(+), 47 deletions(-) create mode 100644 code/server/DataBase/PongDB.db-shm create mode 100644 code/server/DataBase/PongDB.db-wal rename code/server/{ApiLeapHit => }/Dockerfile (100%) diff --git a/code/server/ApiLeapHit/Controllers/MessageController.cs b/code/server/ApiLeapHit/Controllers/MessageController.cs index 48125af..bb1422f 100644 --- a/code/server/ApiLeapHit/Controllers/MessageController.cs +++ b/code/server/ApiLeapHit/Controllers/MessageController.cs @@ -84,12 +84,12 @@ namespace ApiLeapHit.Controllers return NotFound(new ApiResponse("Le message n'a pas Ă©tĂ© trouvĂ©.")); } - var response = new ApiResponse("Joueur ajoutĂ© avec succès."); - response.Links.Add(new ApiLink( - Url.Action("GetPlayer", "Player", new { id = player.playerId }), - "self", - "GET" - )); + //var response = new ApiResponse("Joueur ajoutĂ© avec succès."); + //response.Links.Add(new ApiLink( + // Url.Action("GetPlayer", "Player", new { id = player.playerId }), + // "self", + // "GET" + //)); _logger.LogInformation($"Le message avec l'identifiant {id} a Ă©tĂ© reçu avec succès."); return Ok(new ApiResponse("Message reçu avec succès.", message.ToDto())); diff --git a/code/server/ApiLeapHit/Controllers/PlayerController.cs b/code/server/ApiLeapHit/Controllers/PlayerController.cs index f6f16c2..dde6a8b 100644 --- a/code/server/ApiLeapHit/Controllers/PlayerController.cs +++ b/code/server/ApiLeapHit/Controllers/PlayerController.cs @@ -62,7 +62,7 @@ namespace ApiLeapHit.Controllers } [HttpPost] - public async Task AddPlayer([FromBody] DTOPlayer dtoPlayer) + public async Task>> AddPlayer([FromBody] DTOPlayer dtoPlayer) { try { @@ -70,10 +70,12 @@ namespace ApiLeapHit.Controllers await _dataManager.AddPlayer(player); + var url = Url.Action("GetPlayer", "Player", new { id = 9 }); + // Ajout des liens HATEOAS - var response = new ApiResponse("Joueur ajoutĂ© avec succès."); + var response = new ApiResponse("Joueur ajoutĂ© avec succès."); response.Links.Add(new ApiLink( - Url.Action("GetPlayer", "Player", new { id = player.playerId }), + href: url, "self", "GET" )); @@ -104,35 +106,35 @@ namespace ApiLeapHit.Controllers var response = new ApiResponse>($"La rĂ©cupĂ©ration des players a rĂ©ussi. Nombre de players : {dtoPlayers.Count}", dtoPlayers); // Ajout des liens HATEOAS - //response.Links.Add(new ApiLink( - // Url.Action("GetPlayers", "Player"), - // "self", - // "GET" - //)); - //response.Links.Add(new ApiLink( - // Url.Action("AddPlayer", "Player"), - // "create", - // "POST" - //)); - - //foreach (var player in dtoPlayers) - //{ - // response.Links.Add(new ApiLink( - // Url.Action("GetPlayer", "Player", new { id = player.playerId }), - // "get_player", - // "GET" - // )); - // response.Links.Add(new ApiLink( - // Url.Action("RemovePlayer", "Player", new { id = player.playerId }), - // "delete_player", - // "DELETE" - // )); - // response.Links.Add(new ApiLink( - // Url.Action("Put", "Player", new { id = player.playerId }), - // "update_player", - // "PUT" - // )); - //} + response.Links.Add(new ApiLink( + Url.Action("GetPlayers", "Player"), + "self", + "GET" + )); + response.Links.Add(new ApiLink( + Url.Action("AddPlayer", "Player"), + "create", + "POST" + )); + + foreach (var player in dtoPlayers) + { + response.Links.Add(new ApiLink( + Url.Action("GetPlayer", "Player", new { id = player.playerId }), + "get_player", + "GET" + )); + response.Links.Add(new ApiLink( + Url.Action("RemovePlayer", "Player", new { id = player.playerId }), + "delete_player", + "DELETE" + )); + response.Links.Add(new ApiLink( + Url.Action("Put", "Player", new { id = player.playerId }), + "update_player", + "PUT" + )); + } return Ok(response); } diff --git a/code/server/DTO/Factory/ApiResponse.cs b/code/server/DTO/Factory/ApiResponse.cs index 76b0e76..dc22909 100644 --- a/code/server/DTO/Factory/ApiResponse.cs +++ b/code/server/DTO/Factory/ApiResponse.cs @@ -11,8 +11,7 @@ namespace DTO.Factory { public string Message { get; set; } public T Data { get; set; } - public List Links { get; set; } - private List links = new(); + public List Links { get; set; } = new List(); public ApiResponse(string message, T data = default) diff --git a/code/server/DataBase/PongDB.db b/code/server/DataBase/PongDB.db index 5f094b94e0c3507c543048d29eef44bbfb833ab9..07e0a8ce797734c0ead6ef21277e81e79d0602be 100644 GIT binary patch delta 57 zcmZoTz}#?vc>{|94-5Z(2L8|dPx&wL@82vau%2I7kdu``nS(JTwYWqfASbahwTOB1 NC3{@~M$Sb6695Pq5t{%2 delta 35 rcmZoTz}#?vc>{|97c>7Q2L8|dPx&ux78E$bzxk5At^gy)qJRki;P4D% diff --git a/code/server/DataBase/PongDB.db-shm b/code/server/DataBase/PongDB.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3 + diff --git a/code/server/TestControleurs/UnitTestGames.cs b/code/server/TestControleurs/UnitTestGames.cs index d024571..10533d6 100644 --- a/code/server/TestControleurs/UnitTestGames.cs +++ b/code/server/TestControleurs/UnitTestGames.cs @@ -8,6 +8,7 @@ using DTO.Factory; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; using System.Net; using System.Text.Json; using System.Threading.Tasks; @@ -21,25 +22,23 @@ namespace TestControleurs public async Task TestGetPlayer_ValidId() { // Arrange - int id = 8; - DbDataManager dataManager = new DbDataManager(); - ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()); + int id = 9; + var mockDataManager = new Mock(); + var mockLogger = new Mock>(); var player = new Player { playerId = id, name = "Test Player", nbBallTouchTotal = 0, timePlayed = 3 }; - var controller = new PlayerController(dataManager, loggerFactory.CreateLogger()); - + var controller = new PlayerController(mockDataManager.Object, mockLogger.Object); var rep = await controller.AddPlayer(player.ToDto()); // Act var result = await controller.GetPlayer(id); var objectResult = (ObjectResult)result.Result; - var apiResponse = (ApiResponse)objectResult.Value; + var apiResponse = objectResult.Value as ApiResponse; // Assert Assert.IsNotNull(objectResult); Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode); Assert.AreEqual(apiResponse.Data.playerId, id); - } } From 33661038ce31708529247b536a099db0da4574b0 Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Thu, 16 Mar 2023 09:12:14 +0100 Subject: [PATCH 3/5] :hammer: Ajout d'un id unique pour le player --- .../{ChatController.cs => ChatsController.cs} | 120 +++++----- .../{GameController.cs => GamesController.cs} | 106 ++++----- .../Controllers/MessageController.cs | 130 ----------- .../Controllers/MessagesController.cs | 132 +++++++++++ .../Controllers/PlayerController.cs | 218 ------------------ .../Controllers/PlayersController.cs | 168 ++++++++++++++ code/server/ApiLeapHit/Mapper/PlayerMapper.cs | 2 +- code/server/DTO/DTOChat.cs | 4 +- code/server/DTO/DTOGame.cs | 4 +- code/server/DTO/DTOGameWithIdPlayer.cs | 4 +- code/server/DTO/DTOMessage.cs | 2 +- code/server/DTO/DTOPlayer.cs | 3 +- code/server/DTO/Factory/ApiResponse.cs | 12 + .../DataBase/Context/PongDbContextWithStub.cs | 12 +- .../DataManager/DbDataManager.Chat.cs | 33 ++- .../DataManager/DbDataManager.Game.cs | 2 +- .../DataManager/DbDataManager.Message.cs | 9 + .../DataManager/DbDataManager.Player.cs | 15 +- code/server/DataBase/Entity/Chat.cs | 4 +- code/server/DataBase/Entity/Game.cs | 4 +- code/server/DataBase/Entity/Message.cs | 2 +- code/server/DataBase/Entity/Player.cs | 2 +- code/server/TestControleurs/UnitTestChats.cs | 165 +++++++++++++ code/server/TestControleurs/UnitTestGames.cs | 133 ++++++++++- .../TestControleurs/UnitTestMessages.cs | 129 +++++++++++ .../server/TestControleurs/UnitTestPlayers.cs | 40 ++++ 26 files changed, 943 insertions(+), 512 deletions(-) rename code/server/ApiLeapHit/Controllers/{ChatController.cs => ChatsController.cs} (56%) rename code/server/ApiLeapHit/Controllers/{GameController.cs => GamesController.cs} (69%) delete mode 100644 code/server/ApiLeapHit/Controllers/MessageController.cs create mode 100644 code/server/ApiLeapHit/Controllers/MessagesController.cs delete mode 100644 code/server/ApiLeapHit/Controllers/PlayerController.cs create mode 100644 code/server/ApiLeapHit/Controllers/PlayersController.cs create mode 100644 code/server/TestControleurs/UnitTestChats.cs create mode 100644 code/server/TestControleurs/UnitTestMessages.cs create mode 100644 code/server/TestControleurs/UnitTestPlayers.cs diff --git a/code/server/ApiLeapHit/Controllers/ChatController.cs b/code/server/ApiLeapHit/Controllers/ChatsController.cs similarity index 56% rename from code/server/ApiLeapHit/Controllers/ChatController.cs rename to code/server/ApiLeapHit/Controllers/ChatsController.cs index 3bc0b15..04eb037 100644 --- a/code/server/ApiLeapHit/Controllers/ChatController.cs +++ b/code/server/ApiLeapHit/Controllers/ChatsController.cs @@ -5,45 +5,53 @@ using DTO; using DTO.Factory; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using System.Net; namespace ApiLeapHit.Controllers { [Route("api/[controller]")] [ApiController] - public class ChatController : Controller + public class ChatsController : Controller { private readonly DbDataManager _dataManager; - private readonly ILogger _logger; + private readonly ILogger _logger; - public ChatController(DbDataManager dataManager, ILogger logger) + public ChatsController(DbDataManager dataManager, ILogger logger) { _dataManager = dataManager; _logger = logger; } [HttpPost] - public async Task AddChat([FromBody] DTOChat dtoChat) + public async Task AddChat([FromBody] DTOChat dtoChat) { try { var player1 = await _dataManager.GetPlayer(dtoChat.PlayerId1); var player2 = await _dataManager.GetPlayer(dtoChat.PlayerId2); + if (player1 == null || player2 == null) + { + var message = "Les ids de player ne sont pas valides."; + _logger.LogInformation(message); + return BadRequest(message); + } await _dataManager.AddChat(dtoChat.ToChat()); var success_message = $"Le chat entre {player1.name} et {player2.name} a Ă©tĂ© ajoutĂ© avec succès."; _logger.LogInformation(success_message); - return Ok(new ApiResponse(success_message)); + return Ok(success_message); } catch (Exception ex) { - var error_message = $"Une erreur est survenue lors de l'ajout du chat : {ex.Message}"; + var error_message = $"Une erreur est survenue lors de l'ajout du chat."; _logger.LogError(ex, error_message); - return StatusCode(500, new ApiResponse(error_message)); + return StatusCode((int)HttpStatusCode.InternalServerError, error_message); } } + [HttpGet] public async Task>> GetChats() { @@ -53,35 +61,26 @@ namespace ApiLeapHit.Controllers if (chats == null) { var message = "Aucun chat n'a Ă©tĂ© trouvĂ©."; - _logger.LogWarning(message); - return NotFound(new ApiResponse(message)); + _logger.LogInformation(message); + return NotFound(message); } - 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 = chat.ToDto(); + var dtoChats = chats.Select(c => c.ToDto()); - dtoChats.Add(dtoChat); - } - - var success_message = $"La rĂ©cupĂ©ration des chats a rĂ©ussi. Nombre de chats : {dtoChats.Count}"; + var success_message = $"La rĂ©cupĂ©ration des chats a rĂ©ussi. Nombre de chats : {dtoChats.Count()}"; _logger.LogInformation(success_message); - return Ok(new ApiResponse>(success_message,dtoChats)); + return Ok(dtoChats); } catch (Exception ex) { - var error_message = $"Une erreur est survenue lors de la rĂ©cupĂ©ration des chats : {ex.Message}"; + var error_message = $"Une erreur est survenue lors de la rĂ©cupĂ©ration des chats."; _logger.LogError(ex, error_message); - return StatusCode(500, new ApiResponse(error_message)); + return StatusCode((int)HttpStatusCode.InternalServerError, error_message); } } [HttpGet("{id}")] - public async Task>> GetChatById(int id) + public async Task> GetChatById(int id) { try { @@ -89,90 +88,77 @@ namespace ApiLeapHit.Controllers if (chat == null) { var message = "Aucun chat n'a Ă©tĂ© trouvĂ©."; - _logger.LogWarning(message); - return NotFound(new ApiResponse(message)); + _logger.LogInformation(message); + return NotFound(message); } - //var player1 = await _dataManager.GetPlayer(chat.player1); - //var player2 = await _dataManager.GetPlayer(chat.player2); - var dtoChat = chat.ToDto(); var success_message = $"La rĂ©cupĂ©ration du chat a rĂ©ussi pour le chat {id}."; _logger.LogInformation(success_message); - return Ok(new ApiResponse(success_message, dtoChat)); + return Ok(dtoChat); } catch (Exception ex) { - var error_message = $"Une erreur est survenue lors de la rĂ©cupĂ©ration du chat {id} : {ex.Message}"; + var error_message = $"Une erreur est survenue lors de la rĂ©cupĂ©ration du chat {id}."; _logger.LogError(ex, error_message); - return StatusCode(500, new ApiResponse(error_message)); + return StatusCode((int)HttpStatusCode.InternalServerError, error_message); } } - [HttpGet("byPlayer/{id}")] - public async Task>> GetChatsByIdPlayer(int id) + + [HttpGet("Player/{id}")] + public async Task>> GetChatsByIdPlayer(int id) { try { var chats = await _dataManager.GetChatsByIdPlayer(id); - if (chats == null || chats.Count() == 0) + if (chats == null || !chats.Any()) { - var message = "Aucun chat n'a Ă©tĂ© trouvĂ© pour l'id : {id}."; - _logger.LogWarning(message); - return NotFound(new ApiResponse(message)); - } - - var dtoChats = new List(); - foreach (var chat in chats) - { - dtoChats.Add(chat.ToDto()); + var message = $"Aucun chat n'a Ă©tĂ© trouvĂ© pour l'id : {id}."; + _logger.LogInformation(message); + return NotFound(new ApiResponse(message)); } + var dtoChats = chats.Select(c => c.ToDto()).ToList(); var success_message = $"La rĂ©cupĂ©ration des chats a rĂ©ussi pour l'id : {id}. Nombre de chats : {dtoChats.Count}"; _logger.LogInformation(success_message); return Ok(new ApiResponse>(success_message, dtoChats)); } catch (Exception ex) { - var error_message = $"Une erreur est survenue lors de la rĂ©cupĂ©ration des chats de l'utilisateur {id} : {ex.Message}"; + var error_message = $"Une erreur est survenue lors de la rĂ©cupĂ©ration des chats de l'utilisateur {id}."; _logger.LogError(ex, error_message); - return StatusCode(500, new ApiResponse(error_message)); + return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse(error_message)); } + } - [HttpGet("players/{idPlayer1}/{idPlayer2}")] - public async Task>> GetChatsByIdPlayers(int idPlayer1, int idPlayer2) + [HttpGet("Players/{idPlayer1}/{idPlayer2}")] + public async Task>> GetChatsByIdPlayers(int idPlayer1, int idPlayer2) { try { - var chats = await _dataManager.GetChatsByIdPlayers(idPlayer1,idPlayer2); - if (chats == null ||chats.Count() == 0) + var chats = await _dataManager.GetChatsByIdPlayers(idPlayer1, idPlayer2); + if (chats == null || !chats.Any()) { var message = $"Aucun chat n'a Ă©tĂ© trouvĂ© pour les joueurs {idPlayer1} et {idPlayer2}."; - _logger.LogWarning(message); - return NotFound(new ApiResponse(message)); - } - - var dtoChats = new List(); - foreach (var chat in chats) - { - //var player1 = await _dataManager.GetPlayer(chat.player1); - //var player2 = await _dataManager.GetPlayer(chat.player2); - - dtoChats.Add(chat.ToDto()); + _logger.LogInformation(message); + return NotFound(new ApiResponse(message)); } + var dtoChats = chats.Select(c => c.ToDto()).ToList(); var success_message = $"La rĂ©cupĂ©ration des chats a rĂ©ussi pour les joueurs {idPlayer1} et {idPlayer2}. Nombre de chats : {dtoChats.Count}"; _logger.LogInformation(success_message); return Ok(new ApiResponse>(success_message, dtoChats)); } catch (Exception ex) { - var error_message = $"Une erreur est survenue lors de la rĂ©cupĂ©ration des chats pour les joueurs {idPlayer1} et {idPlayer2} : {ex.Message}"; + var error_message = $"Une erreur est survenue lors de la rĂ©cupĂ©ration des chats pour les joueurs {idPlayer1} et {idPlayer2}."; _logger.LogError(ex, error_message); - return StatusCode(500, new ApiResponse(error_message)); + return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse(error_message)); } + } [HttpDelete("{id}")] @@ -185,18 +171,18 @@ namespace ApiLeapHit.Controllers { var success_message = $"Le chat avec l'identifiant {id} a Ă©tĂ© supprimĂ© avec succès."; _logger.LogInformation(success_message); - return Ok(new ApiResponse(success_message)); + return Ok(new ApiResponse(success_message)); } var warning_message = $"Le chat avec l'identifiant {id} n'a pas Ă©tĂ© trouvĂ©."; - _logger.LogWarning(warning_message); - return NotFound(new ApiResponse(warning_message)); + _logger.LogInformation(warning_message); + return NotFound(new ApiResponse(warning_message)); } catch (Exception ex) { var error_message = $"Une erreur est survenue lors de la suppression du chat : {ex.Message}"; _logger.LogError(ex, error_message); - return StatusCode(500, new ApiResponse(error_message)); + return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse(error_message)); } } } diff --git a/code/server/ApiLeapHit/Controllers/GameController.cs b/code/server/ApiLeapHit/Controllers/GamesController.cs similarity index 69% rename from code/server/ApiLeapHit/Controllers/GameController.cs rename to code/server/ApiLeapHit/Controllers/GamesController.cs index 9dc5947..346a06f 100644 --- a/code/server/ApiLeapHit/Controllers/GameController.cs +++ b/code/server/ApiLeapHit/Controllers/GamesController.cs @@ -13,13 +13,13 @@ namespace ApiLeapHit.Controllers { [Route("api/[controller]")] [ApiController] - public class GameController : ControllerBase + public class GamesController : ControllerBase { private readonly DbDataManager _dataManager; - private readonly ILogger _logger; + private readonly ILogger _logger; - public GameController(DbDataManager dataManager, ILogger logger) + public GamesController(DbDataManager dataManager, ILogger logger) { _dataManager = dataManager; _logger = logger; @@ -51,50 +51,50 @@ namespace ApiLeapHit.Controllers } } - [HttpGet] - public async Task>> GetGames() - { - try - { - _logger.LogInformation("RĂ©cupĂ©ration de toutes les games."); - - var games = await _dataManager.GetGames(); - if (games == null) - { - var message = "Aucune game n'a Ă©tĂ© trouvĂ©e."; - _logger.LogWarning(message); - return NotFound(new ApiResponse(message)); - } - - var dtoGames = new List(); - - foreach (var game in games) - { - var winner = await _dataManager.GetPlayer(game.winner); - var loser = await _dataManager.GetPlayer(game.loser); - - //ce cas n'est jamais censĂ© arrivĂ© - if (winner == null || loser == null) - { - _logger.LogError($"Le joueur gagnant ou le joueur perdant n'existe pas pour le jeu avec l'identifiant {game.gameId}."); - continue; - } - - dtoGames.Add(game.ToDto()); - } - - _logger.LogInformation("{Count} games ont Ă©tĂ© rĂ©cupĂ©rĂ©es.", dtoGames.Count); - return Ok(new ApiResponse>("La rĂ©cupĂ©ration des games a rĂ©ussi.", dtoGames)); - } - catch (Exception ex) - { - var message = "Une erreur est survenue lors de la rĂ©cupĂ©ration des donnĂ©es."; - _logger.LogError(ex, message); - return StatusCode(500, new ApiResponse($"{message} {ex.Message}")); - } - } - - [HttpGet("byPlayer/{id}")] + //[HttpGet] + //public async Task>> GetGames() + //{ + // try + // { + // _logger.LogInformation("RĂ©cupĂ©ration de toutes les games."); + + // var games = await _dataManager.GetGames(); + // if (games == null) + // { + // var message = "Aucune game n'a Ă©tĂ© trouvĂ©e."; + // _logger.LogWarning(message); + // return NotFound(new ApiResponse(message)); + // } + + // var dtoGames = new List(); + + // foreach (var game in games) + // { + // var winner = await _dataManager.GetPlayer(game.winner); + // var loser = await _dataManager.GetPlayer(game.loser); + + // //ce cas n'est jamais censĂ© arrivĂ© + // if (winner == null || loser == null) + // { + // _logger.LogError($"Le joueur gagnant ou le joueur perdant n'existe pas pour le jeu avec l'identifiant {game.gameId}."); + // continue; + // } + + // dtoGames.Add(game.ToDto()); + // } + + // _logger.LogInformation("{Count} games ont Ă©tĂ© rĂ©cupĂ©rĂ©es.", dtoGames.Count); + // return Ok(new ApiResponse>("La rĂ©cupĂ©ration des games a rĂ©ussi.", dtoGames)); + // } + // catch (Exception ex) + // { + // var message = "Une erreur est survenue lors de la rĂ©cupĂ©ration des donnĂ©es."; + // _logger.LogError(ex, message); + // return StatusCode(500, new ApiResponse($"{message} {ex.Message}")); + // } + //} + + [HttpGet("Player/{id}")] public async Task>> GetGameByIdPlayer(int id) { try @@ -144,12 +144,12 @@ namespace ApiLeapHit.Controllers var winner = await _dataManager.GetPlayer(dtoGame.playerWinner); var loser = await _dataManager.GetPlayer(dtoGame.playerLoser); - //if (winner == null || loser == null) - //{ - // var errorMessage = "Le joueur gagnant ou le joueur perdant n'existe pas pour la partie avec l'identifiant " + dtoGame.gameId + "."; - // _logger.LogError(errorMessage); - // return NotFound(new ApiResponse(errorMessage)); - //} + if (winner == null || loser == null) + { + var errorMessage = "Le joueur gagnant ou le joueur perdant n'existe pas pour la partie avec l'identifiant " + dtoGame.gameId + "."; + _logger.LogError(errorMessage); + return NotFound(new ApiResponse(errorMessage)); + } var game = dtoGame.ToGame(); await _dataManager.AddGame(game); diff --git a/code/server/ApiLeapHit/Controllers/MessageController.cs b/code/server/ApiLeapHit/Controllers/MessageController.cs deleted file mode 100644 index bb1422f..0000000 --- a/code/server/ApiLeapHit/Controllers/MessageController.cs +++ /dev/null @@ -1,130 +0,0 @@ -using ApiLeapHit.Mapper; -using DataBase.DataManager; -using DataBase.Entity; -using DTO; -using DTO.Factory; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using System.Net; - -namespace ApiLeapHit.Controllers -{ - [Route("api/[controller]")] - [ApiController] - public class MessageController : Controller - { - - private readonly DbDataManager _dataManager; - private readonly ILogger _logger; - - public MessageController(DbDataManager dataManager, ILogger logger) - { - _dataManager = dataManager; - _logger = logger; - } - - [HttpPost] - public async Task SendMessage([FromBody] DTOMessage dtoMessage) - { - try - { - var player = await _dataManager.GetPlayer(dtoMessage.PlayerId); - if (player == null) - { - _logger.LogWarning($"Le joueur avec l'identifiant {dtoMessage.PlayerId} n'existe pas."); - return NotFound(new ApiResponse($"Le joueur avec l'identifiant {dtoMessage.PlayerId} n'existe pas.")); - } - - await _dataManager.SendMessage(dtoMessage.ToMessage()); - - _logger.LogInformation($"Le message avec l'identifiant {dtoMessage.messageId} a Ă©tĂ© envoyĂ© avec succès."); - return Ok(new ApiResponse($"Le message avec l'identifiant {dtoMessage.messageId} a Ă©tĂ© envoyĂ© avec succès.")); - } - catch (Exception ex) - { - _logger.LogError($"Une erreur est survenue lors de l'envoi du message : {ex.Message}"); - return StatusCode(500, new ApiResponse($"Une erreur est survenue lors de l'envoi du message : {ex.Message}")); - } - } - - [HttpDelete("{id}")] - public async Task RemoveMessage(int id) - { - try - { - var result = await _dataManager.RemoveMessage(id); - if (result) - { - _logger.LogInformation($"Le message avec l'identifiant {id} a Ă©tĂ© supprimĂ© avec succès."); - return Ok(new ApiResponse($"Le message avec l'identifiant {id} a Ă©tĂ© supprimĂ© avec succès.")); - } - else - { - _logger.LogWarning($"Le message avec l'identifiant {id} n'existe pas."); - return NotFound(new ApiResponse($"Le message avec l'identifiant {id} n'existe pas.")); - } - } - catch (Exception ex) - { - _logger.LogError($"Une erreur est survenue lors de la suppression du message avec l'identifiant {id} : {ex.Message}"); - return StatusCode(500, new ApiResponse($"Une erreur est survenue lors de la suppression du message avec l'identifiant {id} : {ex.Message}")); - } - } - - [HttpGet("{id}")] - public async Task> ReceiveMessage(int id) - { - try - { - var message = await _dataManager.ReceiveMessage(id); - - if (message == null) - { - _logger.LogWarning($"Aucun message avec l'idĂ©e {id} n'a Ă©tĂ© trouvĂ©."); - return NotFound(new ApiResponse("Le message n'a pas Ă©tĂ© trouvĂ©.")); - } - - //var response = new ApiResponse("Joueur ajoutĂ© avec succès."); - //response.Links.Add(new ApiLink( - // Url.Action("GetPlayer", "Player", new { id = player.playerId }), - // "self", - // "GET" - //)); - - _logger.LogInformation($"Le message avec l'identifiant {id} a Ă©tĂ© reçu avec succès."); - return Ok(new ApiResponse("Message reçu avec succès.", message.ToDto())); - } - catch (Exception ex) - { - _logger.LogError(ex, $"Une erreur est survenue lors de la rĂ©cupĂ©ration du message avec l'id {id}."); - return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse($"Une erreur est survenue lors de la rĂ©cupĂ©ration du message. : {ex.Message}")); - } - } - - [HttpGet] - public async Task> ReceiveAllMessages() - { - try - { - var messages = await _dataManager.ReceiveAllMessages(); - - if (messages == null || messages.Count() == 0) - { - _logger.LogWarning($"Aucun message n'a Ă©tĂ© trouvĂ©."); - return NotFound(new ApiResponse("Aucun message n'a pas Ă©tĂ© trouvĂ©.")); - } - - var dtosMessages = messages.Select(message => message.ToDto()).ToList(); - - _logger.LogInformation($"Les messages ont Ă©tĂ© reçus avec succès."); - return Ok(new ApiResponse>("Messages reçus avec succès.", dtosMessages)); - } - catch (Exception ex) - { - _logger.LogError(ex, $"Une erreur est survenue lors de la rĂ©cupĂ©ration des messages."); - return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse($"Une erreur est survenue lors de la rĂ©cupĂ©ration des messages. : {ex.Message}")); - } - } - - } -} diff --git a/code/server/ApiLeapHit/Controllers/MessagesController.cs b/code/server/ApiLeapHit/Controllers/MessagesController.cs new file mode 100644 index 0000000..4332124 --- /dev/null +++ b/code/server/ApiLeapHit/Controllers/MessagesController.cs @@ -0,0 +1,132 @@ +using ApiLeapHit.Mapper; +using DataBase.DataManager; +using DataBase.Entity; +using DTO; +using DTO.Factory; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System.Net; + +namespace ApiLeapHit.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class MessagesController : Controller + { + + private readonly DbDataManager _dataManager; + private readonly ILogger _logger; + + public MessagesController(DbDataManager dataManager, ILogger logger) + { + _dataManager = dataManager; + _logger = logger; + } + + [HttpPost] + public async Task SendMessage([FromBody] DTOMessage dtoMessage) + { + try + { + var player = await _dataManager.GetPlayer(dtoMessage.PlayerId); + if (player == null) + { + var message = $"Le joueur avec l'identifiant {dtoMessage.PlayerId} n'existe pas."; + _logger.LogWarning(message); + return StatusCode((int)HttpStatusCode.NotFound, new ApiResponse(message)); + } + + await _dataManager.SendMessage(dtoMessage.ToMessage()); + + var message_success = $"Le message avec l'identifiant {dtoMessage.messageId} a Ă©tĂ© envoyĂ© avec succès."; + _logger.LogInformation(message_success); + return StatusCode((int)HttpStatusCode.Created, new ApiResponse(message_success)); + } + catch (Exception ex) + { + var erroe_message = "Une erreur est survenue lors de l'envoi du message."; + _logger.LogError(ex,erroe_message); + return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse(erroe_message)); + } + } + + [HttpDelete("{id}")] + public async Task RemoveMessage(int id) + { + try + { + var result = await _dataManager.RemoveMessage(id); + if (result) + { + var message_success = $"Le message avec l'identifiant {id} a Ă©tĂ© supprimĂ© avec succès."; + _logger.LogInformation(message_success); + return StatusCode((int)HttpStatusCode.OK, new ApiResponse(message_success)); + } + else + { + var message = $"Le message avec l'identifiant {id} n'existe pas."; + _logger.LogInformation(message); + return StatusCode((int)HttpStatusCode.BadRequest, new ApiResponse(message)); + } + } + catch (Exception ex) + { + var error_message = $"Une erreur est survenue lors de la suppression du message avec l'identifiant {id}."; + _logger.LogError(ex, error_message); + return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse(error_message)); + } + } + + [HttpGet("{id}")] + public async Task> ReceiveMessage(int id) + { + try + { + var message = await _dataManager.ReceiveMessage(id); + + if (message == null) + { + var message_notFound = $"Aucun message avec l'idĂ©e {id} n'a Ă©tĂ© trouvĂ©."; + _logger.LogInformation(message_notFound); + return StatusCode((int)HttpStatusCode.NotFound, new ApiResponse(message_notFound)); + } + + var message_success = $"Le message avec l'identifiant {id} a Ă©tĂ© reçu avec succès."; + _logger.LogInformation(message_success); + return StatusCode((int)HttpStatusCode.OK, new ApiResponse(message_success, message.ToDto())); + } + catch (Exception ex) + { + var message_error = $"Une erreur est survenue lors de la rĂ©cupĂ©ration du message avec l'id {id}."; + _logger.LogError(ex, message_error); + return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse(message_error)); + } + } + + //[HttpGet] + //public async Task> ReceiveAllMessages() + //{ + // try + // { + // var messages = await _dataManager.ReceiveAllMessages(); + + // if (messages == null || messages.Count() == 0) + // { + // _logger.LogWarning($"Aucun message n'a Ă©tĂ© trouvĂ©."); + // return NotFound(new ApiResponse("Aucun message n'a pas Ă©tĂ© trouvĂ©.")); + // } + + // var dtosMessages = messages.Select(message => message.ToDto()).ToList(); + + // _logger.LogInformation($"Les messages ont Ă©tĂ© reçus avec succès."); + // return Ok(new ApiResponse>("Messages reçus avec succès.", dtosMessages)); + // } + // catch (Exception ex) + // { + // _logger.LogError(ex, $"Une erreur est survenue lors de la rĂ©cupĂ©ration des messages."); + // return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse($"Une erreur est survenue lors de la rĂ©cupĂ©ration des messages. : {ex.Message}")); + // } + //} + + } +} diff --git a/code/server/ApiLeapHit/Controllers/PlayerController.cs b/code/server/ApiLeapHit/Controllers/PlayerController.cs deleted file mode 100644 index dde6a8b..0000000 --- a/code/server/ApiLeapHit/Controllers/PlayerController.cs +++ /dev/null @@ -1,218 +0,0 @@ -using ApiLeapHit.Mapper; -using DataBase.DataManager; -using DataBase.Entity; -using DTO; -using DTO.Factory; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using System.Net; - -namespace ApiLeapHit.Controllers -{ - [Route("api/[controller]")] - [ApiController] - public class PlayerController : ControllerBase - { - private readonly DbDataManager _dataManager; - private readonly ILogger _logger; - - public PlayerController(DbDataManager dataManager, ILogger logger) - { - _dataManager = dataManager; - _logger = logger; - } - - [HttpGet("{id}")] - public async Task>> GetPlayer(int id) - { - try - { - var player = await _dataManager.GetPlayer(id); - if (player == null) - { - return NotFound(new ApiResponse("Joueur non trouvĂ©.")); - } - - var response = new ApiResponse($"Le joueur avec l'id {id} a Ă©tĂ© rĂ©cupĂ©rĂ© avec succès.", player.ToDto()); - - // Ajout des liens HATEOAS - response.Links.Add(new ApiLink( - Url.Action("GetPlayer", "Player", new { id }), - "self", - "GET" - )); - response.Links.Add(new ApiLink( - Url.Action("RemovePlayer", "Player", new { id }), - "delete", - "DELETE" - )); - response.Links.Add(new ApiLink( - Url.Action("Put", "Player", new { id }), - "update", - "PUT" - )); - - return Ok(response); - } - catch (Exception ex) - { - _logger.LogError(ex, $"Une erreur est survenue lors de la rĂ©cupĂ©ration du joueur avec l'id {id}."); - return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse("Une erreur est survenue lors de la rĂ©cupĂ©ration du joueur.")); - } - } - - [HttpPost] - public async Task>> AddPlayer([FromBody] DTOPlayer dtoPlayer) - { - try - { - var player = dtoPlayer.ToPlayer(); - - await _dataManager.AddPlayer(player); - - var url = Url.Action("GetPlayer", "Player", new { id = 9 }); - - // Ajout des liens HATEOAS - var response = new ApiResponse("Joueur ajoutĂ© avec succès."); - response.Links.Add(new ApiLink( - href: url, - "self", - "GET" - )); - - var response2 = new ApiResponse("Joueur ajoutĂ© avec succès."); - return Ok(response); - } - catch (Exception ex) - { - _logger.LogError(ex, "Une erreur est survenue lors de l'ajout du joueur."); - return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse($"Une erreur est survenue lors de l'ajout du joueur. {ex.Message}")); - } - } - - [HttpGet] - public async Task>> GetPlayers() - { - try - { - var players = await _dataManager.GetPlayers(); - if (players == null || players.Count() == 0) - { - return NotFound(new ApiResponse>("Aucun joueur trouvĂ©.")); - } - - var dtoPlayers = players.Select(p => p.ToDto()).ToList(); - - var response = new ApiResponse>($"La rĂ©cupĂ©ration des players a rĂ©ussi. Nombre de players : {dtoPlayers.Count}", dtoPlayers); - - // Ajout des liens HATEOAS - response.Links.Add(new ApiLink( - Url.Action("GetPlayers", "Player"), - "self", - "GET" - )); - response.Links.Add(new ApiLink( - Url.Action("AddPlayer", "Player"), - "create", - "POST" - )); - - foreach (var player in dtoPlayers) - { - response.Links.Add(new ApiLink( - Url.Action("GetPlayer", "Player", new { id = player.playerId }), - "get_player", - "GET" - )); - response.Links.Add(new ApiLink( - Url.Action("RemovePlayer", "Player", new { id = player.playerId }), - "delete_player", - "DELETE" - )); - response.Links.Add(new ApiLink( - Url.Action("Put", "Player", new { id = player.playerId }), - "update_player", - "PUT" - )); - } - - return Ok(response); - } - catch (Exception ex) - { - _logger.LogError(ex, "Une erreur est survenue lors de la rĂ©cupĂ©ration des joueurs."); - return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse("Une erreur est survenue lors de la rĂ©cupĂ©ration des joueurs.")); - } - } - - [HttpDelete("{id}")] - public async Task RemovePlayer(int id) - { - try - { - var result = await _dataManager.RemovePlayer(id); - if (result) - { - // Ajout des liens HATEOAS - var response = new ApiResponse("Joueur supprimĂ© avec succès."); - response.Links.Add(new ApiLink( - Url.Action("GetPlayers", "Player"), - "self", - "GET" - )); - - return Ok(response); - } - return NotFound(new ApiResponse("Joueur non trouvĂ©.")); - } - catch (Exception ex) - { - _logger.LogError(ex, $"Une erreur est survenue lors de la suppression du joueur avec l'id {id}."); - return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse("Une erreur est survenue lors de la suppression du joueur.")); - } - } - [HttpPut("{id}")] - public async Task Put(int id, [FromBody] DTOPlayer dtoPlayer) - { - try - { - if (!ModelState.IsValid) - { - return BadRequest(new ApiResponse("Les donnĂ©es du joueur sont invalides.")); - } - - var player = dtoPlayer.ToPlayer(); - - var playerTest = await _dataManager.GetPlayer(id); - if (playerTest == null) - { - return NotFound(new ApiResponse("Joueur non trouvĂ©.")); - } - - await _dataManager.UpdatePlayer(id, player.name); - - // Ajout des liens HATEOAS - var response = new ApiResponse("Joueur mis Ă  jour avec succès."); - response.Links.Add(new ApiLink( - Url.Action("GetPlayer", "Player", new { id }), - "self", - "GET" - )); - response.Links.Add(new ApiLink( - Url.Action ("RemovePlayer", "Player", new { id }), - "delete", - "DELETE" - )); - - - return Ok(response); - } - catch (Exception ex) - { - _logger.LogError(ex, $"Une erreur est survenue lors de la modification du joueur avec l'id {id}."); - return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse("Une erreur est survenue lors de la modification du joueur.")); - } - - } - } -} diff --git a/code/server/ApiLeapHit/Controllers/PlayersController.cs b/code/server/ApiLeapHit/Controllers/PlayersController.cs new file mode 100644 index 0000000..86cc4a2 --- /dev/null +++ b/code/server/ApiLeapHit/Controllers/PlayersController.cs @@ -0,0 +1,168 @@ +using ApiLeapHit.Mapper; +using DataBase.DataManager; +using DataBase.Entity; +using DTO; +using DTO.Factory; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System.Net; + +namespace ApiLeapHit.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class PlayersController : ControllerBase + { + private readonly DbDataManager _dataManager; + private readonly ILogger _logger; + + public PlayersController(DbDataManager dataManager, ILogger logger) + { + _dataManager = dataManager; + _logger = logger; + } + + [HttpPost] + public async Task>> CreatePlayer() + { + try + { + var player = new Player(); + string id; + do + { + // GĂ©nĂ©rer un id unique avec des chiffres et des lettres + id = Guid.NewGuid().ToString("N"); + } + while (await _dataManager.GetPlayer(id) != null); + player.playerId = id; + await _dataManager.AddPlayer(player); + + var response = new ApiResponse($"Le joueur a Ă©tĂ© créé avec succès. Id du joueur : {id}.", id); + return Ok(response); + } + catch (Exception ex) + { + _logger.LogError(ex, "Une erreur est survenue lors de la crĂ©ation du joueur."); + return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse("Une erreur est survenue lors de la crĂ©ation du joueur.")); + } + } + + [HttpGet("{id}")] + public async Task>> GetPlayer(string id) + { + try + { + var player = await _dataManager.GetPlayer(id); + if (player == null) + { + return NotFound(new ApiResponse("Joueur non trouvĂ©.")); + } + + var response = new ApiResponse($"Le joueur avec l'id {id} a Ă©tĂ© rĂ©cupĂ©rĂ© avec succès.", player.ToDto()); + + return Ok(response); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Une erreur est survenue lors de la rĂ©cupĂ©ration du joueur avec l'id {id}."); + return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse("Une erreur est survenue lors de la rĂ©cupĂ©ration du joueur.")); + } + } + + [HttpPost] + public async Task>> AddPlayer([FromBody] DTOPlayer dtoPlayer) + { + try + { + var player = dtoPlayer.ToPlayer(); + + await _dataManager.AddPlayer(player); + + var response = new ApiResponse("Joueur ajoutĂ© avec succès."); + return Ok(response); + } + catch (Exception ex) + { + _logger.LogError(ex, "Une erreur est survenue lors de l'ajout du joueur."); + return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse($"Une erreur est survenue lors de l'ajout du joueur. {ex.Message}")); + } + } + + //[HttpGet] + //public async Task>> GetPlayers() + //{ + // try + // { + // var players = await _dataManager.GetPlayers(); + // if (players == null || players.Count() == 0) + // { + // return NotFound(new ApiResponse>("Aucun joueur trouvĂ©.")); + // } + + // var dtoPlayers = players.Select(p => p.ToDto()).ToList(); + + // var response = new ApiResponse>($"La rĂ©cupĂ©ration des players a rĂ©ussi. Nombre de players : {dtoPlayers.Count}", dtoPlayers); + + // return Ok(response); + // } + // catch (Exception ex) + // { + // _logger.LogError(ex, "Une erreur est survenue lors de la rĂ©cupĂ©ration des joueurs."); + // return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse("Une erreur est survenue lors de la rĂ©cupĂ©ration des joueurs.")); + // } + //} + + [HttpDelete("{id}")] + public async Task RemovePlayer(string id) + { + try + { + var result = await _dataManager.RemovePlayer(id); + if (result) + { + var response = new ApiResponse("Joueur supprimĂ© avec succès."); + + return Ok(response); + } + return NotFound(new ApiResponse("Joueur non trouvĂ©.")); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Une erreur est survenue lors de la suppression du joueur avec l'id {id}."); + return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse("Une erreur est survenue lors de la suppression du joueur.")); + } + } + [HttpPut("{id}")] + public async Task Put(string id, [FromBody] DTOPlayer dtoPlayer) + { + try + { + if (!ModelState.IsValid) + { + return BadRequest(new ApiResponse("Les donnĂ©es du joueur sont invalides.")); + } + + var player = dtoPlayer.ToPlayer(); + + var playerTest = await _dataManager.GetPlayer(id); + if (playerTest == null) + { + return NotFound(new ApiResponse("Joueur non trouvĂ©.")); + } + + await _dataManager.UpdatePlayer(id, player.name); + + var response = new ApiResponse("Joueur mis Ă  jour avec succès."); + + return Ok(response); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Une erreur est survenue lors de la modification du joueur avec l'id {id}."); + return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse("Une erreur est survenue lors de la modification du joueur.")); + } + + } + } +} diff --git a/code/server/ApiLeapHit/Mapper/PlayerMapper.cs b/code/server/ApiLeapHit/Mapper/PlayerMapper.cs index b8d2d07..631252a 100644 --- a/code/server/ApiLeapHit/Mapper/PlayerMapper.cs +++ b/code/server/ApiLeapHit/Mapper/PlayerMapper.cs @@ -23,7 +23,7 @@ namespace ApiLeapHit.Mapper { playerId = dtoPlayer.playerId, name = dtoPlayer.name, - nbBallTouchTotal = dtoPlayer.nbBallTouchTotal, + nbBallTouchTotal = dtoPlayer.nbBallTouchTotal, timePlayed = dtoPlayer.timePlayed }; } diff --git a/code/server/DTO/DTOChat.cs b/code/server/DTO/DTOChat.cs index 1765d3e..298222c 100644 --- a/code/server/DTO/DTOChat.cs +++ b/code/server/DTO/DTOChat.cs @@ -9,7 +9,7 @@ namespace DTO public class DTOChat { public int chatId { get; set; } - public int PlayerId1 { get; set; } - public int PlayerId2 { get; set; } + public string PlayerId1 { get; set; } + public string PlayerId2 { get; set; } } } diff --git a/code/server/DTO/DTOGame.cs b/code/server/DTO/DTOGame.cs index c2b0fd1..9348bc8 100644 --- a/code/server/DTO/DTOGame.cs +++ b/code/server/DTO/DTOGame.cs @@ -11,8 +11,8 @@ namespace DTO 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; } + public string playerWinner { get; set; } + public string playerLoser { get; set; } public int scoreWinner { get; set; } public int scoreLoser { get; set; } } diff --git a/code/server/DTO/DTOGameWithIdPlayer.cs b/code/server/DTO/DTOGameWithIdPlayer.cs index a586a0b..e41ce9f 100644 --- a/code/server/DTO/DTOGameWithIdPlayer.cs +++ b/code/server/DTO/DTOGameWithIdPlayer.cs @@ -11,7 +11,7 @@ namespace DTO 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; } + public string playerWinner { get; set; } + public string playerLoser { get; set; } } } diff --git a/code/server/DTO/DTOMessage.cs b/code/server/DTO/DTOMessage.cs index df21cde..2dade02 100644 --- a/code/server/DTO/DTOMessage.cs +++ b/code/server/DTO/DTOMessage.cs @@ -11,7 +11,7 @@ namespace DTO public int messageId { get; set; } public string message { get; set; } public DateTime timestamp { get; set; } - public int PlayerId { get; set; } + public string PlayerId { get; set; } public int ChatId { get; set; } } } diff --git a/code/server/DTO/DTOPlayer.cs b/code/server/DTO/DTOPlayer.cs index 1ec7dbb..42d0d14 100644 --- a/code/server/DTO/DTOPlayer.cs +++ b/code/server/DTO/DTOPlayer.cs @@ -8,7 +8,8 @@ namespace DTO { public class DTOPlayer { - public int playerId { get; set; } + public string playerId { get; set; } + // public string playerIdUniq { get; set; } public string name { get; set; } public int nbBallTouchTotal { get; set; } public int timePlayed { get; set; } diff --git a/code/server/DTO/Factory/ApiResponse.cs b/code/server/DTO/Factory/ApiResponse.cs index dc22909..b778769 100644 --- a/code/server/DTO/Factory/ApiResponse.cs +++ b/code/server/DTO/Factory/ApiResponse.cs @@ -20,4 +20,16 @@ namespace DTO.Factory Data = data; } } + public class ApiResponse + { + public string Message { get; set; } + public List Links { get; set; } = new List(); + + + public ApiResponse(string message) + { + Message = message; + } + } + } diff --git a/code/server/DataBase/Context/PongDbContextWithStub.cs b/code/server/DataBase/Context/PongDbContextWithStub.cs index 216e718..137c420 100644 --- a/code/server/DataBase/Context/PongDbContextWithStub.cs +++ b/code/server/DataBase/Context/PongDbContextWithStub.cs @@ -15,18 +15,18 @@ namespace DataBase.Context { base.OnModelCreating(modelBuilder); - Player player1 = new() { playerId = 1, name = "Rami", timePlayed = 120, nbBallTouchTotal = 20 }; - Player player2 = new() { playerId = 2, name = "Hugo", timePlayed = 250, nbBallTouchTotal = 90 }; + Player player1 = new() { playerId = "test", name = "Rami", timePlayed = 120, nbBallTouchTotal = 20 }; + Player player2 = new() { playerId = "test2", name = "Hugo", timePlayed = 250, nbBallTouchTotal = 90 }; modelBuilder.Entity().HasData(player1, player2); - Game game = new() { gameId = 1, durationGame = 65, nbMaxEchanges = 5, winner = 1, loser = 2, scoreLoser = 2, scoreWinner = 6}; + Game game = new() { gameId = 1, durationGame = 65, nbMaxEchanges = 5, winner = "test", loser = "test2", scoreLoser = 2, scoreWinner = 6}; modelBuilder.Entity().HasData(game); - Chat chat = new() { chatId = 1, player1 = 1, player2 = 2 }; + Chat chat = new() { chatId = 1, player1 = "test", player2 = "test2" }; modelBuilder.Entity().HasData(chat); - Message message1 = new() { messageId = 1, message = "Salut mon gars !", player = 1, timestamp = new DateTime(2023, 02, 16, 17, 05, 12), chat = 1 }; - Message message2 = new() { messageId = 2, message = "Comment tu vas ?", player = 2, timestamp = new DateTime(2023, 02, 16, 17, 12, 35), chat = 1 }; + Message message1 = new() { messageId = 1, message = "Salut mon gars !", player = "test", timestamp = new DateTime(2023, 02, 16, 17, 05, 12), chat = 1 }; + Message message2 = new() { messageId = 2, message = "Comment tu vas ?", player = "test2", timestamp = new DateTime(2023, 02, 16, 17, 12, 35), chat = 1 }; modelBuilder.Entity().HasData(message1, message2); } } diff --git a/code/server/DataBase/DataManager/DbDataManager.Chat.cs b/code/server/DataBase/DataManager/DbDataManager.Chat.cs index b15c133..f9534ca 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Chat.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Chat.cs @@ -21,16 +21,23 @@ namespace DataBase.DataManager public async Task RemoveChat(int id) { - using (var context = new PongDbContext()) + try { - var chat = context.Chats.Where(c => c.chatId == id).ToList().FirstOrDefault(); - if (chat != null) + using (var context = new PongDbContext()) { - var result = context.Chats.Remove(chat); - await context.SaveChangesAsync(); - return result != null; + var chat = context.Chats.Where(c => c.chatId == id).ToList().FirstOrDefault(); + if (chat != null) + { + var result = context.Chats.Remove(chat); + await context.SaveChangesAsync(); + return result != null; + } + return false; } - return false; + } + catch (Exception ex) + { + throw; } } @@ -51,7 +58,7 @@ namespace DataBase.DataManager } } - public Task> GetChatsByIdPlayer(int id) + public Task> GetChatsByIdPlayer(string id) { using (var context = new PongDbContext()) { @@ -60,7 +67,7 @@ namespace DataBase.DataManager } } - public Task> GetChatsByIdPlayers(int idPlayer1, int idPlayer2) + public Task> GetChatsByIdPlayers(string idPlayer1, string idPlayer2) { using (var context = new PongDbContext()) { @@ -69,5 +76,13 @@ namespace DataBase.DataManager } } + public Task GetNbChats() + { + using (var context = new PongDbContext()) + { + var nbchats = context.Chats.ToList().Count(); + return Task.FromResult(nbchats); + } + } } } diff --git a/code/server/DataBase/DataManager/DbDataManager.Game.cs b/code/server/DataBase/DataManager/DbDataManager.Game.cs index 0b72229..700f1d8 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Game.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Game.cs @@ -43,7 +43,7 @@ namespace DataBase.DataManager } } - public Task> GetGameById(int id) + public Task> GetGameById(string id) { using (var context = new PongDbContext()) { diff --git a/code/server/DataBase/DataManager/DbDataManager.Message.cs b/code/server/DataBase/DataManager/DbDataManager.Message.cs index ef18a47..d4299ad 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Message.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Message.cs @@ -52,5 +52,14 @@ namespace DataBase.DataManager return Task.FromResult(messages); } } + + public Task GetNbMessages() + { + using (var context = new PongDbContext()) + { + var nbmessages = context.Messages.ToList().Count(); + return Task.FromResult(nbmessages); + } + } } } diff --git a/code/server/DataBase/DataManager/DbDataManager.Player.cs b/code/server/DataBase/DataManager/DbDataManager.Player.cs index ce3f082..31448f0 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Player.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Player.cs @@ -21,7 +21,7 @@ namespace DataBase.DataManager } } - public async Task RemovePlayer(int id) + public async Task RemovePlayer(string id) { using (var context = new PongDbContext()) { @@ -36,7 +36,7 @@ namespace DataBase.DataManager } } - public async Task UpdatePlayer(int id, string newName) + public async Task UpdatePlayer(string id, string newName) { using (var context = new PongDbContext()) { @@ -50,7 +50,7 @@ namespace DataBase.DataManager } } - public Task GetPlayer(int id) + public Task GetPlayer(string id) { using (var context = new PongDbContext()) { @@ -67,5 +67,14 @@ namespace DataBase.DataManager return Task.FromResult(players); } } + + public Task GetNbPlayers() + { + using (var context = new PongDbContext()) + { + var nbplayers = context.Players.ToList().Count(); + return Task.FromResult(nbplayers); + } + } } } diff --git a/code/server/DataBase/Entity/Chat.cs b/code/server/DataBase/Entity/Chat.cs index 3801003..8830546 100644 --- a/code/server/DataBase/Entity/Chat.cs +++ b/code/server/DataBase/Entity/Chat.cs @@ -6,8 +6,8 @@ namespace DataBase.Entity public class Chat { public int chatId { get; set; } - public int player1 { get; set; } - public int player2 { get; set; } + public string player1 { get; set; } + public string player2 { get; set; } [ForeignKey("player1")] public Player PlayerId1 { get; set; } diff --git a/code/server/DataBase/Entity/Game.cs b/code/server/DataBase/Entity/Game.cs index bb5b470..f21d7f5 100644 --- a/code/server/DataBase/Entity/Game.cs +++ b/code/server/DataBase/Entity/Game.cs @@ -9,8 +9,8 @@ namespace DataBase.Entity public int gameId { get; set; } public int durationGame { get; set; } public int nbMaxEchanges { get; set; } - public int winner { get; set; } - public int loser { get; set; } + public string winner { get; set; } + public string loser { get; set; } public int scoreWinner { get; set; } diff --git a/code/server/DataBase/Entity/Message.cs b/code/server/DataBase/Entity/Message.cs index 8940ded..6fba502 100644 --- a/code/server/DataBase/Entity/Message.cs +++ b/code/server/DataBase/Entity/Message.cs @@ -9,7 +9,7 @@ namespace DataBase.Entity public int messageId { get; set; } public string message { get; set; } public DateTime timestamp { get; set; } - public int player { get; set; } + public string player { get; set; } public int chat { get; set; } [ForeignKey("player")] diff --git a/code/server/DataBase/Entity/Player.cs b/code/server/DataBase/Entity/Player.cs index 8663ff6..3e150d2 100644 --- a/code/server/DataBase/Entity/Player.cs +++ b/code/server/DataBase/Entity/Player.cs @@ -5,7 +5,7 @@ namespace DataBase.Entity { public class Player { - public int playerId { get; set; } + public string playerId { get; set; } public string name { get; set; } public int nbBallTouchTotal { get; set; } public int timePlayed { get; set; } diff --git a/code/server/TestControleurs/UnitTestChats.cs b/code/server/TestControleurs/UnitTestChats.cs new file mode 100644 index 0000000..d042e36 --- /dev/null +++ b/code/server/TestControleurs/UnitTestChats.cs @@ -0,0 +1,165 @@ +using ApiLeapHit.Controllers; +using DataBase.DataManager; +using DataBase.Entity; +using DTO; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; + +namespace TestControleurs +{ + [TestClass] + public class UnitTestChats + { + private DbDataManager _dataManager = new DbDataManager(); + private readonly ILogger _logger = new NullLogger(); + + [TestMethod] + public async Task AddChat_ReturnsOkResult_WhenChatIsAdded() + { + // Arrange + var player1 = new Player { playerId = 1, name = "Player1" }; + var player2 = new Player { playerId = 2, name = "Player2" }; + var dtoChat = new DTOChat { PlayerId1 = player1.playerId, PlayerId2 = player2.playerId }; + var controller = new ChatsController(_dataManager, _logger); + + // Act + var result = await controller.AddChat(dtoChat); + var objectResult = result as ObjectResult; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode); + } + + [TestMethod] + public async Task AddChat_ReturnsBadRequestResult() + { + // Arrange + var nb = await _dataManager.GetNbChats(); + var dtoChat = new DTOChat { PlayerId1 = 1, PlayerId2 = nb+10 }; + var controller = new ChatsController(_dataManager, _logger); + + // Act + var result = await controller.AddChat(dtoChat); + var objectResult = result as ObjectResult; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.BadRequest, objectResult.StatusCode); + } + + [TestMethod] + public async Task GetChats_ReturnsOkResult() + { + // Arrange + var controller = new ChatsController(_dataManager, _logger); + + // Act + var result = await controller.GetChats(); + var objectResult = (ObjectResult)result.Result; + var dtoChats = objectResult.Value as IEnumerable; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode); + } + + + //[TestMethod] + //public async Task GetChats_ReturnsNotFoundResult() + //{ + // // Arrange + // var mockDataManager = new Mock(); + // mockDataManager.Setup(dm => dm.GetChats()).ReturnsAsync(new List()); + // var controller = new ChatsController(mockDataManager.Object, _logger); + + // // Act + // var result = await controller.GetChats(); + // var objectResult = (ObjectResult)result.Result; + + // // Assert + // Assert.IsNotNull(objectResult); + // Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode); + //} + + [TestMethod] + public async Task GetChatById_ReturnsOkResult() + { + // Arrange + var chat = new Chat { chatId = 1, player1 = 1, player2 = 2 }; + var controller = new ChatsController(_dataManager, _logger); + + // Act + var result = await controller.GetChatById(chat.chatId); + var objectResult = result.Result as ObjectResult; + var dtoChat = objectResult.Value as DTOChat; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode); + Assert.IsNotNull(dtoChat); + Assert.AreEqual(chat.chatId, dtoChat.chatId); + } + + [TestMethod] + public async Task GetChatById_ReturnsNotFoundResult() + { + // Arrange + var chatId = 1000; + var controller = new ChatsController(_dataManager, _logger); + + // Act + var result = await controller.GetChatById(chatId); + var objectResult = result.Result as ObjectResult; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode); + } + + [TestMethod] + public async Task RemoveChat_ReturnsOkResult() + { + // Arrange + var nb = await _dataManager.GetNbChats(); + var chat = new Chat { chatId = nb+1, player1 = 1, player2 = 2 }; + await _dataManager.AddChat(chat); + var controller = new ChatsController(_dataManager, _logger); + + // Act + var result = await controller.RemoveChat(chat.chatId); + var objectResult = result as ObjectResult; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode); + } + + [TestMethod] + public async Task RemoveChat_ReturnsNotFoundResult() + { + // Arrange + var chatId = 1000; + var controller = new ChatsController(_dataManager, _logger); + + // Act + var result = await controller.RemoveChat(chatId); + var objectResult = result as ObjectResult; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode); + } + + } +} diff --git a/code/server/TestControleurs/UnitTestGames.cs b/code/server/TestControleurs/UnitTestGames.cs index 10533d6..846cde2 100644 --- a/code/server/TestControleurs/UnitTestGames.cs +++ b/code/server/TestControleurs/UnitTestGames.cs @@ -7,6 +7,7 @@ using DTO; using DTO.Factory; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System.Net; @@ -18,28 +19,140 @@ namespace TestControleurs [TestClass] public class UnitTestGames { + private DbDataManager _dataManager = new DbDataManager(); + private readonly ILogger _logger = new NullLogger(); + + [TestMethod] + public async Task GetGame_ReturnsOkResult() + { + // Arrange + var controller = new GamesController(_dataManager, _logger); + var nb = _dataManager.GetNbGames(); + var testGame = new Game { gameId = nb.Result + 1, durationGame = 3, loser = 1, winner = 2, nbMaxEchanges = 33, scoreLoser = 5, scoreWinner = 6 }; + await _dataManager.AddGame(testGame); + + // Act + var result = await controller.GetGame(nb.Result + 1); + var objectResult = (ObjectResult)result.Result; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode); + } + + [TestMethod] + public async Task GetGame_ReturnsNotFoundResult() + { + // Arrange + var controller = new GamesController(_dataManager, _logger); + var nb = _dataManager.GetNbGames(); + + // Act + var result = await controller.GetGame(nb.Result + 1); + var objectResult = (ObjectResult)result.Result; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode); + } + + [TestMethod] + public async Task RemoveGame_ReturnsNotFoundResult() + { + // Arrange + var controller = new GamesController(_dataManager, _logger); + var nb = _dataManager.GetNbGames(); + + // Act + var result = await controller.RemoveGame(nb.Result + 1); + var objectResult = (ObjectResult)result; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode); + } + [TestMethod] - public async Task TestGetPlayer_ValidId() + public async Task RemoveGame_ReturnsOKResult() { // Arrange - int id = 9; - var mockDataManager = new Mock(); - var mockLogger = new Mock>(); - var player = new Player { playerId = id, name = "Test Player", nbBallTouchTotal = 0, timePlayed = 3 }; - var controller = new PlayerController(mockDataManager.Object, mockLogger.Object); + var controller = new GamesController(_dataManager, _logger); + var nb = _dataManager.GetNbGames(); + var testGame = new Game { gameId = nb.Result + 1, durationGame = 3, loser = 1, winner = 2, nbMaxEchanges = 33, scoreLoser = 5, scoreWinner = 6 }; + await _dataManager.AddGame(testGame); + + // Act + var result = await controller.RemoveGame(nb.Result + 1); + var objectResult = (ObjectResult)result; - var rep = await controller.AddPlayer(player.ToDto()); + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode); + } + + [TestMethod] + public async Task GetGameByIdPlayer_ReturnsOKResult() + { + // Arrange + var controller = new GamesController(_dataManager, _logger); + var nb = _dataManager.GetNbGames(); + var nbP = _dataManager.GetNbPlayers(); + var testGame = new Game { gameId = nb.Result + 1, durationGame = 3, loser = nbP.Result, winner = 2, nbMaxEchanges = 33, scoreLoser = 5, scoreWinner = 6 }; + await _dataManager.AddGame(testGame); // Act - var result = await controller.GetPlayer(id); + var result = await controller.GetGameByIdPlayer(nbP.Result); var objectResult = (ObjectResult)result.Result; - var apiResponse = objectResult.Value as ApiResponse; // Assert Assert.IsNotNull(objectResult); Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode); - Assert.AreEqual(apiResponse.Data.playerId, id); } + [TestMethod] + public async Task GetGameByIdPlayer_ReturnsNotFoundResult() + { + // Arrange + var controller = new GamesController(_dataManager, _logger); + var nb = _dataManager.GetNbPlayers(); + + // Act + var result = await controller.GetGameByIdPlayer(nb.Result + 1); + var objectResult = (ObjectResult)result.Result; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode); + } + + //[HttpPost] + //public async Task AddGame([FromBody] DTOGame dtoGame) + //{ + // try + // { + // var winner = await _dataManager.GetPlayer(dtoGame.playerWinner); + // var loser = await _dataManager.GetPlayer(dtoGame.playerLoser); + + // if (winner == null || loser == null) + // { + // var errorMessage = "Le joueur gagnant ou le joueur perdant n'existe pas pour la partie avec l'identifiant " + dtoGame.gameId + "."; + // _logger.LogError(errorMessage); + // return NotFound(new ApiResponse(errorMessage)); + // } + + // var game = dtoGame.ToGame(); + // await _dataManager.AddGame(game); + + // var successMessage = "La partie avec l'identifiant " + game.gameId + " a été ajoutée avec succčs."; + // _logger.LogInformation(successMessage); + // return Ok(new ApiResponse(successMessage, game)); + // } + // catch (Exception ex) + // { + // var errorMessage = "Une erreur est survenue lors de l'ajout de la partie : " + ex.Message; + // _logger.LogError(errorMessage); + // return StatusCode(500, new ApiResponse(errorMessage)); + // } + //} } } \ No newline at end of file diff --git a/code/server/TestControleurs/UnitTestMessages.cs b/code/server/TestControleurs/UnitTestMessages.cs new file mode 100644 index 0000000..2e93665 --- /dev/null +++ b/code/server/TestControleurs/UnitTestMessages.cs @@ -0,0 +1,129 @@ +using ApiLeapHit.Controllers; +using ApiLeapHit.Mapper; +using DataBase.DataManager; +using DataBase.Entity; +using DTO; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; + +namespace TestControleurs +{ + [TestClass] + public class UnitTestMessages + { + private DbDataManager _dataManager = new DbDataManager(); + private readonly ILogger _logger = new NullLogger(); + + [TestMethod] + public async Task ReceiveMessage_ReturnsOkResult() + { + // Arrange + var controller = new MessagesController(_dataManager, _logger); + var nb = _dataManager.GetNbMessages(); + var testMessage = new Message { messageId = nb.Result+1, message = "Test message", timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc), player = 1 , chat =1}; + await _dataManager.SendMessage(testMessage); + + // Act + var result = await controller.ReceiveMessage(1); + var objectResult = (ObjectResult)result.Result; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode); + } + + [TestMethod] + public async Task ReceiveMessage_ReturnsNotFound() + { + // Arrange + var controller = new MessagesController(_dataManager, _logger); + var nb = _dataManager.GetNbMessages(); + + // Act + var result = await controller.ReceiveMessage(nb.Result+1); + var objectResult = (ObjectResult)result.Result; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode); + } + + [TestMethod] + public async Task RemoveMessage_ReturnsBadRequest() + { + // Arrange + var controller = new MessagesController(_dataManager, _logger); + var nb = _dataManager.GetNbMessages(); + + // Act + var result = await controller.RemoveMessage(nb.Result + 1); + var objectResult = (ObjectResult)result; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.BadRequest, objectResult.StatusCode); + } + + [TestMethod] + public async Task RemoveMessage_ReturnsOk() + { + // Arrange + var controller = new MessagesController(_dataManager, _logger); + var nb = _dataManager.GetNbMessages(); + var testMessage = new Message { messageId = nb.Result + 1, message = "Test message", timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc), player = 1, chat = 1 }; + + // Act + var result = await controller.RemoveMessage(nb.Result + 1); + var objectResult = (ObjectResult)result; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.BadRequest, objectResult.StatusCode); + } + + [TestMethod] + public async Task SendMessage_ReturnsCreated() + { + // Arrange + var controller = new MessagesController(_dataManager, _logger); + var nb = _dataManager.GetNbMessages(); + var testMessage = new DTOMessage { messageId = nb.Result + 1, message = "Test message", timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc), PlayerId = 1, ChatId = 1 }; + + // Act + var result = await controller.SendMessage(testMessage); + var objectResult = (ObjectResult)result; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.Created, objectResult.StatusCode); + await controller.RemoveMessage(nb.Result + 1); + } + + [TestMethod] + public async Task SendMessage_ReturnsNotFound() + { + // Arrange + var controller = new MessagesController(_dataManager, _logger); + var nb = _dataManager.GetNbMessages(); + var nbP = _dataManager.GetNbPlayers(); + var testMessage = new DTOMessage { messageId = nb.Result + 1, message = "Test message", timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc), PlayerId = nb.Result+1, ChatId = 1 }; + + // Act + var result = await controller.SendMessage(testMessage); + var objectResult = (ObjectResult)result; + + // Assert + Assert.IsNotNull(objectResult); + Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode); + await controller.RemoveMessage(nb.Result + 1); + } + } +} diff --git a/code/server/TestControleurs/UnitTestPlayers.cs b/code/server/TestControleurs/UnitTestPlayers.cs new file mode 100644 index 0000000..d383b13 --- /dev/null +++ b/code/server/TestControleurs/UnitTestPlayers.cs @@ -0,0 +1,40 @@ +using ApiLeapHit.Controllers; +using DataBase.DataManager; +using DataBase.Entity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TestControleurs +{ + [TestClass] + public class UnitTestPlayers + { + private DbDataManager _dataManager = new DbDataManager(); + private readonly ILogger _logger = new NullLogger(); + + //[TestMethod] + //public async Task GetPlayer_ReturnsOkResult() + //{ + // // Arrange + // var playerId = 1; + + // var player = new Player() { Id = playerId, Name = "John Doe" }; + // _mockDataManager.Setup(dm => dm.GetPlayer(playerId)).ReturnsAsync(player); + + // // Act + // var result = await _controller.GetPlayer(playerId); + + // // Assert + // Assert.IsInstanceOfType(result, typeof(OkObjectResult)); + // var apiResponse = ((OkObjectResult)result).Value as ApiResponse; + // Assert.IsNotNull(apiResponse); + //} + } +} From 555d62e282cb0a57decdc4d5d4d51ac06c257e8f Mon Sep 17 00:00:00 2001 From: Noan RANDON Date: Thu, 16 Mar 2023 09:21:32 +0100 Subject: [PATCH 4/5] Update 'code/Dockerfile' --- code/Dockerfile | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/code/Dockerfile b/code/Dockerfile index a9ae473..ab1f7af 100644 --- a/code/Dockerfile +++ b/code/Dockerfile @@ -1,3 +1,5 @@ +#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. + FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 80 @@ -5,10 +7,10 @@ EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src -COPY ["server/ApiLeapHit/ApiLeapHit.csproj", "ApiLeapHit/"] -COPY ["server/DTO/DTO.csproj", "DTO/"] -COPY ["server/DataBase/DataBase.csproj", "DataBase/"] -RUN dotnet restore "server/ApiLeapHit/ApiLeapHit.csproj" +COPY ["ApiLeapHit/ApiLeapHit.csproj", "ApiLeapHit/"] +COPY ["DTO/DTO.csproj", "DTO/"] +COPY ["DataBase/DataBase.csproj", "DataBase/"] +RUN dotnet restore "ApiLeapHit/ApiLeapHit.csproj" COPY . . WORKDIR "/src/ApiLeapHit" RUN dotnet build "ApiLeapHit.csproj" -c Release -o /app/build @@ -19,5 +21,4 @@ RUN dotnet publish "ApiLeapHit.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . -ENTRYPOINT ["dotnet", "ApiLeapHit.dll"] - +ENTRYPOINT ["dotnet", "ApiLeapHit.dll"] \ No newline at end of file From a58b352244c538125416ad5b90686d90e049f812 Mon Sep 17 00:00:00 2001 From: Noan RANDON Date: Thu, 16 Mar 2023 09:22:24 +0100 Subject: [PATCH 5/5] Update 'code/Dockerfile' --- code/Dockerfile | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/code/Dockerfile b/code/Dockerfile index ab1f7af..22acdf3 100644 --- a/code/Dockerfile +++ b/code/Dockerfile @@ -1,5 +1,3 @@ -#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. - FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 80 @@ -7,9 +5,9 @@ EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src -COPY ["ApiLeapHit/ApiLeapHit.csproj", "ApiLeapHit/"] -COPY ["DTO/DTO.csproj", "DTO/"] -COPY ["DataBase/DataBase.csproj", "DataBase/"] +COPY ["server/ApiLeapHit/ApiLeapHit.csproj", "ApiLeapHit/"] +COPY ["server/DTO/DTO.csproj", "DTO/"] +COPY ["server/DataBase/DataBase.csproj", "DataBase/"] RUN dotnet restore "ApiLeapHit/ApiLeapHit.csproj" COPY . . WORKDIR "/src/ApiLeapHit"