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); + //} + } +}