diff --git a/code/server/ApiLeapHit/ApiLeapHit.csproj b/code/server/ApiLeapHit/ApiLeapHit.csproj index f5db561..56b0e8b 100644 --- a/code/server/ApiLeapHit/ApiLeapHit.csproj +++ b/code/server/ApiLeapHit/ApiLeapHit.csproj @@ -1,4 +1,4 @@ - + net6.0 @@ -7,7 +7,9 @@ + + diff --git a/code/server/ApiLeapHit/Controllers/ChatController.cs b/code/server/ApiLeapHit/Controllers/ChatController.cs index 0856c37..d04390f 100644 --- a/code/server/ApiLeapHit/Controllers/ChatController.cs +++ b/code/server/ApiLeapHit/Controllers/ChatController.cs @@ -36,6 +36,34 @@ namespace ApiLeapHit.Controllers return Ok(); } + [HttpGet] + public async Task>> GetChats() + { + var chats = await _dataManager.GetChats(); + if (chats == null) + { + return NotFound(); + } + + var dtoChats = new List(); + foreach (var chat in chats) + { + var player1 = await _dataManager.GetPlayer(chat.player1); + var player2 = await _dataManager.GetPlayer(chat.player2); + + var dtoChat = new DTOChat + { + chatId = chat.chatId, + PlayerId1 = new DTOPlayer { playerId = player1.playerId, name = player1.name }, + PlayerId2 = new DTOPlayer { playerId = player2.playerId, name = player2.name } + }; + + dtoChats.Add(dtoChat); + } + + return Ok(dtoChats); + } + [HttpDelete("{id}")] public async Task RemoveChat(int id) { diff --git a/code/server/ApiLeapHit/Controllers/GameController.cs b/code/server/ApiLeapHit/Controllers/GameController.cs index 1796034..ca580b8 100644 --- a/code/server/ApiLeapHit/Controllers/GameController.cs +++ b/code/server/ApiLeapHit/Controllers/GameController.cs @@ -1,10 +1,13 @@ -using DataBase.DataManager; +using ApiLeapHit.Mapper; +using DataBase.DataManager; using DataBase.Entity; using DTO; +using DTO.Factory; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.Diagnostics; using System.Net; +using System.Text; namespace ApiLeapHit.Controllers { @@ -14,69 +17,181 @@ namespace ApiLeapHit.Controllers { private readonly DbDataManager _dataManager; + private readonly ILogger _logger; - public GameController(DbDataManager dataManager) + public GameController(DbDataManager dataManager, ILogger logger) { _dataManager = dataManager; + _logger = logger; } [HttpGet("{id}")] public async Task> GetGame(int id) { - var game = await _dataManager.GetGame(id); - if (game == null) + try { - return NotFound(); + var game = await _dataManager.GetGame(id); + if (game == null) + { + return NotFound(new ApiResponse("La game avec l'identifiant " + id + " n'existe pas.")); + } + var winner = await _dataManager.GetPlayer(game.winner); + //if (winner == null) + //{ + // return NotFound("Le joueur avec l'identifiant " + game.winner + " n'existe pas."); + //} + + var loser = await _dataManager.GetPlayer(game.loser); + //if (loser == null) + //{ + // return NotFound("Le joueur avec l'identifiant " + game.loser + " n'existe pas."); + //} + + return Ok(new ApiResponse("Récupération de la game réussie.", game.ToDto(winner, loser))); + } + catch (Exception ex) + { + return StatusCode(500, new ApiResponse("Une erreur est survenue lors de la récupération des données : " + ex.Message)); } + } - var winner = await _dataManager.GetPlayer(game.winner); - var loser = await _dataManager.GetPlayer(game.loser); + [HttpGet] + public async Task>> GetGames() + { + try + { + var games = await _dataManager.GetGames(); + if (games == null) + { + return NotFound(new ApiResponse>("Aucune game n'ont été trouvées.")); + } + //StringBuilder errorMessage = new StringBuilder(); + var dtoGames = new List(); + foreach (var game in games) + { + var winner = await _dataManager.GetPlayer(game.winner); + var loser = await _dataManager.GetPlayer(game.loser); - var dtoGame = new DTOGame + //if (winner == null || loser == null) + //{ + // errorMessage.Append("Le joueur gagnant ou le joueur perdant n'existe pas pour le jeu avec l'identifiant "); + // errorMessage.Append(game.gameId); + // errorMessage.Append("."); + // break; + //} + dtoGames.Add(game.ToDto(winner, loser)); + } + + //if (errorMessage.Length > 0) + //{ + // return NotFound(errorMessage.ToString()); + //} + return Ok(new ApiResponse>("La récupération des games à réussit." , dtoGames)); + } + catch (Exception ex) { - gameId = game.gameId, - durationGame = game.durationGame, - nbMaxEchanges = game.nbMaxEchanges, - playerWinner = new DTOPlayer { playerId = winner.playerId, name = winner.name, nbBallTouchTotal = winner.nbBallTouchTotal, timePlayed = winner.timePlayed }, - playerLoser = new DTOPlayer + return StatusCode(500, new ApiResponse("Une erreur est survenue lors de la récupération des données : " + ex.Message)); + } + } + + [HttpGet("byPlayer/{id}")] + public async Task>> GetGameByIdPlayer(int id) + { + try { + var games = await _dataManager.GetGameById(id); + if (games == null || games.Count == 0) { - playerId = loser.playerId, - name = loser.name, - nbBallTouchTotal = loser.nbBallTouchTotal, - timePlayed = loser.timePlayed + return NotFound(new ApiResponse>("Aucune game trouvé pour le joueur avec l'id : " + id)); } - }; - return Ok(dtoGame); + //StringBuilder errorMessage = new StringBuilder(); + var dtoGames = new List(); + foreach (var game in games) + { + var winner = await _dataManager.GetPlayer(game.winner); + var loser = await _dataManager.GetPlayer(game.loser); + + + //if (winner == null) + //{ + // errorMessage.Append("Le joueur gagnant n'existe pas pour le jeu avec l'identifiant "); + // errorMessage.Append(game.gameId); + // errorMessage.Append("."); + // break; + //} + + //if (loser == null) + //{ + // errorMessage.Append("Le joueur perdant n'existe pas pour le jeu avec l'identifiant "); + // errorMessage.Append(game.gameId); + // errorMessage.Append("."); + // break; + //} + + dtoGames.Add(game.ToDto(winner, loser)); + } + + //if (errorMessage.Length > 0) + //{ + // return NotFound(errorMessage.ToString()); + //} + return Ok(new ApiResponse>("Récupérations réussis des games pour le joueur " + id, dtoGames)); + } + catch (Exception ex) + { + return StatusCode(500, new ApiResponse("Une erreur est survenue lors de la récupération des données : " + ex.Message)); + } } [HttpPost] - public async Task AddGame([FromBody] DTOGame dtoGame) + public async Task AddGame([FromBody] DTOGameWithIdPlayer dtoGame) { - var winner = await _dataManager.GetPlayer(dtoGame.playerWinner.playerId); - var loser = await _dataManager.GetPlayer(dtoGame.playerLoser.playerId); + try { + var winner = await _dataManager.GetPlayer(dtoGame.playerWinner); + var loser = await _dataManager.GetPlayer(dtoGame.playerLoser); + + //StringBuilder errorMessage = new StringBuilder(); + + //if (winner == null) + //{ + // errorMessage.Append("Le joueur gagnant avec l'identifiant "); + // errorMessage.Append(dtoGame.playerWinner.playerId); + // errorMessage.Append(" n'existe pas."); + // return NotFound(errorMessage.ToString()); + //} - var game = new Game + //if (loser == null) + //{ + // errorMessage.Append("Le joueur perdant avec l'identifiant "); + // errorMessage.Append(dtoGame.playerLoser.playerId); + // errorMessage.Append(" n'existe pas."); + // return NotFound(errorMessage.ToString()); + //} + + var game = dtoGame.ToGame(winner, loser); + return Ok(new ApiResponse("La game a été ajoutée avec succès.", game)); + } + catch (Exception ex) { - durationGame = dtoGame.durationGame, - nbMaxEchanges = dtoGame.nbMaxEchanges, - winner = winner.playerId, - loser = loser.playerId - }; - - await _dataManager.AddGame(game); - return Ok(); + return StatusCode(500, new ApiResponse("Une erreur est survenue lors de la récupération des données : " + ex.Message)); + } } - [HttpDelete("{id}")] + [HttpDelete("{id}")] public async Task RemoveGame(int id) { - var result = await _dataManager.RemoveGame(id); - if (result) + try { + var result = await _dataManager.RemoveGame(id); + if (result) + { + return Ok(new ApiResponse( "La game avec l'identifiant " + id + " a été supprimée avec succès.")); + } + return NotFound(new ApiResponse("La game avec l'identifiant " + id + " n'existe pas.")); + } + catch (Exception ex) { - return Ok(result); + return StatusCode(500, new ApiResponse("Une erreur est survenue lors de la récupération des données : " + ex.Message)); } - return NotFound(result); } } } diff --git a/code/server/ApiLeapHit/Mapper/GameMapper.cs b/code/server/ApiLeapHit/Mapper/GameMapper.cs new file mode 100644 index 0000000..fe6f6db --- /dev/null +++ b/code/server/ApiLeapHit/Mapper/GameMapper.cs @@ -0,0 +1,32 @@ +using DataBase.Entity; +using DTO; + +namespace ApiLeapHit.Mapper +{ + public static class GameMapper + { + public static DTOGame ToDto(this Game game, Player winner, Player loser) + { + DTOGame dtoGame = new DTOGame() + { + gameId = game.gameId, + durationGame = game.durationGame, + nbMaxEchanges = game.nbMaxEchanges, + playerWinner = winner.ToDto(), + playerLoser = loser.ToDto() + }; + return dtoGame; + } + + public static Game ToGame(this DTOGame dtoGame, Player winner, Player loser) + { + return new Game + { + durationGame = dtoGame.durationGame, + nbMaxEchanges = dtoGame.nbMaxEchanges, + winner = winner.playerId, + loser = loser.playerId + }; + } + } +} diff --git a/code/server/ApiLeapHit/Mapper/GameWithIdPlayerMapper.cs b/code/server/ApiLeapHit/Mapper/GameWithIdPlayerMapper.cs new file mode 100644 index 0000000..33fa3d2 --- /dev/null +++ b/code/server/ApiLeapHit/Mapper/GameWithIdPlayerMapper.cs @@ -0,0 +1,19 @@ +using DataBase.Entity; +using DTO; + +namespace ApiLeapHit.Mapper +{ + public static class GameWithIdPlayerMapper + { + public static Game ToGame(this DTOGameWithIdPlayer dtoGame, Player winner, Player loser) + { + return new Game + { + durationGame = dtoGame.durationGame, + nbMaxEchanges = dtoGame.nbMaxEchanges, + winner = winner.playerId, + loser = loser.playerId + }; + } + } +} diff --git a/code/server/ApiLeapHit/Mapper/PlayerMapper.cs b/code/server/ApiLeapHit/Mapper/PlayerMapper.cs new file mode 100644 index 0000000..b828e76 --- /dev/null +++ b/code/server/ApiLeapHit/Mapper/PlayerMapper.cs @@ -0,0 +1,20 @@ +using DataBase.Entity; +using DTO; + +namespace ApiLeapHit.Mapper +{ + public static class PlayerMapper + { + public static DTOPlayer ToDto(this Player player) + { + DTOPlayer dtoPlayer = new DTOPlayer() + { + playerId = player.playerId, + name = player.name, + nbBallTouchTotal = player.nbBallTouchTotal, + timePlayed = player.timePlayed + }; + return dtoPlayer; + } + } +} diff --git a/code/server/ApiLeapHit/Program.cs b/code/server/ApiLeapHit/Program.cs index 672700e..8df64de 100644 --- a/code/server/ApiLeapHit/Program.cs +++ b/code/server/ApiLeapHit/Program.cs @@ -1,15 +1,19 @@ using DataBase.DataManager; +using Microsoft.Extensions.Logging; var builder = WebApplication.CreateBuilder(args); // Add services to the container. - builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddScoped(); //builder.Services.AddSingleton(); + +// Add logging +builder.Logging.AddConsole(); + var app = builder.Build(); // Configure the HTTP request pipeline. @@ -25,4 +29,4 @@ app.UseAuthorization(); app.MapControllers(); -app.Run(); +app.Run(); \ No newline at end of file diff --git a/code/server/ApiLeapHit/appsettings.json b/code/server/ApiLeapHit/appsettings.json index 10f68b8..7300b2a 100644 --- a/code/server/ApiLeapHit/appsettings.json +++ b/code/server/ApiLeapHit/appsettings.json @@ -2,7 +2,16 @@ "Logging": { "LogLevel": { "Default": "Information", - "Microsoft.AspNetCore": "Warning" + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + }, + "Console": { + "IncludeScopes": true, + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } } }, "AllowedHosts": "*" diff --git a/code/server/DTO/DTOGameWithIdPlayer.cs b/code/server/DTO/DTOGameWithIdPlayer.cs new file mode 100644 index 0000000..a586a0b --- /dev/null +++ b/code/server/DTO/DTOGameWithIdPlayer.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DTO +{ + public class DTOGameWithIdPlayer + { + public int gameId { get; set; } + public int durationGame { get; set; } + public int nbMaxEchanges { get; set; } + public int playerWinner { get; set; } + public int playerLoser { get; set; } + } +} diff --git a/code/server/DTO/Factory/ApiResponse.cs b/code/server/DTO/Factory/ApiResponse.cs new file mode 100644 index 0000000..e6db510 --- /dev/null +++ b/code/server/DTO/Factory/ApiResponse.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DTO.Factory +{ + public class ApiResponse + { + public string Message { get; set; } + public T Data { get; set; } + + public ApiResponse(string message, T data = default) + { + Message = message; + Data = data; + } + } +} diff --git a/code/server/DataBase/DataManager/DbDataManager.Chat.cs b/code/server/DataBase/DataManager/DbDataManager.Chat.cs index 683019d..bb38ac7 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Chat.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Chat.cs @@ -33,5 +33,16 @@ namespace DataBase.DataManager return false; } } + + public Task> GetChats() + { + using (var context = new PongDbContext()) + { + var chats = context.Chats.ToList(); + return Task.FromResult(chats); + } + } + + } } diff --git a/code/server/DataBase/DataManager/DbDataManager.Game.cs b/code/server/DataBase/DataManager/DbDataManager.Game.cs index 6b41046..0b72229 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Game.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Game.cs @@ -42,5 +42,32 @@ namespace DataBase.DataManager return Task.FromResult(game); } } + + public Task> GetGameById(int id) + { + using (var context = new PongDbContext()) + { + var games = context.Games.Where(g => g.winner == id || g.loser == id).ToList(); + return Task.FromResult(games); + } + } + + public Task> GetGames() + { + using (var context = new PongDbContext()) + { + var games = context.Games.ToList(); + return Task.FromResult(games); + } + } + + public Task GetNbGames() + { + using (var context = new PongDbContext()) + { + var nbgames = context.Games.ToList().Count(); + return Task.FromResult(nbgames); + } + } } } diff --git a/code/server/DataBase/DataManager/DbDataManager.Message.cs b/code/server/DataBase/DataManager/DbDataManager.Message.cs index 60ffad9..b0ba7a7 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Message.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Message.cs @@ -43,5 +43,14 @@ namespace DataBase.DataManager return false; } } + + public Task> GetMessages() + { + using (var context = new PongDbContext()) + { + var messages = context.Messages.ToList(); + return Task.FromResult(messages); + } + } } } diff --git a/code/server/DataBase/PongDB.db b/code/server/DataBase/PongDB.db index 1c57f16..3905c29 100644 Binary files a/code/server/DataBase/PongDB.db and b/code/server/DataBase/PongDB.db differ diff --git a/code/server/DataBase/PongDB.db-shm b/code/server/DataBase/PongDB.db-shm deleted file mode 100644 index d561b7d..0000000 Binary files a/code/server/DataBase/PongDB.db-shm and /dev/null differ diff --git a/code/server/DataBase/PongDB.db-wal b/code/server/DataBase/PongDB.db-wal deleted file mode 100644 index 5fe8801..0000000 Binary files a/code/server/DataBase/PongDB.db-wal and /dev/null differ