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 01/22] =?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"] -- 2.36.3 From 62bea47b3db56015c1db9fc22f9541680c3e401c Mon Sep 17 00:00:00 2001 From: Noan RANDON Date: Tue, 7 Mar 2023 10:03:10 +0100 Subject: [PATCH 02/22] :memo: Modif drone --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 22945b3..aba6469 100644 --- a/.drone.yml +++ b/.drone.yml @@ -10,7 +10,7 @@ steps: - name: build-docker-image image: plugins/docker settings: - dockerfile: code/Dockerfile + dockerfile: code/server/Dockerfile context: code/ registry: hub.codefirst.iut.uca.fr repo: hub.codefirst.iut.uca.fr/leap-hit-team/leap-hit-server -- 2.36.3 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 03/22] :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); - } } -- 2.36.3 From 4b217176405c2fb60ea314fe65c54b34de9b1a4d Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Tue, 7 Mar 2023 10:07:10 +0100 Subject: [PATCH 04/22] :memo: Modif DockerFile --- code/server/{ApiLeapHit => }/Dockerfile | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename code/server/{ApiLeapHit => }/Dockerfile (100%) diff --git a/code/server/ApiLeapHit/Dockerfile b/code/server/Dockerfile similarity index 100% rename from code/server/ApiLeapHit/Dockerfile rename to code/server/Dockerfile -- 2.36.3 From 2640edf6930b4d47f758a181fad294076c9f2ead Mon Sep 17 00:00:00 2001 From: Noan RANDON Date: Tue, 7 Mar 2023 10:10:29 +0100 Subject: [PATCH 05/22] :memo: Edit .drone.yml file --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index aba6469..66f43b6 100644 --- a/.drone.yml +++ b/.drone.yml @@ -11,7 +11,7 @@ steps: image: plugins/docker settings: dockerfile: code/server/Dockerfile - context: code/ + context: code/server registry: hub.codefirst.iut.uca.fr repo: hub.codefirst.iut.uca.fr/leap-hit-team/leap-hit-server username: -- 2.36.3 From dc7f76a672cb81c94718aca0eb6466b2e4e68ad9 Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Tue, 7 Mar 2023 10:14:30 +0100 Subject: [PATCH 06/22] =?UTF-8?q?:hammer:=20r=C3=A9solution=20probl=C3=A8m?= =?UTF-8?q?e=20playerController?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/ApiLeapHit/Controllers/MessageController.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/server/ApiLeapHit/Controllers/MessageController.cs b/code/server/ApiLeapHit/Controllers/MessageController.cs index 48125af..8661867 100644 --- a/code/server/ApiLeapHit/Controllers/MessageController.cs +++ b/code/server/ApiLeapHit/Controllers/MessageController.cs @@ -85,11 +85,11 @@ namespace ApiLeapHit.Controllers } var response = new ApiResponse("Joueur ajoutĂ© avec succès."); - response.Links.Add(new ApiLink( - Url.Action("GetPlayer", "Player", new { id = player.playerId }), - "self", - "GET" - )); + //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())); -- 2.36.3 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 07/22] :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); + //} + } +} -- 2.36.3 From b93b50764d40bba4c68ea0c83754afbd778b399a Mon Sep 17 00:00:00 2001 From: Noan RANDON Date: Thu, 16 Mar 2023 09:16:21 +0100 Subject: [PATCH 08/22] Update 'code/server/ApiLeapHit/Controllers/MessageController.cs' --- .../Controllers/MessageController.cs | 106 +++++++++--------- 1 file changed, 54 insertions(+), 52 deletions(-) diff --git a/code/server/ApiLeapHit/Controllers/MessageController.cs b/code/server/ApiLeapHit/Controllers/MessageController.cs index 8661867..4332124 100644 --- a/code/server/ApiLeapHit/Controllers/MessageController.cs +++ b/code/server/ApiLeapHit/Controllers/MessageController.cs @@ -11,13 +11,13 @@ namespace ApiLeapHit.Controllers { [Route("api/[controller]")] [ApiController] - public class MessageController : Controller + public class MessagesController : Controller { private readonly DbDataManager _dataManager; - private readonly ILogger _logger; + private readonly ILogger _logger; - public MessageController(DbDataManager dataManager, ILogger logger) + public MessagesController(DbDataManager dataManager, ILogger logger) { _dataManager = dataManager; _logger = logger; @@ -31,19 +31,22 @@ namespace ApiLeapHit.Controllers 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.")); + 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()); - _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.")); + 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) { - _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}")); + 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)); } } @@ -55,19 +58,22 @@ namespace ApiLeapHit.Controllers 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.")); + 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 { - _logger.LogWarning($"Le message avec l'identifiant {id} n'existe pas."); - return NotFound(new ApiResponse($"Le message avec l'identifiant {id} n'existe pas.")); + 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) { - _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}")); + 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)); } } @@ -80,51 +86,47 @@ namespace ApiLeapHit.Controllers 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 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 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())); + 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) { - _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}")); + 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}")); - } - } + //[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}")); + // } + //} } } -- 2.36.3 From 555d62e282cb0a57decdc4d5d4d51ac06c257e8f Mon Sep 17 00:00:00 2001 From: Noan RANDON Date: Thu, 16 Mar 2023 09:21:32 +0100 Subject: [PATCH 09/22] 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 -- 2.36.3 From a58b352244c538125416ad5b90686d90e049f812 Mon Sep 17 00:00:00 2001 From: Noan RANDON Date: Thu, 16 Mar 2023 09:22:24 +0100 Subject: [PATCH 10/22] 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" -- 2.36.3 From 773a72d74306b9e041b37f206c059dbc1b8d4ed7 Mon Sep 17 00:00:00 2001 From: Noan RANDON Date: Thu, 16 Mar 2023 09:25:33 +0100 Subject: [PATCH 11/22] Delete 'code/server/Dockerfile' --- code/server/Dockerfile | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 code/server/Dockerfile diff --git a/code/server/Dockerfile b/code/server/Dockerfile deleted file mode 100644 index ab1f7af..0000000 --- a/code/server/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -#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 -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/"] -RUN dotnet restore "ApiLeapHit/ApiLeapHit.csproj" -COPY . . -WORKDIR "/src/ApiLeapHit" -RUN dotnet build "ApiLeapHit.csproj" -c Release -o /app/build - -FROM build AS publish -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"] \ No newline at end of file -- 2.36.3 From d9c862f421c6c100d304ac4b615850a0dbcac1f4 Mon Sep 17 00:00:00 2001 From: Noan RANDON Date: Thu, 16 Mar 2023 09:26:02 +0100 Subject: [PATCH 12/22] Delete 'code/server/ApiLeapHit/Controllers/MessageController.cs' --- .../Controllers/MessageController.cs | 132 ------------------ 1 file changed, 132 deletions(-) delete mode 100644 code/server/ApiLeapHit/Controllers/MessageController.cs diff --git a/code/server/ApiLeapHit/Controllers/MessageController.cs b/code/server/ApiLeapHit/Controllers/MessageController.cs deleted file mode 100644 index 4332124..0000000 --- a/code/server/ApiLeapHit/Controllers/MessageController.cs +++ /dev/null @@ -1,132 +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 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}")); - // } - //} - - } -} -- 2.36.3 From 6c93f77bbc1d3a92f5dff0af1e3955e6005bbbdd Mon Sep 17 00:00:00 2001 From: Noan RANDON Date: Thu, 16 Mar 2023 09:28:45 +0100 Subject: [PATCH 13/22] Delete 'code/Dockerfile' --- code/Dockerfile | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 code/Dockerfile diff --git a/code/Dockerfile b/code/Dockerfile deleted file mode 100644 index 22acdf3..0000000 --- a/code/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base -WORKDIR /app -EXPOSE 80 -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 "ApiLeapHit/ApiLeapHit.csproj" -COPY . . -WORKDIR "/src/ApiLeapHit" -RUN dotnet build "ApiLeapHit.csproj" -c Release -o /app/build - -FROM build AS publish -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"] \ No newline at end of file -- 2.36.3 From 1d80ebd11fad39124fcef4e480be8feb7e2c0dfb Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Thu, 16 Mar 2023 09:49:21 +0100 Subject: [PATCH 14/22] :hammer: CreatePlayer --- code/server/ApiLeapHit/Controllers/ChatsController.cs | 4 ++-- code/server/ApiLeapHit/Controllers/GamesController.cs | 2 +- code/server/ApiLeapHit/Controllers/PlayersController.cs | 8 ++++++-- code/server/ApiLeapHit/Mapper/GameMapper.cs | 4 ++-- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/code/server/ApiLeapHit/Controllers/ChatsController.cs b/code/server/ApiLeapHit/Controllers/ChatsController.cs index 04eb037..6d0a5e7 100644 --- a/code/server/ApiLeapHit/Controllers/ChatsController.cs +++ b/code/server/ApiLeapHit/Controllers/ChatsController.cs @@ -108,7 +108,7 @@ namespace ApiLeapHit.Controllers [HttpGet("Player/{id}")] - public async Task>> GetChatsByIdPlayer(int id) + public async Task>> GetChatsByIdPlayer(string id) { try { @@ -135,7 +135,7 @@ namespace ApiLeapHit.Controllers } [HttpGet("Players/{idPlayer1}/{idPlayer2}")] - public async Task>> GetChatsByIdPlayers(int idPlayer1, int idPlayer2) + public async Task>> GetChatsByIdPlayers(string idPlayer1, string idPlayer2) { try { diff --git a/code/server/ApiLeapHit/Controllers/GamesController.cs b/code/server/ApiLeapHit/Controllers/GamesController.cs index 346a06f..1729120 100644 --- a/code/server/ApiLeapHit/Controllers/GamesController.cs +++ b/code/server/ApiLeapHit/Controllers/GamesController.cs @@ -95,7 +95,7 @@ namespace ApiLeapHit.Controllers //} [HttpGet("Player/{id}")] - public async Task>> GetGameByIdPlayer(int id) + public async Task>> GetGameByIdPlayer(string id) { try { diff --git a/code/server/ApiLeapHit/Controllers/PlayersController.cs b/code/server/ApiLeapHit/Controllers/PlayersController.cs index 86cc4a2..a835e97 100644 --- a/code/server/ApiLeapHit/Controllers/PlayersController.cs +++ b/code/server/ApiLeapHit/Controllers/PlayersController.cs @@ -22,11 +22,15 @@ namespace ApiLeapHit.Controllers _logger = logger; } - [HttpPost] - public async Task>> CreatePlayer() + [HttpGet("/clePlayer/{idIdentification}")] + public async Task>> CreatePlayer(string idIdentification) { try { + if(!idIdentification.Equals("K02q7naLzjmodzAFfoSO4mPydr7W5hydPMrHtA6D")) + { + return StatusCode((int)HttpStatusCode.NotFound, new ApiResponse("Le numĂ©o n'est pas correct.")); + } var player = new Player(); string id; do diff --git a/code/server/ApiLeapHit/Mapper/GameMapper.cs b/code/server/ApiLeapHit/Mapper/GameMapper.cs index 1500e70..49674b0 100644 --- a/code/server/ApiLeapHit/Mapper/GameMapper.cs +++ b/code/server/ApiLeapHit/Mapper/GameMapper.cs @@ -14,8 +14,8 @@ namespace ApiLeapHit.Mapper nbMaxEchanges = game.nbMaxEchanges, playerWinner = game.winner, playerLoser = game.loser, - scoreLoser = game.loser, - scoreWinner = game.winner + scoreLoser = game.scoreLoser, + scoreWinner = game.scoreWinner }; return dtoGame; } -- 2.36.3 From 0825bcfe9bfd5af5add32a21b20a16cf6bc976ff Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Thu, 16 Mar 2023 10:26:11 +0100 Subject: [PATCH 15/22] :hammer: ajout bdd --- code/server/DataBase/Context/PongDbContext.cs | 2 +- ...> 20230316092529_mymigrations.Designer.cs} | 50 ++++++++++-------- ...ions.cs => 20230316092529_mymigrations.cs} | 27 +++++----- .../PongDbContextWithStubModelSnapshot.cs | 46 ++++++++-------- code/server/DataBase/PongDB.db | Bin 57344 -> 61440 bytes code/server/DataBase/PongDB.db-shm | Bin 32768 -> 0 bytes code/server/DataBase/PongDB.db-wal | 0 7 files changed, 66 insertions(+), 59 deletions(-) rename code/server/DataBase/Migrations/{20230228121953_Migrations.Designer.cs => 20230316092529_mymigrations.Designer.cs} (84%) rename code/server/DataBase/Migrations/{20230228121953_Migrations.cs => 20230316092529_mymigrations.cs} (87%) delete mode 100644 code/server/DataBase/PongDB.db-shm delete mode 100644 code/server/DataBase/PongDB.db-wal diff --git a/code/server/DataBase/Context/PongDbContext.cs b/code/server/DataBase/Context/PongDbContext.cs index 5829fd8..7bc4621 100644 --- a/code/server/DataBase/Context/PongDbContext.cs +++ b/code/server/DataBase/Context/PongDbContext.cs @@ -19,7 +19,7 @@ namespace DataBase.Context if (!optionsBuilder.IsConfigured) { - optionsBuilder.UseSqlite($"Data Source=C:\\Users\\noanr\\source\\repos\\leap-hit-server\\code\\server\\DataBase\\PongDB.db"); + optionsBuilder.UseSqlite("Data Source=../DataBase/PongDB.db"); } } } diff --git a/code/server/DataBase/Migrations/20230228121953_Migrations.Designer.cs b/code/server/DataBase/Migrations/20230316092529_mymigrations.Designer.cs similarity index 84% rename from code/server/DataBase/Migrations/20230228121953_Migrations.Designer.cs rename to code/server/DataBase/Migrations/20230316092529_mymigrations.Designer.cs index a256488..081b26f 100644 --- a/code/server/DataBase/Migrations/20230228121953_Migrations.Designer.cs +++ b/code/server/DataBase/Migrations/20230316092529_mymigrations.Designer.cs @@ -11,8 +11,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace DataBase.Migrations { [DbContext(typeof(PongDbContextWithStub))] - [Migration("20230228121953_Migrations")] - partial class Migrations + [Migration("20230316092529_mymigrations")] + partial class mymigrations { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -26,11 +26,13 @@ namespace DataBase.Migrations .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); - b.Property("player1") - .HasColumnType("INTEGER"); + b.Property("player1") + .IsRequired() + .HasColumnType("TEXT"); - b.Property("player2") - .HasColumnType("INTEGER"); + b.Property("player2") + .IsRequired() + .HasColumnType("TEXT"); b.HasKey("chatId"); @@ -44,8 +46,8 @@ namespace DataBase.Migrations new { chatId = 1, - player1 = 1, - player2 = 2 + player1 = "test", + player2 = "test2" }); }); @@ -58,8 +60,9 @@ namespace DataBase.Migrations b.Property("durationGame") .HasColumnType("INTEGER"); - b.Property("loser") - .HasColumnType("INTEGER"); + b.Property("loser") + .IsRequired() + .HasColumnType("TEXT"); b.Property("nbMaxEchanges") .HasColumnType("INTEGER"); @@ -70,8 +73,9 @@ namespace DataBase.Migrations b.Property("scoreWinner") .HasColumnType("INTEGER"); - b.Property("winner") - .HasColumnType("INTEGER"); + b.Property("winner") + .IsRequired() + .HasColumnType("TEXT"); b.HasKey("gameId"); @@ -86,11 +90,11 @@ namespace DataBase.Migrations { gameId = 1, durationGame = 65, - loser = 2, + loser = "test2", nbMaxEchanges = 5, scoreLoser = 2, scoreWinner = 6, - winner = 1 + winner = "test" }); }); @@ -107,8 +111,9 @@ namespace DataBase.Migrations .IsRequired() .HasColumnType("TEXT"); - b.Property("player") - .HasColumnType("INTEGER"); + b.Property("player") + .IsRequired() + .HasColumnType("TEXT"); b.Property("timestamp") .HasColumnType("TEXT"); @@ -127,7 +132,7 @@ namespace DataBase.Migrations messageId = 1, chat = 1, message = "Salut mon gars !", - player = 1, + player = "test", timestamp = new DateTime(2023, 2, 16, 17, 5, 12, 0, DateTimeKind.Unspecified) }, new @@ -135,16 +140,15 @@ namespace DataBase.Migrations messageId = 2, chat = 1, message = "Comment tu vas ?", - player = 2, + player = "test2", timestamp = new DateTime(2023, 2, 16, 17, 12, 35, 0, DateTimeKind.Unspecified) }); }); modelBuilder.Entity("DataBase.Entity.Player", b => { - b.Property("playerId") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); + b.Property("playerId") + .HasColumnType("TEXT"); b.Property("name") .IsRequired() @@ -163,14 +167,14 @@ namespace DataBase.Migrations b.HasData( new { - playerId = 1, + playerId = "test", name = "Rami", nbBallTouchTotal = 20, timePlayed = 120 }, new { - playerId = 2, + playerId = "test2", name = "Hugo", nbBallTouchTotal = 90, timePlayed = 250 diff --git a/code/server/DataBase/Migrations/20230228121953_Migrations.cs b/code/server/DataBase/Migrations/20230316092529_mymigrations.cs similarity index 87% rename from code/server/DataBase/Migrations/20230228121953_Migrations.cs rename to code/server/DataBase/Migrations/20230316092529_mymigrations.cs index cf2b11d..698e944 100644 --- a/code/server/DataBase/Migrations/20230228121953_Migrations.cs +++ b/code/server/DataBase/Migrations/20230316092529_mymigrations.cs @@ -8,7 +8,7 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace DataBase.Migrations { /// - public partial class Migrations : Migration + public partial class mymigrations : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) @@ -17,8 +17,7 @@ namespace DataBase.Migrations name: "Players", columns: table => new { - playerId = table.Column(type: "INTEGER", nullable: false) - .Annotation("Sqlite:Autoincrement", true), + playerId = table.Column(type: "TEXT", nullable: false), name = table.Column(type: "TEXT", nullable: false), nbBallTouchTotal = table.Column(type: "INTEGER", nullable: false), timePlayed = table.Column(type: "INTEGER", nullable: false) @@ -34,8 +33,8 @@ namespace DataBase.Migrations { chatId = table.Column(type: "INTEGER", nullable: false) .Annotation("Sqlite:Autoincrement", true), - player1 = table.Column(type: "INTEGER", nullable: false), - player2 = table.Column(type: "INTEGER", nullable: false) + player1 = table.Column(type: "TEXT", nullable: false), + player2 = table.Column(type: "TEXT", nullable: false) }, constraints: table => { @@ -62,8 +61,8 @@ namespace DataBase.Migrations .Annotation("Sqlite:Autoincrement", true), durationGame = table.Column(type: "INTEGER", nullable: false), nbMaxEchanges = table.Column(type: "INTEGER", nullable: false), - winner = table.Column(type: "INTEGER", nullable: false), - loser = table.Column(type: "INTEGER", nullable: false), + winner = table.Column(type: "TEXT", nullable: false), + loser = table.Column(type: "TEXT", nullable: false), scoreWinner = table.Column(type: "INTEGER", nullable: false), scoreLoser = table.Column(type: "INTEGER", nullable: false) }, @@ -92,7 +91,7 @@ namespace DataBase.Migrations .Annotation("Sqlite:Autoincrement", true), message = table.Column(type: "TEXT", nullable: false), timestamp = table.Column(type: "TEXT", nullable: false), - player = table.Column(type: "INTEGER", nullable: false), + player = table.Column(type: "TEXT", nullable: false), chat = table.Column(type: "INTEGER", nullable: false) }, constraints: table => @@ -117,27 +116,27 @@ namespace DataBase.Migrations columns: new[] { "playerId", "name", "nbBallTouchTotal", "timePlayed" }, values: new object[,] { - { 1, "Rami", 20, 120 }, - { 2, "Hugo", 90, 250 } + { "test", "Rami", 20, 120 }, + { "test2", "Hugo", 90, 250 } }); migrationBuilder.InsertData( table: "Chats", columns: new[] { "chatId", "player1", "player2" }, - values: new object[] { 1, 1, 2 }); + values: new object[] { 1, "test", "test2" }); migrationBuilder.InsertData( table: "Games", columns: new[] { "gameId", "durationGame", "loser", "nbMaxEchanges", "scoreLoser", "scoreWinner", "winner" }, - values: new object[] { 1, 65, 2, 5, 2, 6, 1 }); + values: new object[] { 1, 65, "test2", 5, 2, 6, "test" }); migrationBuilder.InsertData( table: "Messages", columns: new[] { "messageId", "chat", "message", "player", "timestamp" }, values: new object[,] { - { 1, 1, "Salut mon gars !", 1, new DateTime(2023, 2, 16, 17, 5, 12, 0, DateTimeKind.Unspecified) }, - { 2, 1, "Comment tu vas ?", 2, new DateTime(2023, 2, 16, 17, 12, 35, 0, DateTimeKind.Unspecified) } + { 1, 1, "Salut mon gars !", "test", new DateTime(2023, 2, 16, 17, 5, 12, 0, DateTimeKind.Unspecified) }, + { 2, 1, "Comment tu vas ?", "test2", new DateTime(2023, 2, 16, 17, 12, 35, 0, DateTimeKind.Unspecified) } }); migrationBuilder.CreateIndex( diff --git a/code/server/DataBase/Migrations/PongDbContextWithStubModelSnapshot.cs b/code/server/DataBase/Migrations/PongDbContextWithStubModelSnapshot.cs index e144450..7d94251 100644 --- a/code/server/DataBase/Migrations/PongDbContextWithStubModelSnapshot.cs +++ b/code/server/DataBase/Migrations/PongDbContextWithStubModelSnapshot.cs @@ -23,11 +23,13 @@ namespace DataBase.Migrations .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); - b.Property("player1") - .HasColumnType("INTEGER"); + b.Property("player1") + .IsRequired() + .HasColumnType("TEXT"); - b.Property("player2") - .HasColumnType("INTEGER"); + b.Property("player2") + .IsRequired() + .HasColumnType("TEXT"); b.HasKey("chatId"); @@ -41,8 +43,8 @@ namespace DataBase.Migrations new { chatId = 1, - player1 = 1, - player2 = 2 + player1 = "test", + player2 = "test2" }); }); @@ -55,8 +57,9 @@ namespace DataBase.Migrations b.Property("durationGame") .HasColumnType("INTEGER"); - b.Property("loser") - .HasColumnType("INTEGER"); + b.Property("loser") + .IsRequired() + .HasColumnType("TEXT"); b.Property("nbMaxEchanges") .HasColumnType("INTEGER"); @@ -67,8 +70,9 @@ namespace DataBase.Migrations b.Property("scoreWinner") .HasColumnType("INTEGER"); - b.Property("winner") - .HasColumnType("INTEGER"); + b.Property("winner") + .IsRequired() + .HasColumnType("TEXT"); b.HasKey("gameId"); @@ -83,11 +87,11 @@ namespace DataBase.Migrations { gameId = 1, durationGame = 65, - loser = 2, + loser = "test2", nbMaxEchanges = 5, scoreLoser = 2, scoreWinner = 6, - winner = 1 + winner = "test" }); }); @@ -104,8 +108,9 @@ namespace DataBase.Migrations .IsRequired() .HasColumnType("TEXT"); - b.Property("player") - .HasColumnType("INTEGER"); + b.Property("player") + .IsRequired() + .HasColumnType("TEXT"); b.Property("timestamp") .HasColumnType("TEXT"); @@ -124,7 +129,7 @@ namespace DataBase.Migrations messageId = 1, chat = 1, message = "Salut mon gars !", - player = 1, + player = "test", timestamp = new DateTime(2023, 2, 16, 17, 5, 12, 0, DateTimeKind.Unspecified) }, new @@ -132,16 +137,15 @@ namespace DataBase.Migrations messageId = 2, chat = 1, message = "Comment tu vas ?", - player = 2, + player = "test2", timestamp = new DateTime(2023, 2, 16, 17, 12, 35, 0, DateTimeKind.Unspecified) }); }); modelBuilder.Entity("DataBase.Entity.Player", b => { - b.Property("playerId") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); + b.Property("playerId") + .HasColumnType("TEXT"); b.Property("name") .IsRequired() @@ -160,14 +164,14 @@ namespace DataBase.Migrations b.HasData( new { - playerId = 1, + playerId = "test", name = "Rami", nbBallTouchTotal = 20, timePlayed = 120 }, new { - playerId = 2, + playerId = "test2", name = "Hugo", nbBallTouchTotal = 90, timePlayed = 250 diff --git a/code/server/DataBase/PongDB.db b/code/server/DataBase/PongDB.db index 07e0a8ce797734c0ead6ef21277e81e79d0602be..76ba767102f09f04d92ba2c694e00e8100591a41 100644 GIT binary patch delta 846 zcmah`&r1|h9Dm=Loi{W4W4>-Uy>we$SP{Zp_eW+DMPiYcNWw#OStpvdrCpbt71oo6 zVRjI*hu1$+Sw7f;(^Xhw7 zCKXDSIn2*1%zoidfY49*bm#=g{B@|+KhY+6?US8+Gcd^ql?bFA=~4bHxb44hh%$>r zV4{J44W081T)IBMqrnD#QLE>-wL(X`kFuT!ko?dsvtr#V=o@4_*Mz7+TqwTcEmyKW$9!(lgy+}C%e;~>F#WCw3yEg8|8dy$m&WY6B$1t z1aOn!rXBA8gl$b?uX;#N$dL=UM({hXIVm4785Sg_gHSfDa=LFMSGqxdBS^Xq;6m4o zV!poOh6uPra36P^m@jxl6`9AU1zFTpSGh3w6C*yNGxy-RxmhBv6a0nSxbCH$42ohD zYLgNaL1b!m8sJpDcZ{;-b^&e?+;WmWV_XM?0O$;$M>?>kLiHhY1ebBn4%f}1oDe8! z&oDke))Msc+rb5NzBbmPxj^-+_MKPQ;qh;%J3+O}SE)UMdo@aN?&G=qmpU*E{A0MV KMC<6`ANB`pALjr7 delta 766 zcmaKoPe@cj9LMK3^XAQ)_x8PU!+P1ay1615Xu4Z$CS?+o7h#L&U_rcSF+o%IZBU&o zL4yt|Kj>6}w>(JTUIqVj@|H$ahowLwszV1!Fg^6%u0arWnVH{rzQ50J<~#C{jV!Xs zI&h{E-L*C!C(fFhwM+IR>#ck&rbV~@U4NpV<6rrBFvcG*@5f=i7EGMbYmtgQxS-eLNfCn-UKUAAhy!3?he&|Lt0GgE7s8FlVLVgt zt`FpTa=!2N<^12ffpcOWmrb|$z+g~wS{JVC!ow?N^LcMD=a(0O&*XAwqxAzgZ^nz0 z=20+5+j!YN)`hXiSa@yJ4-a^EbNLi5nuoF1uEx#C3e9S`WHkZDZ&ssuKhK04i@|6I zuGpvWrA%Pbsm332A9gx7ifhg>&`Ly=iqSK#Rr4WWoo=c%m2OR?PPC=k+K;EN_4N1U zy+Z%cEkD!J+LAU2A)wZYS`S*@tLB5OQ~tBV4$PWbAZkN>Qfq1 Date: Thu, 16 Mar 2023 10:40:06 +0100 Subject: [PATCH 16/22] :hammer: modif chemin db --- code/server/DataBase/Context/PongDbContext.cs | 5 ++++- code/server/DataBase/PongDB.db-shm | Bin 0 -> 32768 bytes code/server/DataBase/PongDB.db-wal | 0 3 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 code/server/DataBase/PongDB.db-shm create mode 100644 code/server/DataBase/PongDB.db-wal diff --git a/code/server/DataBase/Context/PongDbContext.cs b/code/server/DataBase/Context/PongDbContext.cs index 7bc4621..05acef9 100644 --- a/code/server/DataBase/Context/PongDbContext.cs +++ b/code/server/DataBase/Context/PongDbContext.cs @@ -1,5 +1,7 @@ using DataBase.Entity; using Microsoft.EntityFrameworkCore; +using System.Diagnostics; +using System.Reflection; namespace DataBase.Context { @@ -19,7 +21,8 @@ namespace DataBase.Context if (!optionsBuilder.IsConfigured) { - optionsBuilder.UseSqlite("Data Source=../DataBase/PongDB.db"); + string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "..\\..\\..\\..\\DataBase\\PongDB.db"); + optionsBuilder.UseSqlite($"Data Source={path}"); } } } 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 Date: Thu, 16 Mar 2023 10:45:28 +0100 Subject: [PATCH 17/22] =?UTF-8?q?:hammer:=20Dependences=20ajout=C3=A9es=20?= =?UTF-8?q?server.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/server/Server/Program.cs | 1 + code/server/Server/Server.csproj | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/code/server/Server/Program.cs b/code/server/Server/Program.cs index ccd8ca2..e53bd7c 100644 --- a/code/server/Server/Program.cs +++ b/code/server/Server/Program.cs @@ -4,6 +4,7 @@ using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; +using DataBase.Entity; class Program { diff --git a/code/server/Server/Server.csproj b/code/server/Server/Server.csproj index 40c60dd..7fa6b30 100644 --- a/code/server/Server/Server.csproj +++ b/code/server/Server/Server.csproj @@ -7,4 +7,8 @@ enable + + + + -- 2.36.3 From 5fa74f028739975a9cf65b37f2fee73e860fecc9 Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Thu, 16 Mar 2023 10:49:43 +0100 Subject: [PATCH 18/22] :hammer: ajout tables PongDbContext --- code/server/ApiLeapHit/Controllers/GamesController.cs | 1 + code/server/DataBase/Context/PongDbContext.cs | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/code/server/ApiLeapHit/Controllers/GamesController.cs b/code/server/ApiLeapHit/Controllers/GamesController.cs index 1729120..76f8ddc 100644 --- a/code/server/ApiLeapHit/Controllers/GamesController.cs +++ b/code/server/ApiLeapHit/Controllers/GamesController.cs @@ -102,6 +102,7 @@ namespace ApiLeapHit.Controllers var games = await _dataManager.GetGameById(id); if (games == null || games.Count == 0) + { var message = $"Aucune game trouvĂ©e pour le joueur avec l'id {id}."; _logger.LogInformation(message); diff --git a/code/server/DataBase/Context/PongDbContext.cs b/code/server/DataBase/Context/PongDbContext.cs index 05acef9..8b270cb 100644 --- a/code/server/DataBase/Context/PongDbContext.cs +++ b/code/server/DataBase/Context/PongDbContext.cs @@ -25,5 +25,13 @@ namespace DataBase.Context optionsBuilder.UseSqlite($"Data Source={path}"); } } + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("Players"); + modelBuilder.Entity().ToTable("Games"); + modelBuilder.Entity().ToTable("Messages"); + modelBuilder.Entity().ToTable("Chats"); + + } } } -- 2.36.3 From 00a865780f717594d99996d5032740b320098c7e Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Thu, 16 Mar 2023 11:39:40 +0100 Subject: [PATCH 19/22] :hammer: modif tu context database --- code/server/DataBase/Context/PongDbContext.cs | 1 + ...> 20230316103854_mymigrations.Designer.cs} | 66 ++---------------- ...ions.cs => 20230316103854_mymigrations.cs} | 30 -------- ...pshot.cs => PongDbContextModelSnapshot.cs} | 66 ++---------------- code/server/DataBase/PongDB.db | Bin 61440 -> 61440 bytes code/server/DataBase/PongDB.db-shm | Bin 32768 -> 0 bytes code/server/DataBase/PongDB.db-wal | 0 7 files changed, 13 insertions(+), 150 deletions(-) rename code/server/DataBase/Migrations/{20230316092529_mymigrations.Designer.cs => 20230316103854_mymigrations.Designer.cs} (71%) rename code/server/DataBase/Migrations/{20230316092529_mymigrations.cs => 20230316103854_mymigrations.cs} (82%) rename code/server/DataBase/Migrations/{PongDbContextWithStubModelSnapshot.cs => PongDbContextModelSnapshot.cs} (71%) delete mode 100644 code/server/DataBase/PongDB.db-shm delete mode 100644 code/server/DataBase/PongDB.db-wal diff --git a/code/server/DataBase/Context/PongDbContext.cs b/code/server/DataBase/Context/PongDbContext.cs index 8b270cb..bb31aef 100644 --- a/code/server/DataBase/Context/PongDbContext.cs +++ b/code/server/DataBase/Context/PongDbContext.cs @@ -21,6 +21,7 @@ namespace DataBase.Context if (!optionsBuilder.IsConfigured) { + //optionsBuilder.UseNpgsql(@"host=localhost;database=postgres;user id=postgres;password=1234;"); string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "..\\..\\..\\..\\DataBase\\PongDB.db"); optionsBuilder.UseSqlite($"Data Source={path}"); } diff --git a/code/server/DataBase/Migrations/20230316092529_mymigrations.Designer.cs b/code/server/DataBase/Migrations/20230316103854_mymigrations.Designer.cs similarity index 71% rename from code/server/DataBase/Migrations/20230316092529_mymigrations.Designer.cs rename to code/server/DataBase/Migrations/20230316103854_mymigrations.Designer.cs index 081b26f..a4dc3b0 100644 --- a/code/server/DataBase/Migrations/20230316092529_mymigrations.Designer.cs +++ b/code/server/DataBase/Migrations/20230316103854_mymigrations.Designer.cs @@ -10,8 +10,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace DataBase.Migrations { - [DbContext(typeof(PongDbContextWithStub))] - [Migration("20230316092529_mymigrations")] + [DbContext(typeof(PongDbContext))] + [Migration("20230316103854_mymigrations")] partial class mymigrations { /// @@ -40,15 +40,7 @@ namespace DataBase.Migrations b.HasIndex("player2"); - b.ToTable("Chats"); - - b.HasData( - new - { - chatId = 1, - player1 = "test", - player2 = "test2" - }); + b.ToTable("Chats", (string)null); }); modelBuilder.Entity("DataBase.Entity.Game", b => @@ -83,19 +75,7 @@ namespace DataBase.Migrations b.HasIndex("winner"); - b.ToTable("Games"); - - b.HasData( - new - { - gameId = 1, - durationGame = 65, - loser = "test2", - nbMaxEchanges = 5, - scoreLoser = 2, - scoreWinner = 6, - winner = "test" - }); + b.ToTable("Games", (string)null); }); modelBuilder.Entity("DataBase.Entity.Message", b => @@ -124,25 +104,7 @@ namespace DataBase.Migrations b.HasIndex("player"); - b.ToTable("Messages"); - - b.HasData( - new - { - messageId = 1, - chat = 1, - message = "Salut mon gars !", - player = "test", - timestamp = new DateTime(2023, 2, 16, 17, 5, 12, 0, DateTimeKind.Unspecified) - }, - new - { - messageId = 2, - chat = 1, - message = "Comment tu vas ?", - player = "test2", - timestamp = new DateTime(2023, 2, 16, 17, 12, 35, 0, DateTimeKind.Unspecified) - }); + b.ToTable("Messages", (string)null); }); modelBuilder.Entity("DataBase.Entity.Player", b => @@ -162,23 +124,7 @@ namespace DataBase.Migrations b.HasKey("playerId"); - b.ToTable("Players"); - - b.HasData( - new - { - playerId = "test", - name = "Rami", - nbBallTouchTotal = 20, - timePlayed = 120 - }, - new - { - playerId = "test2", - name = "Hugo", - nbBallTouchTotal = 90, - timePlayed = 250 - }); + b.ToTable("Players", (string)null); }); modelBuilder.Entity("DataBase.Entity.Chat", b => diff --git a/code/server/DataBase/Migrations/20230316092529_mymigrations.cs b/code/server/DataBase/Migrations/20230316103854_mymigrations.cs similarity index 82% rename from code/server/DataBase/Migrations/20230316092529_mymigrations.cs rename to code/server/DataBase/Migrations/20230316103854_mymigrations.cs index 698e944..a06f971 100644 --- a/code/server/DataBase/Migrations/20230316092529_mymigrations.cs +++ b/code/server/DataBase/Migrations/20230316103854_mymigrations.cs @@ -3,8 +3,6 @@ using Microsoft.EntityFrameworkCore.Migrations; #nullable disable -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - namespace DataBase.Migrations { /// @@ -111,34 +109,6 @@ namespace DataBase.Migrations onDelete: ReferentialAction.Cascade); }); - migrationBuilder.InsertData( - table: "Players", - columns: new[] { "playerId", "name", "nbBallTouchTotal", "timePlayed" }, - values: new object[,] - { - { "test", "Rami", 20, 120 }, - { "test2", "Hugo", 90, 250 } - }); - - migrationBuilder.InsertData( - table: "Chats", - columns: new[] { "chatId", "player1", "player2" }, - values: new object[] { 1, "test", "test2" }); - - migrationBuilder.InsertData( - table: "Games", - columns: new[] { "gameId", "durationGame", "loser", "nbMaxEchanges", "scoreLoser", "scoreWinner", "winner" }, - values: new object[] { 1, 65, "test2", 5, 2, 6, "test" }); - - migrationBuilder.InsertData( - table: "Messages", - columns: new[] { "messageId", "chat", "message", "player", "timestamp" }, - values: new object[,] - { - { 1, 1, "Salut mon gars !", "test", new DateTime(2023, 2, 16, 17, 5, 12, 0, DateTimeKind.Unspecified) }, - { 2, 1, "Comment tu vas ?", "test2", new DateTime(2023, 2, 16, 17, 12, 35, 0, DateTimeKind.Unspecified) } - }); - migrationBuilder.CreateIndex( name: "IX_Chats_player1", table: "Chats", diff --git a/code/server/DataBase/Migrations/PongDbContextWithStubModelSnapshot.cs b/code/server/DataBase/Migrations/PongDbContextModelSnapshot.cs similarity index 71% rename from code/server/DataBase/Migrations/PongDbContextWithStubModelSnapshot.cs rename to code/server/DataBase/Migrations/PongDbContextModelSnapshot.cs index 7d94251..fa76d60 100644 --- a/code/server/DataBase/Migrations/PongDbContextWithStubModelSnapshot.cs +++ b/code/server/DataBase/Migrations/PongDbContextModelSnapshot.cs @@ -9,8 +9,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace DataBase.Migrations { - [DbContext(typeof(PongDbContextWithStub))] - partial class PongDbContextWithStubModelSnapshot : ModelSnapshot + [DbContext(typeof(PongDbContext))] + partial class PongDbContextModelSnapshot : ModelSnapshot { protected override void BuildModel(ModelBuilder modelBuilder) { @@ -37,15 +37,7 @@ namespace DataBase.Migrations b.HasIndex("player2"); - b.ToTable("Chats"); - - b.HasData( - new - { - chatId = 1, - player1 = "test", - player2 = "test2" - }); + b.ToTable("Chats", (string)null); }); modelBuilder.Entity("DataBase.Entity.Game", b => @@ -80,19 +72,7 @@ namespace DataBase.Migrations b.HasIndex("winner"); - b.ToTable("Games"); - - b.HasData( - new - { - gameId = 1, - durationGame = 65, - loser = "test2", - nbMaxEchanges = 5, - scoreLoser = 2, - scoreWinner = 6, - winner = "test" - }); + b.ToTable("Games", (string)null); }); modelBuilder.Entity("DataBase.Entity.Message", b => @@ -121,25 +101,7 @@ namespace DataBase.Migrations b.HasIndex("player"); - b.ToTable("Messages"); - - b.HasData( - new - { - messageId = 1, - chat = 1, - message = "Salut mon gars !", - player = "test", - timestamp = new DateTime(2023, 2, 16, 17, 5, 12, 0, DateTimeKind.Unspecified) - }, - new - { - messageId = 2, - chat = 1, - message = "Comment tu vas ?", - player = "test2", - timestamp = new DateTime(2023, 2, 16, 17, 12, 35, 0, DateTimeKind.Unspecified) - }); + b.ToTable("Messages", (string)null); }); modelBuilder.Entity("DataBase.Entity.Player", b => @@ -159,23 +121,7 @@ namespace DataBase.Migrations b.HasKey("playerId"); - b.ToTable("Players"); - - b.HasData( - new - { - playerId = "test", - name = "Rami", - nbBallTouchTotal = 20, - timePlayed = 120 - }, - new - { - playerId = "test2", - name = "Hugo", - nbBallTouchTotal = 90, - timePlayed = 250 - }); + b.ToTable("Players", (string)null); }); modelBuilder.Entity("DataBase.Entity.Chat", b => diff --git a/code/server/DataBase/PongDB.db b/code/server/DataBase/PongDB.db index 76ba767102f09f04d92ba2c694e00e8100591a41..5a1539a60946b09c505102517c37d48b2c1ff142 100644 GIT binary patch delta 220 zcmZp8z})bFdBY2NHbVnr3saNL@8tjUOG4Q3xs|z@=|zbpnfZCeybM4fuvu`zbN-17 SgxR=IxoEN^anX#T9v1*1t~-bT delta 529 zcmaixze>YU6vpqlx2=g-j;Xz5u{7dpBu%N(E+P)Pxaj608A1%02AWiK>r40meFGsc zqI;>uMT;8gVv7iRlVVXixE;>-o!|M_8L-ZP-8_|ZM%}EL^(ZcXVR;&#dRLz7w5-te zn?arsLa|5i4SSKI-J+q;tjd9gb`Y8eZO1<$9|&2_0g}{_<+;Vn#k49WIKenlj0aqm znVRY*U0_^JoCz6lL~tY=k66k>hHy1eQgk9S>=S&)7wo64H Date: Thu, 16 Mar 2023 11:41:44 +0100 Subject: [PATCH 20/22] :hammer: test --- code/server/DataBase/Context/PongDbContext.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/code/server/DataBase/Context/PongDbContext.cs b/code/server/DataBase/Context/PongDbContext.cs index bb31aef..468cff4 100644 --- a/code/server/DataBase/Context/PongDbContext.cs +++ b/code/server/DataBase/Context/PongDbContext.cs @@ -24,6 +24,7 @@ namespace DataBase.Context //optionsBuilder.UseNpgsql(@"host=localhost;database=postgres;user id=postgres;password=1234;"); string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "..\\..\\..\\..\\DataBase\\PongDB.db"); optionsBuilder.UseSqlite($"Data Source={path}"); + } } protected override void OnModelCreating(ModelBuilder modelBuilder) -- 2.36.3 From 4e8ef79a33227272e0f7cd664741c689f8c13f90 Mon Sep 17 00:00:00 2001 From: Bruno DA COSTA CUNHA Date: Fri, 17 Mar 2023 11:23:22 +0100 Subject: [PATCH 21/22] Atualizar 'code/server/Server/Program.cs' --- code/server/Server/Program.cs | 85 +++++++++-------------------------- 1 file changed, 20 insertions(+), 65 deletions(-) diff --git a/code/server/Server/Program.cs b/code/server/Server/Program.cs index e53bd7c..5af62b4 100644 --- a/code/server/Server/Program.cs +++ b/code/server/Server/Program.cs @@ -1,66 +1,21 @@ -using System; -using System.Collections.Generic; -using System.Net; -using System.Net.Sockets; -using System.Text; -using System.Threading; -using DataBase.Entity; - -class Program -{ - static Dictionary clients = new Dictionary(); - static int nextPort = 3132; - - static void Main(string[] args) - { - Console.WriteLine("Welcome to LeapHit Multiplayer - Server"); - StartServer(); - } - - static void StartServer() - { - IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Any, 3131); - UdpClient serverSocket = new UdpClient(serverEndPoint); - Console.WriteLine("Server started, waiting for clients to connect..."); - - while (true) - { - IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); - byte[] receivedData = serverSocket.Receive(ref remoteEndPoint); - string message = Encoding.ASCII.GetString(receivedData); - - if (message == "Connect") - { - Console.WriteLine("New connection from " + remoteEndPoint.ToString()); - - // Assign a unique port to the client - IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, nextPort++); ; - UdpClient clientSocket = new UdpClient(clientEndPoint); - clients[remoteEndPoint] = clientSocket; - - // Send connection message to client - string connectionMessage = clientEndPoint.Port.ToString(); - byte[] connectionData = Encoding.ASCII.GetBytes(connectionMessage); - serverSocket.Send(connectionData, connectionData.Length, remoteEndPoint); - - // Start thread to receive data from client - Thread receiveThread = new Thread(()=>ReceiveMessages(clientSocket)); - receiveThread.Start(); - - } - } - } - - static void ReceiveMessages(UdpClient clientSocket) - { - IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); - - while (true) - { - byte[] receivedData = clientSocket.Receive(ref remoteEndPoint); - string receivedMessage = Encoding.ASCII.GetString(receivedData); - Console.WriteLine("Received from " + remoteEndPoint.ToString() + ": " + receivedMessage); - - } - } +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using DataBase.Entity; +using Shared.DTO; +using System.Text.Json; +using Server; + +class Program +{ + static void Main(string[] args) + { + PongServer server = new PongServer(); + Console.WriteLine("Welcome to LeapHit Multiplayer - Server"); + server.StartServer(); + } + } \ No newline at end of file -- 2.36.3 From ad24c90aad19514f0bb97a6cdce8296a631efddf Mon Sep 17 00:00:00 2001 From: Bruno DA COSTA CUNHA Date: Fri, 17 Mar 2023 11:24:29 +0100 Subject: [PATCH 22/22] Atualizar 'code/server/Server/Server.csproj' --- code/server/Server/Server.csproj | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/code/server/Server/Server.csproj b/code/server/Server/Server.csproj index 7fa6b30..4744ab2 100644 --- a/code/server/Server/Server.csproj +++ b/code/server/Server/Server.csproj @@ -1,14 +1,15 @@ - - - - Exe - net6.0 - enable - enable - - - - - - - + + + + Exe + net6.0 + enable + enable + + + + + + + + \ No newline at end of file -- 2.36.3