diff --git a/.drone.yml b/.drone.yml index 22945b3..66f43b6 100644 --- a/.drone.yml +++ b/.drone.yml @@ -10,8 +10,8 @@ steps: - name: build-docker-image image: plugins/docker settings: - dockerfile: code/Dockerfile - context: code/ + dockerfile: code/server/Dockerfile + context: code/server registry: hub.codefirst.iut.uca.fr repo: hub.codefirst.iut.uca.fr/leap-hit-team/leap-hit-server username: 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..6d0a5e7 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(string 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(string idPlayer1, string 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..76f8ddc 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,57 +51,58 @@ 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}")] - public async Task>> GetGameByIdPlayer(int 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(string id) { try { 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); @@ -144,12 +145,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 48125af..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 f6f16c2..0000000 --- a/code/server/ApiLeapHit/Controllers/PlayerController.cs +++ /dev/null @@ -1,216 +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); - - // Ajout des liens HATEOAS - 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 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..a835e97 --- /dev/null +++ b/code/server/ApiLeapHit/Controllers/PlayersController.cs @@ -0,0 +1,172 @@ +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; + } + + [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 + { + // 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/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; } 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 76b0e76..b778769 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) @@ -21,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/PongDbContext.cs b/code/server/DataBase/Context/PongDbContext.cs index 5829fd8..468cff4 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,8 +21,19 @@ namespace DataBase.Context if (!optionsBuilder.IsConfigured) { - optionsBuilder.UseSqlite($"Data Source=C:\\Users\\noanr\\source\\repos\\leap-hit-server\\code\\server\\DataBase\\PongDB.db"); + //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) + { + modelBuilder.Entity().ToTable("Players"); + modelBuilder.Entity().ToTable("Games"); + modelBuilder.Entity().ToTable("Messages"); + modelBuilder.Entity().ToTable("Chats"); + + } } } 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/DataBase/Migrations/20230228121953_Migrations.Designer.cs b/code/server/DataBase/Migrations/20230316103854_mymigrations.Designer.cs similarity index 63% rename from code/server/DataBase/Migrations/20230228121953_Migrations.Designer.cs rename to code/server/DataBase/Migrations/20230316103854_mymigrations.Designer.cs index a256488..a4dc3b0 100644 --- a/code/server/DataBase/Migrations/20230228121953_Migrations.Designer.cs +++ b/code/server/DataBase/Migrations/20230316103854_mymigrations.Designer.cs @@ -10,9 +10,9 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace DataBase.Migrations { - [DbContext(typeof(PongDbContextWithStub))] - [Migration("20230228121953_Migrations")] - partial class Migrations + [DbContext(typeof(PongDbContext))] + [Migration("20230316103854_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"); @@ -38,15 +40,7 @@ namespace DataBase.Migrations b.HasIndex("player2"); - b.ToTable("Chats"); - - b.HasData( - new - { - chatId = 1, - player1 = 1, - player2 = 2 - }); + b.ToTable("Chats", (string)null); }); modelBuilder.Entity("DataBase.Entity.Game", b => @@ -58,8 +52,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 +65,9 @@ namespace DataBase.Migrations b.Property("scoreWinner") .HasColumnType("INTEGER"); - b.Property("winner") - .HasColumnType("INTEGER"); + b.Property("winner") + .IsRequired() + .HasColumnType("TEXT"); b.HasKey("gameId"); @@ -79,19 +75,7 @@ namespace DataBase.Migrations b.HasIndex("winner"); - b.ToTable("Games"); - - b.HasData( - new - { - gameId = 1, - durationGame = 65, - loser = 2, - nbMaxEchanges = 5, - scoreLoser = 2, - scoreWinner = 6, - winner = 1 - }); + b.ToTable("Games", (string)null); }); modelBuilder.Entity("DataBase.Entity.Message", b => @@ -107,8 +91,9 @@ namespace DataBase.Migrations .IsRequired() .HasColumnType("TEXT"); - b.Property("player") - .HasColumnType("INTEGER"); + b.Property("player") + .IsRequired() + .HasColumnType("TEXT"); b.Property("timestamp") .HasColumnType("TEXT"); @@ -119,32 +104,13 @@ namespace DataBase.Migrations b.HasIndex("player"); - b.ToTable("Messages"); - - b.HasData( - new - { - messageId = 1, - chat = 1, - message = "Salut mon gars !", - player = 1, - timestamp = new DateTime(2023, 2, 16, 17, 5, 12, 0, DateTimeKind.Unspecified) - }, - new - { - messageId = 2, - chat = 1, - message = "Comment tu vas ?", - player = 2, - timestamp = new DateTime(2023, 2, 16, 17, 12, 35, 0, DateTimeKind.Unspecified) - }); + b.ToTable("Messages", (string)null); }); modelBuilder.Entity("DataBase.Entity.Player", b => { - b.Property("playerId") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); + b.Property("playerId") + .HasColumnType("TEXT"); b.Property("name") .IsRequired() @@ -158,23 +124,7 @@ namespace DataBase.Migrations b.HasKey("playerId"); - b.ToTable("Players"); - - b.HasData( - new - { - playerId = 1, - name = "Rami", - nbBallTouchTotal = 20, - timePlayed = 120 - }, - new - { - playerId = 2, - name = "Hugo", - nbBallTouchTotal = 90, - timePlayed = 250 - }); + b.ToTable("Players", (string)null); }); modelBuilder.Entity("DataBase.Entity.Chat", b => diff --git a/code/server/DataBase/Migrations/20230228121953_Migrations.cs b/code/server/DataBase/Migrations/20230316103854_mymigrations.cs similarity index 76% rename from code/server/DataBase/Migrations/20230228121953_Migrations.cs rename to code/server/DataBase/Migrations/20230316103854_mymigrations.cs index cf2b11d..a06f971 100644 --- a/code/server/DataBase/Migrations/20230228121953_Migrations.cs +++ b/code/server/DataBase/Migrations/20230316103854_mymigrations.cs @@ -3,12 +3,10 @@ using Microsoft.EntityFrameworkCore.Migrations; #nullable disable -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - namespace DataBase.Migrations { /// - public partial class Migrations : Migration + public partial class mymigrations : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) @@ -17,8 +15,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 +31,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 +59,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 +89,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 => @@ -112,34 +109,6 @@ namespace DataBase.Migrations onDelete: ReferentialAction.Cascade); }); - migrationBuilder.InsertData( - table: "Players", - columns: new[] { "playerId", "name", "nbBallTouchTotal", "timePlayed" }, - values: new object[,] - { - { 1, "Rami", 20, 120 }, - { 2, "Hugo", 90, 250 } - }); - - migrationBuilder.InsertData( - table: "Chats", - columns: new[] { "chatId", "player1", "player2" }, - values: new object[] { 1, 1, 2 }); - - migrationBuilder.InsertData( - table: "Games", - columns: new[] { "gameId", "durationGame", "loser", "nbMaxEchanges", "scoreLoser", "scoreWinner", "winner" }, - values: new object[] { 1, 65, 2, 5, 2, 6, 1 }); - - 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) } - }); - 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 63% rename from code/server/DataBase/Migrations/PongDbContextWithStubModelSnapshot.cs rename to code/server/DataBase/Migrations/PongDbContextModelSnapshot.cs index e144450..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) { @@ -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"); @@ -35,15 +37,7 @@ namespace DataBase.Migrations b.HasIndex("player2"); - b.ToTable("Chats"); - - b.HasData( - new - { - chatId = 1, - player1 = 1, - player2 = 2 - }); + b.ToTable("Chats", (string)null); }); modelBuilder.Entity("DataBase.Entity.Game", b => @@ -55,8 +49,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 +62,9 @@ namespace DataBase.Migrations b.Property("scoreWinner") .HasColumnType("INTEGER"); - b.Property("winner") - .HasColumnType("INTEGER"); + b.Property("winner") + .IsRequired() + .HasColumnType("TEXT"); b.HasKey("gameId"); @@ -76,19 +72,7 @@ namespace DataBase.Migrations b.HasIndex("winner"); - b.ToTable("Games"); - - b.HasData( - new - { - gameId = 1, - durationGame = 65, - loser = 2, - nbMaxEchanges = 5, - scoreLoser = 2, - scoreWinner = 6, - winner = 1 - }); + b.ToTable("Games", (string)null); }); modelBuilder.Entity("DataBase.Entity.Message", b => @@ -104,8 +88,9 @@ namespace DataBase.Migrations .IsRequired() .HasColumnType("TEXT"); - b.Property("player") - .HasColumnType("INTEGER"); + b.Property("player") + .IsRequired() + .HasColumnType("TEXT"); b.Property("timestamp") .HasColumnType("TEXT"); @@ -116,32 +101,13 @@ namespace DataBase.Migrations b.HasIndex("player"); - b.ToTable("Messages"); - - b.HasData( - new - { - messageId = 1, - chat = 1, - message = "Salut mon gars !", - player = 1, - timestamp = new DateTime(2023, 2, 16, 17, 5, 12, 0, DateTimeKind.Unspecified) - }, - new - { - messageId = 2, - chat = 1, - message = "Comment tu vas ?", - player = 2, - timestamp = new DateTime(2023, 2, 16, 17, 12, 35, 0, DateTimeKind.Unspecified) - }); + b.ToTable("Messages", (string)null); }); modelBuilder.Entity("DataBase.Entity.Player", b => { - b.Property("playerId") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); + b.Property("playerId") + .HasColumnType("TEXT"); b.Property("name") .IsRequired() @@ -155,23 +121,7 @@ namespace DataBase.Migrations b.HasKey("playerId"); - b.ToTable("Players"); - - b.HasData( - new - { - playerId = 1, - name = "Rami", - nbBallTouchTotal = 20, - timePlayed = 120 - }, - new - { - playerId = 2, - 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 5f094b9..5a1539a 100644 Binary files a/code/server/DataBase/PongDB.db and b/code/server/DataBase/PongDB.db differ 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 diff --git a/code/server/Server/Program.cs b/code/server/Server/Program.cs index 69a37c3..5af62b4 100644 --- a/code/server/Server/Program.cs +++ b/code/server/Server/Program.cs @@ -1,21 +1,21 @@ -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(); - } - +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 diff --git a/code/server/Server/Server.csproj b/code/server/Server/Server.csproj index 82d9bf8..cd65276 100644 --- a/code/server/Server/Server.csproj +++ b/code/server/Server/Server.csproj @@ -1,15 +1,15 @@ - - - - Exe - net6.0 - enable - enable - - - - - - - + + + + Exe + net6.0 + enable + enable + + + + + + + \ No newline at end of file diff --git a/code/server/TestControleurs/TestControleurs.csproj b/code/server/TestControleurs/TestControleurs.csproj index f0f4adc..a44cde7 100644 --- a/code/server/TestControleurs/TestControleurs.csproj +++ b/code/server/TestControleurs/TestControleurs.csproj @@ -9,6 +9,7 @@ + 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 d024571..846cde2 100644 --- a/code/server/TestControleurs/UnitTestGames.cs +++ b/code/server/TestControleurs/UnitTestGames.cs @@ -7,7 +7,9 @@ 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; using System.Text.Json; using System.Threading.Tasks; @@ -17,30 +19,140 @@ namespace TestControleurs [TestClass] public class UnitTestGames { + private DbDataManager _dataManager = new DbDataManager(); + private readonly ILogger _logger = new NullLogger(); + [TestMethod] - public async Task TestGetPlayer_ValidId() + public async Task GetGame_ReturnsOkResult() { // Arrange - int id = 8; - DbDataManager dataManager = new DbDataManager(); - ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()); - var player = new Player { playerId = id, name = "Test Player", nbBallTouchTotal = 0, timePlayed = 3 }; - var controller = new PlayerController(dataManager, loggerFactory.CreateLogger()); + 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; - var rep = await controller.AddPlayer(player.ToDto()); + // 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.GetPlayer(id); + 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 RemoveGame_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.RemoveGame(nb.Result + 1); + var objectResult = (ObjectResult)result; + + // 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.GetGameByIdPlayer(nbP.Result); var objectResult = (ObjectResult)result.Result; - var apiResponse = (ApiResponse)objectResult.Value; // 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); + //} + } +}