From 089b169e3253c3727a612092ccab2023e7878594 Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Fri, 24 Feb 2023 10:41:12 +0100 Subject: [PATCH 01/11] =?UTF-8?q?:hammer:=20R=C3=A9alisation=20du=20contro?= =?UTF-8?q?lleur=20game=20+=20modif=20dbGame?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/server/ApiLeapHit/ApiLeapHit.csproj | 18 ++++ .../ApiLeapHit/Controllers/ChatController.cs | 83 ++++++++++++++++ .../ApiLeapHit/Controllers/GameController.cs | 89 ++++++++++++++++++ .../Controllers/MessageController.cs | 83 ++++++++++++++++ .../Controllers/PlayerController.cs | 83 ++++++++++++++++ code/server/ApiLeapHit/IDataManager.cs | 3 + code/server/ApiLeapHit/Program.cs | 28 ++++++ .../ApiLeapHit/Properties/launchSettings.json | 31 ++++++ .../ApiLeapHit/appsettings.Development.json | 8 ++ code/server/ApiLeapHit/appsettings.json | 9 ++ code/server/DTO/DTO.csproj | 10 ++ code/server/DTO/DTOChat.cs | 15 +++ code/server/DTO/DTOGame.cs | 17 ++++ code/server/DTO/DTOMessage.cs | 17 ++++ code/server/DTO/DTOPlayer.cs | 16 ++++ code/server/DTO/Program.cs | 2 + code/server/DataBase/Context/PongDbContext.cs | 2 +- code/server/DataBase/DataBase.csproj | 1 + .../DataManager/DbDataManager.Game.cs | 8 +- ...=> 20230222115848_mymigration.Designer.cs} | 12 +-- ...ation.cs => 20230222115848_mymigration.cs} | 82 ++++++++-------- .../PongDbContextWithStubModelSnapshot.cs | 8 +- code/server/DataBase/PongDB.db | Bin 57344 -> 57344 bytes code/server/DataBase/PongDB.db-shm | Bin 0 -> 32768 bytes code/server/DataBase/PongDB.db-wal | Bin 0 -> 28872 bytes code/server/DataBase/Program.cs | 3 +- code/server/Server.sln | 14 ++- 27 files changed, 584 insertions(+), 58 deletions(-) create mode 100644 code/server/ApiLeapHit/ApiLeapHit.csproj create mode 100644 code/server/ApiLeapHit/Controllers/ChatController.cs create mode 100644 code/server/ApiLeapHit/Controllers/GameController.cs create mode 100644 code/server/ApiLeapHit/Controllers/MessageController.cs create mode 100644 code/server/ApiLeapHit/Controllers/PlayerController.cs create mode 100644 code/server/ApiLeapHit/IDataManager.cs create mode 100644 code/server/ApiLeapHit/Program.cs create mode 100644 code/server/ApiLeapHit/Properties/launchSettings.json create mode 100644 code/server/ApiLeapHit/appsettings.Development.json create mode 100644 code/server/ApiLeapHit/appsettings.json create mode 100644 code/server/DTO/DTO.csproj create mode 100644 code/server/DTO/DTOChat.cs create mode 100644 code/server/DTO/DTOGame.cs create mode 100644 code/server/DTO/DTOMessage.cs create mode 100644 code/server/DTO/DTOPlayer.cs create mode 100644 code/server/DTO/Program.cs rename code/server/DataBase/Migrations/{20230216161314_initMigration.Designer.cs => 20230222115848_mymigration.Designer.cs} (96%) rename code/server/DataBase/Migrations/{20230216161314_initMigration.cs => 20230222115848_mymigration.cs} (76%) create mode 100644 code/server/DataBase/PongDB.db-shm create mode 100644 code/server/DataBase/PongDB.db-wal diff --git a/code/server/ApiLeapHit/ApiLeapHit.csproj b/code/server/ApiLeapHit/ApiLeapHit.csproj new file mode 100644 index 0000000..f5db561 --- /dev/null +++ b/code/server/ApiLeapHit/ApiLeapHit.csproj @@ -0,0 +1,18 @@ + + + + net6.0 + enable + enable + + + + + + + + + + + + diff --git a/code/server/ApiLeapHit/Controllers/ChatController.cs b/code/server/ApiLeapHit/Controllers/ChatController.cs new file mode 100644 index 0000000..bf424fd --- /dev/null +++ b/code/server/ApiLeapHit/Controllers/ChatController.cs @@ -0,0 +1,83 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; + +namespace ApiLeapHit.Controllers +{ + public class ChatController : Controller + { + // GET: ChatController + public ActionResult Index() + { + return View(); + } + + // GET: ChatController/Details/5 + public ActionResult Details(int id) + { + return View(); + } + + // GET: ChatController/Create + public ActionResult Create() + { + return View(); + } + + // POST: ChatController/Create + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult Create(IFormCollection collection) + { + try + { + return RedirectToAction(nameof(Index)); + } + catch + { + return View(); + } + } + + // GET: ChatController/Edit/5 + public ActionResult Edit(int id) + { + return View(); + } + + // POST: ChatController/Edit/5 + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult Edit(int id, IFormCollection collection) + { + try + { + return RedirectToAction(nameof(Index)); + } + catch + { + return View(); + } + } + + // GET: ChatController/Delete/5 + public ActionResult Delete(int id) + { + return View(); + } + + // POST: ChatController/Delete/5 + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult Delete(int id, IFormCollection collection) + { + try + { + return RedirectToAction(nameof(Index)); + } + catch + { + return View(); + } + } + } +} diff --git a/code/server/ApiLeapHit/Controllers/GameController.cs b/code/server/ApiLeapHit/Controllers/GameController.cs new file mode 100644 index 0000000..bb2b291 --- /dev/null +++ b/code/server/ApiLeapHit/Controllers/GameController.cs @@ -0,0 +1,89 @@ +using DataBase.DataManager; +using DataBase.Entity; +using DTO; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System.Diagnostics; +using System.Net; + +namespace ApiLeapHit.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class GameController : ControllerBase + { + private readonly DbDataManager _dataManager; + + + public GameController(DbDataManager dataManager) + { + _dataManager = dataManager; + } + + [HttpGet("{id}")] + public async Task> GetGame(int id) + { + var game = await _dataManager.GetGame(id); + if (game == null) + { + return NotFound(); + } + + var winner = await _dataManager.GetPlayer(game.winner); + var loser = await _dataManager.GetPlayer(game.loser); + + + var dtoGame = new DTOGame + { + 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 + { + playerId = loser.playerId, + name = loser.name, + nbBallTouchTotal = loser.nbBallTouchTotal, + timePlayed = loser.timePlayed + } + }; + return Ok(dtoGame); + } + + [HttpPost] + public async Task AddGame([FromBody] DTOGame dtoGame) + { + var winner = await _dataManager.GetPlayer(dtoGame.playerWinner.playerId); + var loser = await _dataManager.GetPlayer(dtoGame.playerLoser.playerId); + + var game = new Game + { + durationGame = dtoGame.durationGame, + nbMaxEchanges = dtoGame.nbMaxEchanges, + winner = winner.playerId, + loser = loser.playerId + }; + + await _dataManager.AddGame(game); + return Ok(); + } + + [HttpDelete("{id}")] + public async Task RemoveGame(int id) + { + try + { + var result = await _dataManager.RemoveGame(id); + if (result) + { + return Ok(); + } + return NotFound(); + } + catch (Exception ex) + { + return StatusCode((int)HttpStatusCode.InternalServerError, FactoryMessage.MessageCreate("Une erreur est survenue lors de la récupération des champions")); + } + } + } +} diff --git a/code/server/ApiLeapHit/Controllers/MessageController.cs b/code/server/ApiLeapHit/Controllers/MessageController.cs new file mode 100644 index 0000000..dc76a5f --- /dev/null +++ b/code/server/ApiLeapHit/Controllers/MessageController.cs @@ -0,0 +1,83 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; + +namespace ApiLeapHit.Controllers +{ + public class MessageController : Controller + { + // GET: MessageController + public ActionResult Index() + { + return View(); + } + + // GET: MessageController/Details/5 + public ActionResult Details(int id) + { + return View(); + } + + // GET: MessageController/Create + public ActionResult Create() + { + return View(); + } + + // POST: MessageController/Create + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult Create(IFormCollection collection) + { + try + { + return RedirectToAction(nameof(Index)); + } + catch + { + return View(); + } + } + + // GET: MessageController/Edit/5 + public ActionResult Edit(int id) + { + return View(); + } + + // POST: MessageController/Edit/5 + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult Edit(int id, IFormCollection collection) + { + try + { + return RedirectToAction(nameof(Index)); + } + catch + { + return View(); + } + } + + // GET: MessageController/Delete/5 + public ActionResult Delete(int id) + { + return View(); + } + + // POST: MessageController/Delete/5 + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult Delete(int id, IFormCollection collection) + { + try + { + return RedirectToAction(nameof(Index)); + } + catch + { + return View(); + } + } + } +} diff --git a/code/server/ApiLeapHit/Controllers/PlayerController.cs b/code/server/ApiLeapHit/Controllers/PlayerController.cs new file mode 100644 index 0000000..58ac3df --- /dev/null +++ b/code/server/ApiLeapHit/Controllers/PlayerController.cs @@ -0,0 +1,83 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; + +namespace ApiLeapHit.Controllers +{ + public class PlayerController : Controller + { + // GET: PlayerController + public ActionResult Index() + { + return View(); + } + + // GET: PlayerController/Details/5 + public ActionResult Details(int id) + { + return View(); + } + + // GET: PlayerController/Create + public ActionResult Create() + { + return View(); + } + + // POST: PlayerController/Create + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult Create(IFormCollection collection) + { + try + { + return RedirectToAction(nameof(Index)); + } + catch + { + return View(); + } + } + + // GET: PlayerController/Edit/5 + public ActionResult Edit(int id) + { + return View(); + } + + // POST: PlayerController/Edit/5 + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult Edit(int id, IFormCollection collection) + { + try + { + return RedirectToAction(nameof(Index)); + } + catch + { + return View(); + } + } + + // GET: PlayerController/Delete/5 + public ActionResult Delete(int id) + { + return View(); + } + + // POST: PlayerController/Delete/5 + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult Delete(int id, IFormCollection collection) + { + try + { + return RedirectToAction(nameof(Index)); + } + catch + { + return View(); + } + } + } +} diff --git a/code/server/ApiLeapHit/IDataManager.cs b/code/server/ApiLeapHit/IDataManager.cs new file mode 100644 index 0000000..827c6d4 --- /dev/null +++ b/code/server/ApiLeapHit/IDataManager.cs @@ -0,0 +1,3 @@ +internal interface IDataManager +{ +} \ No newline at end of file diff --git a/code/server/ApiLeapHit/Program.cs b/code/server/ApiLeapHit/Program.cs new file mode 100644 index 0000000..672700e --- /dev/null +++ b/code/server/ApiLeapHit/Program.cs @@ -0,0 +1,28 @@ +using DataBase.DataManager; + +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(); +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} + +app.UseHttpsRedirection(); + +app.UseAuthorization(); + +app.MapControllers(); + +app.Run(); diff --git a/code/server/ApiLeapHit/Properties/launchSettings.json b/code/server/ApiLeapHit/Properties/launchSettings.json new file mode 100644 index 0000000..eaba764 --- /dev/null +++ b/code/server/ApiLeapHit/Properties/launchSettings.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:33994", + "sslPort": 44350 + } + }, + "profiles": { + "ApiLeapHit": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "https://localhost:7153;http://localhost:5153", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/code/server/ApiLeapHit/appsettings.Development.json b/code/server/ApiLeapHit/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/code/server/ApiLeapHit/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/code/server/ApiLeapHit/appsettings.json b/code/server/ApiLeapHit/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/code/server/ApiLeapHit/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/code/server/DTO/DTO.csproj b/code/server/DTO/DTO.csproj new file mode 100644 index 0000000..74abf5c --- /dev/null +++ b/code/server/DTO/DTO.csproj @@ -0,0 +1,10 @@ + + + + Exe + net6.0 + enable + enable + + + diff --git a/code/server/DTO/DTOChat.cs b/code/server/DTO/DTOChat.cs new file mode 100644 index 0000000..e86896c --- /dev/null +++ b/code/server/DTO/DTOChat.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DTO +{ + public class DTOChat + { + public int chatId { get; set; } + public DTOPlayer PlayerId1 { get; set; } + public DTOPlayer PlayerId2 { get; set; } + } +} diff --git a/code/server/DTO/DTOGame.cs b/code/server/DTO/DTOGame.cs new file mode 100644 index 0000000..8e12a3f --- /dev/null +++ b/code/server/DTO/DTOGame.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 DTOGame + { + public int gameId { get; set; } + public int durationGame { get; set; } + public int nbMaxEchanges { get; set; } + public DTOPlayer playerWinner { get; set; } + public DTOPlayer playerLoser { get; set; } + } +} diff --git a/code/server/DTO/DTOMessage.cs b/code/server/DTO/DTOMessage.cs new file mode 100644 index 0000000..47154c0 --- /dev/null +++ b/code/server/DTO/DTOMessage.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 DTOMessage + { + public int messageId { get; set; } + public string message { get; set; } + public DateTime timestamp { get; set; } + public DTOPlayer PlayerId { get; set; } + public DTOChat ChatId { get; set; } + } +} diff --git a/code/server/DTO/DTOPlayer.cs b/code/server/DTO/DTOPlayer.cs new file mode 100644 index 0000000..1ec7dbb --- /dev/null +++ b/code/server/DTO/DTOPlayer.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DTO +{ + public class DTOPlayer + { + public int playerId { get; set; } + public string name { get; set; } + public int nbBallTouchTotal { get; set; } + public int timePlayed { get; set; } + } +} diff --git a/code/server/DTO/Program.cs b/code/server/DTO/Program.cs new file mode 100644 index 0000000..3751555 --- /dev/null +++ b/code/server/DTO/Program.cs @@ -0,0 +1,2 @@ +// See https://aka.ms/new-console-template for more information +Console.WriteLine("Hello, World!"); diff --git a/code/server/DataBase/Context/PongDbContext.cs b/code/server/DataBase/Context/PongDbContext.cs index 6bf8ec2..5829fd8 100644 --- a/code/server/DataBase/Context/PongDbContext.cs +++ b/code/server/DataBase/Context/PongDbContext.cs @@ -19,7 +19,7 @@ namespace DataBase.Context if (!optionsBuilder.IsConfigured) { - optionsBuilder.UseSqlite($"Data Source=PongDB.db"); + optionsBuilder.UseSqlite($"Data Source=C:\\Users\\noanr\\source\\repos\\leap-hit-server\\code\\server\\DataBase\\PongDB.db"); } } } diff --git a/code/server/DataBase/DataBase.csproj b/code/server/DataBase/DataBase.csproj index 32c23d2..f523208 100644 --- a/code/server/DataBase/DataBase.csproj +++ b/code/server/DataBase/DataBase.csproj @@ -5,6 +5,7 @@ net6.0 enable enable + $(MSBuildProjectDirectory) diff --git a/code/server/DataBase/DataManager/DbDataManager.Game.cs b/code/server/DataBase/DataManager/DbDataManager.Game.cs index 1663856..6b41046 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Game.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Game.cs @@ -15,10 +15,11 @@ namespace DataBase.DataManager using (var context = new PongDbContext()) { await context.Games.AddAsync(game); + await context.SaveChangesAsync(); } } - public Task RemoveGame(int id) + public async Task RemoveGame(int id) { using (var context = new PongDbContext()) { @@ -26,9 +27,10 @@ namespace DataBase.DataManager if (game != null) { var result = context.Games.Remove(game); - return Task.FromResult(result != null); + await context.SaveChangesAsync(); + return result != null; } - return Task.FromResult(false); + return false; } } diff --git a/code/server/DataBase/Migrations/20230216161314_initMigration.Designer.cs b/code/server/DataBase/Migrations/20230222115848_mymigration.Designer.cs similarity index 96% rename from code/server/DataBase/Migrations/20230216161314_initMigration.Designer.cs rename to code/server/DataBase/Migrations/20230222115848_mymigration.Designer.cs index 810a199..6865b45 100644 --- a/code/server/DataBase/Migrations/20230216161314_initMigration.Designer.cs +++ b/code/server/DataBase/Migrations/20230222115848_mymigration.Designer.cs @@ -11,8 +11,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace DataBase.Migrations { [DbContext(typeof(PongDbContextWithStub))] - [Migration("20230216161314_initMigration")] - partial class initMigration + [Migration("20230222115848_mymigration")] + partial class mymigration { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -38,7 +38,7 @@ namespace DataBase.Migrations b.HasIndex("player2"); - b.ToTable("Chat"); + b.ToTable("Chats"); b.HasData( new @@ -73,7 +73,7 @@ namespace DataBase.Migrations b.HasIndex("winner"); - b.ToTable("Game"); + b.ToTable("Games"); b.HasData( new @@ -111,7 +111,7 @@ namespace DataBase.Migrations b.HasIndex("player"); - b.ToTable("Message"); + b.ToTable("Messages"); b.HasData( new @@ -150,7 +150,7 @@ namespace DataBase.Migrations b.HasKey("playerId"); - b.ToTable("Player"); + b.ToTable("Players"); b.HasData( new diff --git a/code/server/DataBase/Migrations/20230216161314_initMigration.cs b/code/server/DataBase/Migrations/20230222115848_mymigration.cs similarity index 76% rename from code/server/DataBase/Migrations/20230216161314_initMigration.cs rename to code/server/DataBase/Migrations/20230222115848_mymigration.cs index cb3f6a6..0ea0e72 100644 --- a/code/server/DataBase/Migrations/20230216161314_initMigration.cs +++ b/code/server/DataBase/Migrations/20230222115848_mymigration.cs @@ -8,13 +8,13 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace DataBase.Migrations { /// - public partial class initMigration : Migration + public partial class mymigration : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( - name: "Player", + name: "Players", columns: table => new { playerId = table.Column(type: "INTEGER", nullable: false) @@ -25,11 +25,11 @@ namespace DataBase.Migrations }, constraints: table => { - table.PrimaryKey("PK_Player", x => x.playerId); + table.PrimaryKey("PK_Players", x => x.playerId); }); migrationBuilder.CreateTable( - name: "Chat", + name: "Chats", columns: table => new { chatId = table.Column(type: "INTEGER", nullable: false) @@ -39,23 +39,23 @@ namespace DataBase.Migrations }, constraints: table => { - table.PrimaryKey("PK_Chat", x => x.chatId); + table.PrimaryKey("PK_Chats", x => x.chatId); table.ForeignKey( - name: "FK_Chat_Player_player1", + name: "FK_Chats_Players_player1", column: x => x.player1, - principalTable: "Player", + principalTable: "Players", principalColumn: "playerId", onDelete: ReferentialAction.Cascade); table.ForeignKey( - name: "FK_Chat_Player_player2", + name: "FK_Chats_Players_player2", column: x => x.player2, - principalTable: "Player", + principalTable: "Players", principalColumn: "playerId", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( - name: "Game", + name: "Games", columns: table => new { gameId = table.Column(type: "INTEGER", nullable: false) @@ -67,23 +67,23 @@ namespace DataBase.Migrations }, constraints: table => { - table.PrimaryKey("PK_Game", x => x.gameId); + table.PrimaryKey("PK_Games", x => x.gameId); table.ForeignKey( - name: "FK_Game_Player_loser", + name: "FK_Games_Players_loser", column: x => x.loser, - principalTable: "Player", + principalTable: "Players", principalColumn: "playerId", onDelete: ReferentialAction.Cascade); table.ForeignKey( - name: "FK_Game_Player_winner", + name: "FK_Games_Players_winner", column: x => x.winner, - principalTable: "Player", + principalTable: "Players", principalColumn: "playerId", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( - name: "Message", + name: "Messages", columns: table => new { messageId = table.Column(type: "INTEGER", nullable: false) @@ -95,23 +95,23 @@ namespace DataBase.Migrations }, constraints: table => { - table.PrimaryKey("PK_Message", x => x.messageId); + table.PrimaryKey("PK_Messages", x => x.messageId); table.ForeignKey( - name: "FK_Message_Chat_chat", + name: "FK_Messages_Chats_chat", column: x => x.chat, - principalTable: "Chat", + principalTable: "Chats", principalColumn: "chatId", onDelete: ReferentialAction.Cascade); table.ForeignKey( - name: "FK_Message_Player_player", + name: "FK_Messages_Players_player", column: x => x.player, - principalTable: "Player", + principalTable: "Players", principalColumn: "playerId", onDelete: ReferentialAction.Cascade); }); migrationBuilder.InsertData( - table: "Player", + table: "Players", columns: new[] { "playerId", "name", "nbBallTouchTotal", "timePlayed" }, values: new object[,] { @@ -120,17 +120,17 @@ namespace DataBase.Migrations }); migrationBuilder.InsertData( - table: "Chat", + table: "Chats", columns: new[] { "chatId", "player1", "player2" }, values: new object[] { 1, 1, 2 }); migrationBuilder.InsertData( - table: "Game", + table: "Games", columns: new[] { "gameId", "durationGame", "loser", "nbMaxEchanges", "winner" }, values: new object[] { 1, 65, 2, 5, 1 }); migrationBuilder.InsertData( - table: "Message", + table: "Messages", columns: new[] { "messageId", "chat", "message", "player", "timestamp" }, values: new object[,] { @@ -139,33 +139,33 @@ namespace DataBase.Migrations }); migrationBuilder.CreateIndex( - name: "IX_Chat_player1", - table: "Chat", + name: "IX_Chats_player1", + table: "Chats", column: "player1"); migrationBuilder.CreateIndex( - name: "IX_Chat_player2", - table: "Chat", + name: "IX_Chats_player2", + table: "Chats", column: "player2"); migrationBuilder.CreateIndex( - name: "IX_Game_loser", - table: "Game", + name: "IX_Games_loser", + table: "Games", column: "loser"); migrationBuilder.CreateIndex( - name: "IX_Game_winner", - table: "Game", + name: "IX_Games_winner", + table: "Games", column: "winner"); migrationBuilder.CreateIndex( - name: "IX_Message_chat", - table: "Message", + name: "IX_Messages_chat", + table: "Messages", column: "chat"); migrationBuilder.CreateIndex( - name: "IX_Message_player", - table: "Message", + name: "IX_Messages_player", + table: "Messages", column: "player"); } @@ -173,16 +173,16 @@ namespace DataBase.Migrations protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( - name: "Game"); + name: "Games"); migrationBuilder.DropTable( - name: "Message"); + name: "Messages"); migrationBuilder.DropTable( - name: "Chat"); + name: "Chats"); migrationBuilder.DropTable( - name: "Player"); + name: "Players"); } } } diff --git a/code/server/DataBase/Migrations/PongDbContextWithStubModelSnapshot.cs b/code/server/DataBase/Migrations/PongDbContextWithStubModelSnapshot.cs index 7e3f4a3..5abba79 100644 --- a/code/server/DataBase/Migrations/PongDbContextWithStubModelSnapshot.cs +++ b/code/server/DataBase/Migrations/PongDbContextWithStubModelSnapshot.cs @@ -35,7 +35,7 @@ namespace DataBase.Migrations b.HasIndex("player2"); - b.ToTable("Chat"); + b.ToTable("Chats"); b.HasData( new @@ -70,7 +70,7 @@ namespace DataBase.Migrations b.HasIndex("winner"); - b.ToTable("Game"); + b.ToTable("Games"); b.HasData( new @@ -108,7 +108,7 @@ namespace DataBase.Migrations b.HasIndex("player"); - b.ToTable("Message"); + b.ToTable("Messages"); b.HasData( new @@ -147,7 +147,7 @@ namespace DataBase.Migrations b.HasKey("playerId"); - b.ToTable("Player"); + b.ToTable("Players"); b.HasData( new diff --git a/code/server/DataBase/PongDB.db b/code/server/DataBase/PongDB.db index 2ebe4215bc194062184670b4eebb49fc04caf90f..1c57f161dd4a65412d7ed28da3008f03c55c15bb 100644 GIT binary patch delta 1069 zcmaKqJ#W)M7{`5e;@3D%26CXt!kDEN5Ns#3QHxYUiJ-hR1x2)C2?ne-Qj$WP3Iaom zBGCaPQr*rsU_fSLpnQY23k*etN(`{Fuz`E_wFyBi_wv7ce*b%(=T_F~m36vXRiYbI zd`o^UeU_e!ANd{j2fN1RnQzQXCL7&&vvxT;Y)dRO74Q^P8~2~knxkN-wElsN$InvZ&Ex4@dw_*%DrGWMT?e2ozA^{RInZpxqWltMKVO1}S z3_JnB5&>Pb>;9V_RvQhciPz{0lkypX5>T+d_nJ`DuL}&+A$ZUasV%yMVX~=Zw}OSg z5P_!8@_s(>AfHM9$)pMv-UyR7iiL7fotnN-oKrQwf_--aES3)HWNG>=7lN0=y7xwz zc*FmfZ2psMYI>*1vQSaL>S)WpQ*%hs$;^e+a^d{dqTfU|>^GX=&H@)b;oh=tkOIo_ zCw=8MKb~+aGx#@<)X_O9h2Har{Ns|S8j_%QmKYX72v(=CD{ciI*nYpDcgKVg>~$PH z7GClDbaYfSFmkL%>xx#7jTyx@&kEQE*9i|yzYW%q93wUhv2t?XCj8na&f;q;Kwdb?hoZ`!TuVq-L8WU>N9Q9$0MrCH}R%4|)5!pK^ZZ;9=j+p2RN9c91QTjeE18Kr3r~3@@9w zzBFTPW?o8ag=a*(Z)$OIVtQ(PK~7?2Y7vyj=N#nf7~-nn>F44ap`e7JOi97tPeBQ) zSV=)c38Gs`GmM8#Tw9v46y5aXjKmVK^04$&UYv%5RACqm7Ss&jW)s&GWh{gl?4FpL z8eg87mzP=uVou(`CT0WWLregPf?NhsqonD}#U`#U%9x8{Ku&%!L_hcBjclUz@nAlx zeu$7}FelJsq6m*U1Dy&DGb0e23&T^$Dj-IJL=b^xq@)?lfnsQVJdz$m5StU9sfO50 zHB{1U&R}O3mzHL1S1(CS%1MRB5|rYAni%5fa1YH+YG^mgTe-c*-#A!2~B3< zffydg69PABH;)O>a4UYOWw3~wJb_beav-l5$P1G@c*FGbnAyc8B^jH|!L~sB2q9Te zZGw7VfX@o#k=%%rzL5>t6qzZJ%AsOfs#+sv1zb7ecaPKNj0>bO757MJwP{;*Y+xbNdF`RAmb zPa0v2J?&7Pk9k-M0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72>hf#yzNd1 z5FkL{zXYmDylYel5FkK+009C72oNZY`1PBlyK!5-N a0t5&UAV7cs0RjXF5FkK+009C&FYpAo%_qG8 literal 0 HcmV?d00001 diff --git a/code/server/DataBase/PongDB.db-wal b/code/server/DataBase/PongDB.db-wal new file mode 100644 index 0000000000000000000000000000000000000000..af473cce6fe4c8d6dcc67921d99935f93074d165 GIT binary patch literal 28872 zcmeI(zb^zq6u|MBo!xcgevFQ|;4iq)iBd#FA(2p0oY?pg3QnVvC?rHFQK6DhOLQus zL7}4}5{aLc$R%81<}R0FmLA3oSI9whk*bB2q1s}0tg_000IagfB*u2 zQ9vuzDEsoWQNc_3sznY&g+hM9-r1L}*X0KZPc`bE$^1egDOFYu&g2)P`SON3mr=D| zFu14}0tg_000IagfB*srAb>zz1oUrx1TAaBz0Y%@ zbms-6`J|5^E?=HJ5I_I{1Q0*~0R#|0009ILs1XQ%=p!%#>!Zh0(PpJCP@<2Z#*8Hb Z2q1s}0tg_000IagfB*vV5eUkC1YcFDXF&h} literal 0 HcmV?d00001 diff --git a/code/server/DataBase/Program.cs b/code/server/DataBase/Program.cs index 667c92e..e000096 100644 --- a/code/server/DataBase/Program.cs +++ b/code/server/DataBase/Program.cs @@ -1,2 +1 @@ - -Console.WriteLine("Hello world !"); \ No newline at end of file +Console.WriteLine("Hello world !"); \ No newline at end of file diff --git a/code/server/Server.sln b/code/server/Server.sln index fac3ecc..24964fa 100644 --- a/code/server/Server.sln +++ b/code/server/Server.sln @@ -7,7 +7,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server", "Server\Server.csp EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Client", "Client\Client.csproj", "{1D3CF318-8453-4D0C-B11D-2A6B7E44AA47}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataBase", "DataBase\DataBase.csproj", "{240EEEA0-7EFB-4919-A5C9-584DC6505C58}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataBase", "DataBase\DataBase.csproj", "{240EEEA0-7EFB-4919-A5C9-584DC6505C58}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiLeapHit", "ApiLeapHit\ApiLeapHit.csproj", "{693F37D1-B10C-45B2-A180-24D26B5A4841}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DTO", "DTO\DTO.csproj", "{BDA37278-912D-47E9-BD69-47A924A69004}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -27,6 +31,14 @@ Global {240EEEA0-7EFB-4919-A5C9-584DC6505C58}.Debug|Any CPU.Build.0 = Debug|Any CPU {240EEEA0-7EFB-4919-A5C9-584DC6505C58}.Release|Any CPU.ActiveCfg = Release|Any CPU {240EEEA0-7EFB-4919-A5C9-584DC6505C58}.Release|Any CPU.Build.0 = Release|Any CPU + {693F37D1-B10C-45B2-A180-24D26B5A4841}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {693F37D1-B10C-45B2-A180-24D26B5A4841}.Debug|Any CPU.Build.0 = Debug|Any CPU + {693F37D1-B10C-45B2-A180-24D26B5A4841}.Release|Any CPU.ActiveCfg = Release|Any CPU + {693F37D1-B10C-45B2-A180-24D26B5A4841}.Release|Any CPU.Build.0 = Release|Any CPU + {BDA37278-912D-47E9-BD69-47A924A69004}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BDA37278-912D-47E9-BD69-47A924A69004}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BDA37278-912D-47E9-BD69-47A924A69004}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BDA37278-912D-47E9-BD69-47A924A69004}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 91a5157b4ba3fbc7493786be2c189a5daf46ea56 Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Fri, 24 Feb 2023 11:12:44 +0100 Subject: [PATCH 02/11] chat controller --- .../ApiLeapHit/Controllers/ChatController.cs | 85 ++++++------------ .../ApiLeapHit/Controllers/GameController.cs | 15 +--- .../DataManager/DbDataManager.Chat.cs | 8 +- code/server/DataBase/PongDB.db-shm | Bin 32768 -> 32768 bytes code/server/DataBase/PongDB.db-wal | Bin 28872 -> 57712 bytes 5 files changed, 35 insertions(+), 73 deletions(-) diff --git a/code/server/ApiLeapHit/Controllers/ChatController.cs b/code/server/ApiLeapHit/Controllers/ChatController.cs index bf424fd..0856c37 100644 --- a/code/server/ApiLeapHit/Controllers/ChatController.cs +++ b/code/server/ApiLeapHit/Controllers/ChatController.cs @@ -1,83 +1,50 @@ -using Microsoft.AspNetCore.Http; +using DataBase.DataManager; +using DataBase.Entity; +using DTO; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace ApiLeapHit.Controllers { + [Route("api/[controller]")] + [ApiController] public class ChatController : Controller { - // GET: ChatController - public ActionResult Index() - { - return View(); - } - // GET: ChatController/Details/5 - public ActionResult Details(int id) - { - return View(); - } + private readonly DbDataManager _dataManager; - // GET: ChatController/Create - public ActionResult Create() - { - return View(); - } - // POST: ChatController/Create - [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult Create(IFormCollection collection) + public ChatController(DbDataManager dataManager) { - try - { - return RedirectToAction(nameof(Index)); - } - catch - { - return View(); - } + _dataManager = dataManager; } - // GET: ChatController/Edit/5 - public ActionResult Edit(int id) - { - return View(); - } - - // POST: ChatController/Edit/5 [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult Edit(int id, IFormCollection collection) + public async Task AddChat([FromBody] DTOChat dtoChat) { - try - { - return RedirectToAction(nameof(Index)); - } - catch + var player1 = await _dataManager.GetPlayer(dtoChat.PlayerId2.playerId); + var player2 = await _dataManager.GetPlayer(dtoChat.PlayerId2.playerId); + + var chat = new Chat { - return View(); - } - } + chatId = dtoChat.chatId, + player1 = player1.playerId, + player2 = player2.playerId + }; - // GET: ChatController/Delete/5 - public ActionResult Delete(int id) - { - return View(); + await _dataManager.AddChat(chat); + return Ok(); } - // POST: ChatController/Delete/5 - [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult Delete(int id, IFormCollection collection) + [HttpDelete("{id}")] + public async Task RemoveChat(int id) { - try - { - return RedirectToAction(nameof(Index)); - } - catch + var result = await _dataManager.RemoveChat(id); + if (result) { - return View(); + return Ok(result); } + return NotFound(result); } } } diff --git a/code/server/ApiLeapHit/Controllers/GameController.cs b/code/server/ApiLeapHit/Controllers/GameController.cs index bb2b291..1796034 100644 --- a/code/server/ApiLeapHit/Controllers/GameController.cs +++ b/code/server/ApiLeapHit/Controllers/GameController.cs @@ -71,19 +71,12 @@ namespace ApiLeapHit.Controllers [HttpDelete("{id}")] public async Task RemoveGame(int id) { - try + var result = await _dataManager.RemoveGame(id); + if (result) { - var result = await _dataManager.RemoveGame(id); - if (result) - { - return Ok(); - } - return NotFound(); - } - catch (Exception ex) - { - return StatusCode((int)HttpStatusCode.InternalServerError, FactoryMessage.MessageCreate("Une erreur est survenue lors de la récupération des champions")); + return Ok(result); } + return NotFound(result); } } } diff --git a/code/server/DataBase/DataManager/DbDataManager.Chat.cs b/code/server/DataBase/DataManager/DbDataManager.Chat.cs index 955e082..683019d 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Chat.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Chat.cs @@ -15,10 +15,11 @@ namespace DataBase.DataManager using (var context = new PongDbContext()) { await context.Chats.AddAsync(chat); + await context.SaveChangesAsync(); } } - public Task RemoveChat(int id) + public async Task RemoveChat(int id) { using (var context = new PongDbContext()) { @@ -26,9 +27,10 @@ namespace DataBase.DataManager if (chat != null) { var result = context.Chats.Remove(chat); - return Task.FromResult(result != null); + await context.SaveChangesAsync(); + return result != null; } - return Task.FromResult(false); + return false; } } } diff --git a/code/server/DataBase/PongDB.db-shm b/code/server/DataBase/PongDB.db-shm index 91d571d912a41ccda4c37861365f33d3939d4bfd..d561b7d0046254a9cd36b187d1392c8b1896ae81 100644 GIT binary patch delta 210 zcmZo@U}|V!s+V}A%K!pQK+MR%AixKtLD=_9)Z&R37o{I%obUM{#^C#=V*a|rzZkBN zsvc+*7;pp0|40BT%*4Pxu~Au)706`+Voo6DLS}DVXz9ny$iT62;cq5J&W-c`GHw18 Y@`sg~i-8v;#LUgW2ckE>N)VF=08yJf^Z)<= delta 167 zcmZo@U}|V!s+V}A%K!q55G=qBr1^k2w#S!$dTQq3qm1)CAH*1ZU(vpM<~DC2z32QdcUpB+hmH%t2AVP5|G3@rS|82CT)zu-T{ ze{pl7z&8HL|M+E`I62)Db5l8)n8g{LGZIURnYkI6r5OWq5-U@SikW~$u_2qch1uWO zgiZT3FHn$)|04tcPyUaaCmKBEH)dmIVPIrrVq#@vVc=v0Y2-xK82nX8Hd;f}h6}9m z8w39z{%@NP20Z6i1q!e-19dVpGjoEpfK>3o+`q2Tr~Kwc!;PCW6n^n*F|#l;a$>mY z Date: Fri, 24 Feb 2023 11:41:28 +0100 Subject: [PATCH 03/11] Controller Player --- .../Controllers/PlayerController.cs | 121 ++++++++++-------- code/server/DataBase/Context/PongDbContext.cs | 2 +- .../DataManager/DbDataManager.Player.cs | 13 +- 3 files changed, 77 insertions(+), 59 deletions(-) diff --git a/code/server/ApiLeapHit/Controllers/PlayerController.cs b/code/server/ApiLeapHit/Controllers/PlayerController.cs index 58ac3df..791a616 100644 --- a/code/server/ApiLeapHit/Controllers/PlayerController.cs +++ b/code/server/ApiLeapHit/Controllers/PlayerController.cs @@ -1,83 +1,98 @@ -using Microsoft.AspNetCore.Http; +using DataBase.DataManager; +using DataBase.Entity; +using DTO; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using System.Net; namespace ApiLeapHit.Controllers { - public class PlayerController : Controller + public class PlayerController : ControllerBase { - // GET: PlayerController - public ActionResult Index() - { - return View(); - } + private readonly DbDataManager _dataManager; - // GET: PlayerController/Details/5 - public ActionResult Details(int id) + public PlayerController(DbDataManager dataManager) { - return View(); + _dataManager = dataManager; } - - // GET: PlayerController/Create - public ActionResult Create() - { - return View(); - } - - // POST: PlayerController/Create - [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult Create(IFormCollection collection) + [HttpGet("{id}")] + public async Task> GetPlayer(int id) { - try + var player = await _dataManager.GetPlayer(id); + if (player == null) { - return RedirectToAction(nameof(Index)); + return NotFound(); } - catch + + + var dtoPlayer = new DTOPlayer { - return View(); - } + playerId = player.playerId, + name = player.name, + nbBallTouchTotal = player.nbBallTouchTotal, + timePlayed = player.timePlayed, + + }; + return Ok(dtoPlayer); } - // GET: PlayerController/Edit/5 - public ActionResult Edit(int id) + [HttpPost] + public async Task AddPlayer([FromBody] DTOPlayer dtoPlayer) { - return View(); + + var player = new Player + { + playerId = dtoPlayer.playerId, + name = dtoPlayer.name, + nbBallTouchTotal = dtoPlayer.nbBallTouchTotal, + timePlayed = dtoPlayer.timePlayed, + }; + + await _dataManager.AddPlayer(player); + return Ok(); } - // POST: PlayerController/Edit/5 - [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult Edit(int id, IFormCollection collection) + [HttpDelete("{id}")] + public async Task RemovePlayer(int id) { try { - return RedirectToAction(nameof(Index)); + var result = await _dataManager.RemovePlayer(id); + if (result) + { + return Ok(); + } + return NotFound(); } - catch + catch (Exception ex) { - return View(); + return StatusCode((int)HttpStatusCode.InternalServerError); } } - // GET: PlayerController/Delete/5 - public ActionResult Delete(int id) - { - return View(); - } + + [HttpPut("{id}")] + public async Task Put(int id, [FromBody] DTOPlayer dtoPlayer) + { + if (!ModelState.IsValid) + return StatusCode((int)HttpStatusCode.BadRequest); //"Les données du player ne sont pas correctes" - // POST: PlayerController/Delete/5 - [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult Delete(int id, IFormCollection collection) - { - try - { - return RedirectToAction(nameof(Index)); - } - catch + Player playerTeste = await _dataManager.GetPlayer(id); + if (playerTeste != null) + return StatusCode((int)HttpStatusCode.NotFound); //"Le player n'existe pas." + + var player = new Player { - return View(); - } + playerId = dtoPlayer.playerId, + name = dtoPlayer.name, + nbBallTouchTotal = dtoPlayer.nbBallTouchTotal, + timePlayed = dtoPlayer.timePlayed, + }; + + Player playerUpdate = await _dataManager.GetPlayer(id); + await _dataManager.UpdatePlayer(id,player.name); + return StatusCode((int)HttpStatusCode.OK); //"Le champion a été modifié." } + } } diff --git a/code/server/DataBase/Context/PongDbContext.cs b/code/server/DataBase/Context/PongDbContext.cs index 5829fd8..17bad66 100644 --- a/code/server/DataBase/Context/PongDbContext.cs +++ b/code/server/DataBase/Context/PongDbContext.cs @@ -19,7 +19,7 @@ namespace DataBase.Context if (!optionsBuilder.IsConfigured) { - optionsBuilder.UseSqlite($"Data Source=C:\\Users\\noanr\\source\\repos\\leap-hit-server\\code\\server\\DataBase\\PongDB.db"); + optionsBuilder.UseSqlite($"Data Source=../DataBase/PongDB.db"); } } } diff --git a/code/server/DataBase/DataManager/DbDataManager.Player.cs b/code/server/DataBase/DataManager/DbDataManager.Player.cs index a6a7842..44919b2 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Player.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Player.cs @@ -17,10 +17,11 @@ namespace DataBase.DataManager using (var context = new PongDbContext()) { await context.Players.AddAsync(player); + await context.SaveChangesAsync(); } } - public Task RemovePlayer(int id) + public async Task RemovePlayer(int id) { using (var context = new PongDbContext()) { @@ -28,13 +29,14 @@ namespace DataBase.DataManager if (player != null) { var result = context.Players.Remove(player); - return Task.FromResult(result != null); + await context.SaveChangesAsync(); + return result != null; } - return Task.FromResult(false); + return false; } } - public Task UpdatePlayer(int id, string newName) + public async Task UpdatePlayer(int id, string newName) { using (var context = new PongDbContext()) { @@ -43,7 +45,8 @@ namespace DataBase.DataManager { player.name = newName; } - return Task.FromResult(player); + await context.SaveChangesAsync(); + return player; } } From bb4c2743a28d87a2238a55ccdbc42a525bbd612d Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Fri, 24 Feb 2023 11:43:51 +0100 Subject: [PATCH 04/11] :hammer: message controller --- .../Controllers/MessageController.cs | 102 +++++++++--------- .../DataManager/DbDataManager.Message.cs | 8 +- 2 files changed, 53 insertions(+), 57 deletions(-) diff --git a/code/server/ApiLeapHit/Controllers/MessageController.cs b/code/server/ApiLeapHit/Controllers/MessageController.cs index dc76a5f..218b3f6 100644 --- a/code/server/ApiLeapHit/Controllers/MessageController.cs +++ b/code/server/ApiLeapHit/Controllers/MessageController.cs @@ -1,83 +1,77 @@ -using Microsoft.AspNetCore.Http; +using DataBase.DataManager; +using DataBase.Entity; +using DTO; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace ApiLeapHit.Controllers { + [Route("api/[controller]")] + [ApiController] public class MessageController : Controller { - // GET: MessageController - public ActionResult Index() - { - return View(); - } + private readonly DbDataManager _dataManager; - // GET: MessageController/Details/5 - public ActionResult Details(int id) - { - return View(); - } - // GET: MessageController/Create - public ActionResult Create() + public MessageController(DbDataManager dataManager) { - return View(); + _dataManager = dataManager; } - // POST: MessageController/Create - [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult Create(IFormCollection collection) + [HttpGet("{id}")] + public async Task> ReceiveMessage(int id) { - try + var message = await _dataManager.ReceiveMessage(id); + if (message == null) { - return RedirectToAction(nameof(Index)); + return NotFound(); } - catch - { - return View(); - } - } - // GET: MessageController/Edit/5 - public ActionResult Edit(int id) - { - return View(); + var player = await _dataManager.GetPlayer(message.player); + + + var dtoMessage = new DTOMessage + { + messageId = message.messageId, + message = message.message, + timestamp = message.timestamp, + PlayerId = new DTOPlayer + { + playerId = player.playerId, + name = player.name, + nbBallTouchTotal = player.nbBallTouchTotal, + timePlayed = player.timePlayed + } + }; + return Ok(dtoMessage); } - // POST: MessageController/Edit/5 [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult Edit(int id, IFormCollection collection) + public async Task SendMessage([FromBody] DTOMessage dtoMessage) { - try - { - return RedirectToAction(nameof(Index)); - } - catch + var player = await _dataManager.GetPlayer(dtoMessage.PlayerId.playerId); + + var message = new Message { - return View(); - } - } + messageId = dtoMessage.messageId, + message = dtoMessage.message, + timestamp = dtoMessage.timestamp, + player = player.playerId + }; - // GET: MessageController/Delete/5 - public ActionResult Delete(int id) - { - return View(); + await _dataManager.SendMessage(message); + return Ok(); } - // POST: MessageController/Delete/5 - [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult Delete(int id, IFormCollection collection) + [HttpDelete("{id}")] + public async Task RemoveMessage(int id) { - try - { - return RedirectToAction(nameof(Index)); - } - catch + var result = await _dataManager.RemoveMessage(id); + if (result) { - return View(); + return Ok(result); } + return NotFound(result); } } } diff --git a/code/server/DataBase/DataManager/DbDataManager.Message.cs b/code/server/DataBase/DataManager/DbDataManager.Message.cs index 137ba69..60ffad9 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Message.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Message.cs @@ -16,6 +16,7 @@ namespace DataBase.DataManager using (var context = new PongDbContext()) { await context.Messages.AddAsync(message); + await context.SaveChangesAsync(); } } @@ -28,7 +29,7 @@ namespace DataBase.DataManager } } - public Task RemoveMessage(int id) + public async Task RemoveMessage(int id) { using (var context = new PongDbContext()) { @@ -36,9 +37,10 @@ namespace DataBase.DataManager if (message != null) { var result = context.Messages.Remove(message); - return Task.FromResult(result != null); + await context.SaveChangesAsync(); + return result != null; } - return Task.FromResult(false); + return false; } } } From 1da75268e4d2af2d31f69daa2bde8f8886c7e54f Mon Sep 17 00:00:00 2001 From: Bruno Da Costa Cunha Date: Fri, 24 Feb 2023 13:21:45 +0100 Subject: [PATCH 05/11] Update playerController --- code/server/ApiLeapHit/Controllers/PlayerController.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/server/ApiLeapHit/Controllers/PlayerController.cs b/code/server/ApiLeapHit/Controllers/PlayerController.cs index 791a616..8b46504 100644 --- a/code/server/ApiLeapHit/Controllers/PlayerController.cs +++ b/code/server/ApiLeapHit/Controllers/PlayerController.cs @@ -7,6 +7,8 @@ using System.Net; namespace ApiLeapHit.Controllers { + [Route("api/[controller]")] + [ApiController] public class PlayerController : ControllerBase { private readonly DbDataManager _dataManager; From a2baa82630c5b9b9ea0fc43443c859e53aaf79f1 Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Sat, 25 Feb 2023 20:57:22 +0100 Subject: [PATCH 06/11] :hammer: update class gameController + ajout mapper + modif dbdatamanager --- code/server/ApiLeapHit/ApiLeapHit.csproj | 4 +- .../ApiLeapHit/Controllers/ChatController.cs | 28 +++ .../ApiLeapHit/Controllers/GameController.cs | 187 ++++++++++++++---- code/server/ApiLeapHit/Mapper/GameMapper.cs | 32 +++ .../Mapper/GameWithIdPlayerMapper.cs | 19 ++ code/server/ApiLeapHit/Mapper/PlayerMapper.cs | 20 ++ code/server/ApiLeapHit/Program.cs | 8 +- code/server/ApiLeapHit/appsettings.json | 11 +- code/server/DTO/DTOGameWithIdPlayer.cs | 17 ++ code/server/DTO/Factory/ApiResponse.cs | 20 ++ .../DataManager/DbDataManager.Chat.cs | 11 ++ .../DataManager/DbDataManager.Game.cs | 27 +++ .../DataManager/DbDataManager.Message.cs | 9 + code/server/DataBase/PongDB.db | Bin 57344 -> 57344 bytes code/server/DataBase/PongDB.db-shm | Bin 32768 -> 0 bytes code/server/DataBase/PongDB.db-wal | Bin 57712 -> 0 bytes 16 files changed, 353 insertions(+), 40 deletions(-) create mode 100644 code/server/ApiLeapHit/Mapper/GameMapper.cs create mode 100644 code/server/ApiLeapHit/Mapper/GameWithIdPlayerMapper.cs create mode 100644 code/server/ApiLeapHit/Mapper/PlayerMapper.cs create mode 100644 code/server/DTO/DTOGameWithIdPlayer.cs create mode 100644 code/server/DTO/Factory/ApiResponse.cs delete mode 100644 code/server/DataBase/PongDB.db-shm delete mode 100644 code/server/DataBase/PongDB.db-wal 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 1c57f161dd4a65412d7ed28da3008f03c55c15bb..3905c29bfea6fa6cd337514c2e01aa02d655ab00 100644 GIT binary patch delta 296 zcmYk0u}T9$6h+^gH?!{3$juf(MTHc8h#+Vseo+#BTA#ici!(O@hH3(P{+n_w?xHpa0f<%SBzgbME%<1u92 zdu(f(Mz&@X`YrNTLUqw;8+?VVd_#vQF(RV6-b^eBOH>WosfiU|*ZKLY~;3;#t1{?Gg``S0^z+$<}OE`0I4rFtN;K2 diff --git a/code/server/DataBase/PongDB.db-shm b/code/server/DataBase/PongDB.db-shm deleted file mode 100644 index d561b7d0046254a9cd36b187d1392c8b1896ae81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI*O=jGnq-ew}LKqKYoAUj8w)xnv7hlEa+s}M@+%89}-6r;tVw>tT?&YdZ-`X*|F?&~ad=&%;5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNApS%D%vS9Wa{M&P~z-SULR`~Ji11ga^}2OP#b|}d51u4wrisVGJ)3Rrj4vqNq_(W0t5&UAV7cs0RjXF5FkK+ R009C72oNAZfWSiu`~!2FDLw!I diff --git a/code/server/DataBase/PongDB.db-wal b/code/server/DataBase/PongDB.db-wal deleted file mode 100644 index 5fe8801ae09bceef01abbdf661a75c451ad9c40e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57712 zcmeI*J7^R^9LMpQo!!k%UK0d~ctl%4f{IEA+K7mV1|ty!HN}ZXRJ70eXfloSer zAgG`S3L=PNXO%}|EYg|E2ShH$2Qef^ycEvtdf`qmwmSI^+_JZ~#r;3K)t~+Euj4{| zNwj}hAw-LCYe?SR_3rTc(yGhho7Zr>NLuj|JwlFf(?;LI42-5I_I{1Q0*~ z0R#|00D=Erpe~3-CZlDbWh|uBa$DpY2Mw;UN?+j7Nr<%n@+IAbi3+& z*ojo$JNR7f-MA@UJDKJbP6;z-rhF8mCIk>b009ILKmY**5I_I{1eT;gtU{Yn7zB|F zg?;y+HE{19T<8n*%q(j=v}XC%G>>4`%@NElNhgX%009ILKmY**5I_I{1Q0;LTY)5~ zQ2ojya4mp^oWds;_naFW-S9N+3)nn@vJE9*A%Fk^2q1s}0tg_000IagfPg;&X{QwahHAbApT$M+_90B(Y0tg_000IagfB*srAb Date: Sun, 26 Feb 2023 17:18:22 +0100 Subject: [PATCH 07/11] =?UTF-8?q?:hammer:=20Am=C3=A9lioration=20des=20cont?= =?UTF-8?q?roleur=20+=20mise=20en=20place=20de=20logger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApiLeapHit/Controllers/ChatController.cs | 188 +++++++++++++--- .../ApiLeapHit/Controllers/GameController.cs | 144 ++++++------ .../Controllers/MessageController.cs | 103 +++++---- .../Controllers/PlayerController.cs | 207 ++++++++++++++---- code/server/ApiLeapHit/Mapper/ChatMapper.cs | 29 +++ .../server/ApiLeapHit/Mapper/MessageMapper.cs | 21 ++ code/server/ApiLeapHit/Mapper/PlayerMapper.cs | 11 + code/server/DTO/Factory/ApiLink.cs | 22 ++ code/server/DTO/Factory/ApiResponse.cs | 2 + .../DataManager/DbDataManager.Chat.cs | 25 +++ .../DataManager/DbDataManager.Player.cs | 9 + code/server/DataBase/PongDB.db | Bin 57344 -> 57344 bytes 12 files changed, 570 insertions(+), 191 deletions(-) create mode 100644 code/server/ApiLeapHit/Mapper/ChatMapper.cs create mode 100644 code/server/ApiLeapHit/Mapper/MessageMapper.cs create mode 100644 code/server/DTO/Factory/ApiLink.cs diff --git a/code/server/ApiLeapHit/Controllers/ChatController.cs b/code/server/ApiLeapHit/Controllers/ChatController.cs index d04390f..8ed49ba 100644 --- a/code/server/ApiLeapHit/Controllers/ChatController.cs +++ b/code/server/ApiLeapHit/Controllers/ChatController.cs @@ -1,6 +1,8 @@ -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; @@ -12,67 +14,195 @@ namespace ApiLeapHit.Controllers { private readonly DbDataManager _dataManager; + private readonly ILogger _logger; - - public ChatController(DbDataManager dataManager) + public ChatController(DbDataManager dataManager, ILogger logger) { _dataManager = dataManager; + _logger = logger; } [HttpPost] public async Task AddChat([FromBody] DTOChat dtoChat) { - var player1 = await _dataManager.GetPlayer(dtoChat.PlayerId2.playerId); - var player2 = await _dataManager.GetPlayer(dtoChat.PlayerId2.playerId); - - var chat = new Chat + try { - chatId = dtoChat.chatId, - player1 = player1.playerId, - player2 = player2.playerId - }; + var player1 = await _dataManager.GetPlayer(dtoChat.PlayerId1.playerId); + var player2 = await _dataManager.GetPlayer(dtoChat.PlayerId2.playerId); + + await _dataManager.AddChat(dtoChat.ToChat(player1, player2)); - await _dataManager.AddChat(chat); - return Ok(); + 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)); + } + catch (Exception ex) + { + var error_message = $"Une erreur est survenue lors de l'ajout du chat : {ex.Message}"; + _logger.LogError(ex, error_message); + return StatusCode(500, new ApiResponse(error_message)); + } } [HttpGet] public async Task>> GetChats() { - var chats = await _dataManager.GetChats(); - if (chats == null) + try + { + var chats = await _dataManager.GetChats(); + if (chats == null) + { + var message = "Aucun chat n'a été trouvé."; + _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); + + var dtoChat = chat.ToDto(player1, player2); + + dtoChats.Add(dtoChat); + } + + 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)); + } + catch (Exception ex) { - return NotFound(); + var error_message = $"Une erreur est survenue lors de la récupération des chats : {ex.Message}"; + _logger.LogError(ex, error_message); + return StatusCode(500, new ApiResponse(error_message)); } + } - var dtoChats = new List(); - foreach (var chat in chats) + [HttpGet("{id}")] + public async Task>> GetChatById(int id) + { + try { + var chat = await _dataManager.GetChat(id); + if (chat == null) + { + var message = "Aucun chat n'a été trouvé."; + _logger.LogWarning(message); + return NotFound(new ApiResponse(message)); + } + var player1 = await _dataManager.GetPlayer(chat.player1); var player2 = await _dataManager.GetPlayer(chat.player2); - var dtoChat = new DTOChat + var dtoChat = chat.ToDto(player1, player2); + + 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)); + } + catch (Exception ex) + { + var error_message = $"Une erreur est survenue lors de la récupération du chat {id} : {ex.Message}"; + _logger.LogError(ex, error_message); + return StatusCode(500, new ApiResponse(error_message)); + } + } + + [HttpGet("byPlayer/{id}")] + public async Task>> GetChatsByIdPlayer(int id) + { + try + { + var chats = await _dataManager.GetChatsByIdPlayer(id); + if (chats == null || chats.Count() == 0) + { + 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) { - chatId = chat.chatId, - PlayerId1 = new DTOPlayer { playerId = player1.playerId, name = player1.name }, - PlayerId2 = new DTOPlayer { playerId = player2.playerId, name = player2.name } - }; + var player1 = await _dataManager.GetPlayer(chat.player1); + var player2 = await _dataManager.GetPlayer(chat.player2); + + var dtoChat = chat.ToDto(player1, player2); + + dtoChats.Add(dtoChat); + } - dtoChats.Add(dtoChat); + 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}"; + _logger.LogError(ex, error_message); + return StatusCode(500, new ApiResponse(error_message)); + } + } - return Ok(dtoChats); + [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 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(player1, player2)); + } + + 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}"; + _logger.LogError(ex, error_message); + return StatusCode(500, new ApiResponse(error_message)); + } } [HttpDelete("{id}")] public async Task RemoveChat(int id) { - var result = await _dataManager.RemoveChat(id); - if (result) + try + { + var result = await _dataManager.RemoveChat(id); + if (result) + { + 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)); + } + + var warning_message = $"Le chat avec l'identifiant {id} n'a pas été trouvé."; + _logger.LogWarning(warning_message); + return NotFound(new ApiResponse(warning_message)); + } + catch (Exception ex) { - return Ok(result); + 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 NotFound(result); } } } diff --git a/code/server/ApiLeapHit/Controllers/GameController.cs b/code/server/ApiLeapHit/Controllers/GameController.cs index ca580b8..306d809 100644 --- a/code/server/ApiLeapHit/Controllers/GameController.cs +++ b/code/server/ApiLeapHit/Controllers/GameController.cs @@ -30,28 +30,27 @@ namespace ApiLeapHit.Controllers { try { + _logger.LogInformation("Récupération de la game avec l'identifiant {id}", id); + var game = await _dataManager.GetGame(id); if (game == null) { - return NotFound(new ApiResponse("La game avec l'identifiant " + id + " n'existe pas.")); + var message = $"La game avec l'identifiant {id} n'existe pas"; + _logger.LogWarning(message); + return NotFound(new ApiResponse(message)); } - var winner = await _dataManager.GetPlayer(game.winner); - //if (winner == null) - //{ - // return NotFound("Le joueur avec l'identifiant " + game.winner + " n'existe pas."); - //} + var winner = await _dataManager.GetPlayer(game.winner); var loser = await _dataManager.GetPlayer(game.loser); - //if (loser == null) - //{ - // return NotFound("Le joueur avec l'identifiant " + game.loser + " n'existe pas."); - //} + + _logger.LogInformation("Récupération des joueurs pour la game avec l'identifiant {id}", id); 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)); + _logger.LogError(ex, $"Une erreur est survenue lors de la récupération des données pour la game avec l'identifiant {id}"); + return StatusCode(500, new ApiResponse($"Une erreur est survenue lors de la récupération des données : {ex.Message}")); } } @@ -60,137 +59,132 @@ namespace ApiLeapHit.Controllers { try { + _logger.LogInformation("Récupération de toutes les games."); + var games = await _dataManager.GetGames(); if (games == null) { - return NotFound(new ApiResponse>("Aucune game n'ont été trouvées.")); + var message = "Aucune game n'a été trouvée."; + _logger.LogWarning(message); + return NotFound(new ApiResponse(message)); } - //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 || 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; - //} + //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(winner, loser)); } - //if (errorMessage.Length > 0) - //{ - // return NotFound(errorMessage.ToString()); - //} - return Ok(new ApiResponse>("La récupération des games à réussit." , dtoGames)); + _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) { - return StatusCode(500, new ApiResponse("Une erreur est survenue lors de la récupération des données : " + ex.Message)); + 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) { - try { + try + { var games = await _dataManager.GetGameById(id); + if (games == null || games.Count == 0) { - return NotFound(new ApiResponse>("Aucune game trouvé pour le joueur avec l'id : " + id)); + var message = $"Aucune game trouvée pour le joueur avec l'id {id}."; + _logger.LogInformation(message); + return NotFound(new ApiResponse(message)); } - //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)); + var successMessage = $"Récupération réussie des games pour le joueur avec l'id {id}."; + _logger.LogInformation(successMessage); + return Ok(new ApiResponse>(successMessage, dtoGames)); } catch (Exception ex) { - return StatusCode(500, new ApiResponse("Une erreur est survenue lors de la récupération des données : " + ex.Message)); + var errorMessage = $"Une erreur est survenue lors de la récupération des games pour le joueur avec l'id {id}."; + _logger.LogError(errorMessage + " Error message: " + ex.Message); + return StatusCode(500, new ApiResponse(errorMessage)); } } [HttpPost] public async Task AddGame([FromBody] DTOGameWithIdPlayer dtoGame) { - try { + 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()); - //} - - //if (loser == null) + //if (winner == null || 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 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(winner, loser); - return Ok(new ApiResponse("La game a été ajoutée avec succès.", game)); + 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) { - return StatusCode(500, new ApiResponse("Une erreur est survenue lors de la récupération des données : " + ex.Message)); + var errorMessage = "Une erreur est survenue lors de l'ajout de la partie : " + ex.Message; + _logger.LogError(errorMessage); + return StatusCode(500, new ApiResponse(errorMessage)); } } - [HttpDelete("{id}")] + [HttpDelete("{id}")] public async Task RemoveGame(int id) { - try { + 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.")); + var successMessage = $"La game avec l'identifiant {id} a été supprimée avec succès."; + _logger.LogInformation(successMessage); + return Ok(new ApiResponse(successMessage)); } - return NotFound(new ApiResponse("La game avec l'identifiant " + id + " n'existe pas.")); + + var notFoundMessage = $"La game avec l'identifiant {id} n'existe pas."; + _logger.LogInformation(notFoundMessage); + return NotFound(new ApiResponse(notFoundMessage)); } catch (Exception ex) { - return StatusCode(500, new ApiResponse("Une erreur est survenue lors de la récupération des données : " + ex.Message)); + var errorMessage = $"Une erreur est survenue lors de la suppression de la game avec l'identifiant {id} : {ex.Message}"; + _logger.LogError(errorMessage); + return StatusCode(500, new ApiResponse(errorMessage)); } } } diff --git a/code/server/ApiLeapHit/Controllers/MessageController.cs b/code/server/ApiLeapHit/Controllers/MessageController.cs index 218b3f6..abf4e31 100644 --- a/code/server/ApiLeapHit/Controllers/MessageController.cs +++ b/code/server/ApiLeapHit/Controllers/MessageController.cs @@ -1,6 +1,7 @@ using DataBase.DataManager; using DataBase.Entity; using DTO; +using DTO.Factory; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; @@ -10,68 +11,88 @@ namespace ApiLeapHit.Controllers [ApiController] public class MessageController : Controller { - private readonly DbDataManager _dataManager; + private readonly DbDataManager _dataManager; + private readonly ILogger _logger; - public MessageController(DbDataManager dataManager) + public MessageController(DbDataManager dataManager, ILogger logger) { _dataManager = dataManager; + _logger = logger; } - [HttpGet("{id}")] - public async Task> ReceiveMessage(int id) + [HttpPost] + public async Task SendMessage([FromBody] DTOMessage dtoMessage) { - var message = await _dataManager.ReceiveMessage(id); - if (message == null) + try { - return NotFound(); - } + var player = await _dataManager.GetPlayer(dtoMessage.PlayerId.playerId); + if (player == null) + { + _logger.LogWarning($"Le joueur avec l'identifiant {dtoMessage.PlayerId.playerId} n'existe pas."); + return NotFound(new ApiResponse($"Le joueur avec l'identifiant {dtoMessage.PlayerId.playerId} n'existe pas.")); + } - var player = await _dataManager.GetPlayer(message.player); + var message = new Message + { + messageId = dtoMessage.messageId, + message = dtoMessage.message, + timestamp = dtoMessage.timestamp, + player = player.playerId + }; + await _dataManager.SendMessage(message); - var dtoMessage = new DTOMessage + _logger.LogInformation($"Le message avec l'identifiant {message.messageId} a été envoyé avec succès."); + return Ok(new ApiResponse($"Le message avec l'identifiant {message.messageId} a été envoyé avec succès.")); + } + catch (Exception ex) { - messageId = message.messageId, - message = message.message, - timestamp = message.timestamp, - PlayerId = new DTOPlayer - { - playerId = player.playerId, - name = player.name, - nbBallTouchTotal = player.nbBallTouchTotal, - timePlayed = player.timePlayed - } - }; - return Ok(dtoMessage); + _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}")); + } } - [HttpPost] - public async Task SendMessage([FromBody] DTOMessage dtoMessage) + [HttpDelete("{id}")] + public async Task RemoveMessage(int id) { - var player = await _dataManager.GetPlayer(dtoMessage.PlayerId.playerId); - - var message = new Message + try { - messageId = dtoMessage.messageId, - message = dtoMessage.message, - timestamp = dtoMessage.timestamp, - player = player.playerId - }; - - await _dataManager.SendMessage(message); - return Ok(); + 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}")); + } } - [HttpDelete("{id}")] - public async Task RemoveMessage(int id) + [HttpGet("{id}")] + public async Task> ReceiveMessage(int id) { - var result = await _dataManager.RemoveMessage(id); - if (result) + var message = await _dataManager.ReceiveMessage(id); + if (message == null) { - return Ok(result); + return NotFound(); } - return NotFound(result); + + var player = await _dataManager.GetPlayer(message.player); + var chat = await _dataManager.GetChat(message.chat); + + + + return Ok(message); } + } } diff --git a/code/server/ApiLeapHit/Controllers/PlayerController.cs b/code/server/ApiLeapHit/Controllers/PlayerController.cs index 8b46504..346902b 100644 --- a/code/server/ApiLeapHit/Controllers/PlayerController.cs +++ b/code/server/ApiLeapHit/Controllers/PlayerController.cs @@ -1,6 +1,8 @@ -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.Net; @@ -12,46 +14,132 @@ namespace ApiLeapHit.Controllers public class PlayerController : ControllerBase { private readonly DbDataManager _dataManager; + private readonly ILogger _logger; - public PlayerController(DbDataManager dataManager) + public PlayerController(DbDataManager dataManager, ILogger logger) { _dataManager = dataManager; + _logger = logger; } + [HttpGet("{id}")] public async Task> GetPlayer(int id) { - var player = await _dataManager.GetPlayer(id); - if (player == null) + try { - return NotFound(); - } + 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" + )); - var dtoPlayer = new DTOPlayer + return Ok(response); + } + catch (Exception ex) { - playerId = player.playerId, - name = player.name, - nbBallTouchTotal = player.nbBallTouchTotal, - timePlayed = player.timePlayed, - - }; - return Ok(dtoPlayer); + _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) { - - var player = new Player + 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" + )); + + 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.")); + } + } + + [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) { - playerId = dtoPlayer.playerId, - name = dtoPlayer.name, - nbBallTouchTotal = dtoPlayer.nbBallTouchTotal, - timePlayed = dtoPlayer.timePlayed, - }; - - await _dataManager.AddPlayer(player); - return Ok(); + _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}")] @@ -62,39 +150,66 @@ namespace ApiLeapHit.Controllers var result = await _dataManager.RemovePlayer(id); if (result) { - return Ok(); + // 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(); + return NotFound(new ApiResponse("Joueur non trouvé.")); } catch (Exception ex) { - return StatusCode((int)HttpStatusCode.InternalServerError); + _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) - { - if (!ModelState.IsValid) - return StatusCode((int)HttpStatusCode.BadRequest); //"Les données du player ne sont pas correctes" + { + 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); - Player playerTeste = await _dataManager.GetPlayer(id); - if (playerTeste != null) - return StatusCode((int)HttpStatusCode.NotFound); //"Le player n'existe pas." + // 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" + )); - var player = new Player + + return Ok(response); + } + catch (Exception ex) { - playerId = dtoPlayer.playerId, - name = dtoPlayer.name, - nbBallTouchTotal = dtoPlayer.nbBallTouchTotal, - timePlayed = dtoPlayer.timePlayed, - }; - - Player playerUpdate = await _dataManager.GetPlayer(id); - await _dataManager.UpdatePlayer(id,player.name); - return StatusCode((int)HttpStatusCode.OK); //"Le champion a été modifié." - } + _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/ChatMapper.cs b/code/server/ApiLeapHit/Mapper/ChatMapper.cs new file mode 100644 index 0000000..ced8900 --- /dev/null +++ b/code/server/ApiLeapHit/Mapper/ChatMapper.cs @@ -0,0 +1,29 @@ +using DataBase.Entity; +using DTO; + +namespace ApiLeapHit.Mapper +{ + public static class ChatMapper + { + public static DTOChat ToDto(this Chat chat, Player player1, Player player2) + { + DTOChat dtoChat = new DTOChat() + { + chatId = chat.chatId, + PlayerId1 = player1.ToDto(), + PlayerId2 = player2.ToDto() + }; + return dtoChat; + } + + public static Chat ToChat(this DTOChat dtoChat, Player player1, Player player2) + { + return new Chat + { + chatId = dtoChat.chatId, + player1 = player1.playerId, + player2 = player2.playerId + }; + } + } +} diff --git a/code/server/ApiLeapHit/Mapper/MessageMapper.cs b/code/server/ApiLeapHit/Mapper/MessageMapper.cs new file mode 100644 index 0000000..573f1a4 --- /dev/null +++ b/code/server/ApiLeapHit/Mapper/MessageMapper.cs @@ -0,0 +1,21 @@ +using DataBase.Entity; +using DTO; + +namespace ApiLeapHit.Mapper +{ + public static class MessageMapper + { + public static DTOMessage ToDto(this Message message, Player player, Chat chat) + { + DTOMessage dtoMessage = new DTOMessage() + { + messageId = message.messageId, + message = message.message, + timestamp = message.timestamp, + PlayerId = player.ToDto(), + //ChatId = chat.ToDto() + }; + return dtoMessage; + } + } +} diff --git a/code/server/ApiLeapHit/Mapper/PlayerMapper.cs b/code/server/ApiLeapHit/Mapper/PlayerMapper.cs index b828e76..b8d2d07 100644 --- a/code/server/ApiLeapHit/Mapper/PlayerMapper.cs +++ b/code/server/ApiLeapHit/Mapper/PlayerMapper.cs @@ -16,5 +16,16 @@ namespace ApiLeapHit.Mapper }; return dtoPlayer; } + + public static Player ToPlayer(this DTOPlayer dtoPlayer) + { + return new Player + { + playerId = dtoPlayer.playerId, + name = dtoPlayer.name, + nbBallTouchTotal = dtoPlayer.nbBallTouchTotal, + timePlayed = dtoPlayer.timePlayed + }; + } } } diff --git a/code/server/DTO/Factory/ApiLink.cs b/code/server/DTO/Factory/ApiLink.cs new file mode 100644 index 0000000..c9ea3ec --- /dev/null +++ b/code/server/DTO/Factory/ApiLink.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DTO.Factory +{ + public class ApiLink + { + public string Href { get; set; } + public string Rel { get; set; } + public string Method { get; set; } + + public ApiLink(string href, string rel, string method) + { + Href = href; + Rel = rel; + Method = method; + } + } +} diff --git a/code/server/DTO/Factory/ApiResponse.cs b/code/server/DTO/Factory/ApiResponse.cs index e6db510..1cf32a6 100644 --- a/code/server/DTO/Factory/ApiResponse.cs +++ b/code/server/DTO/Factory/ApiResponse.cs @@ -10,6 +10,8 @@ namespace DTO.Factory { public string Message { get; set; } public T Data { get; set; } + public List Links { get; set; } = new List(); + public ApiResponse(string message, T data = default) { diff --git a/code/server/DataBase/DataManager/DbDataManager.Chat.cs b/code/server/DataBase/DataManager/DbDataManager.Chat.cs index bb38ac7..b15c133 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Chat.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Chat.cs @@ -42,7 +42,32 @@ namespace DataBase.DataManager return Task.FromResult(chats); } } + public Task GetChat(int id) + { + using (var context = new PongDbContext()) + { + var chat = context.Chats.Where(g => g.chatId == id).ToList().FirstOrDefault(); + return Task.FromResult(chat); + } + } + + public Task> GetChatsByIdPlayer(int id) + { + using (var context = new PongDbContext()) + { + var chats = context.Chats.Where(g => g.player1 == id || g.player2 == id).ToList(); + return Task.FromResult(chats); + } + } + public Task> GetChatsByIdPlayers(int idPlayer1, int idPlayer2) + { + using (var context = new PongDbContext()) + { + var chats = context.Chats.Where(g => (g.player1 == idPlayer1 && g.player2 == idPlayer2) || (g.player1 == idPlayer2 && g.player2 == idPlayer1)).ToList(); + return Task.FromResult(chats); + } + } } } diff --git a/code/server/DataBase/DataManager/DbDataManager.Player.cs b/code/server/DataBase/DataManager/DbDataManager.Player.cs index 44919b2..6ed56a6 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Player.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Player.cs @@ -58,5 +58,14 @@ namespace DataBase.DataManager return Task.FromResult(player); } } + + public Task> GetPlayers() + { + using (var context = new PongDbContext()) + { + var players = context.Players.ToList(); + return Task.FromResult(players); + } + } } } diff --git a/code/server/DataBase/PongDB.db b/code/server/DataBase/PongDB.db index 3905c29bfea6fa6cd337514c2e01aa02d655ab00..4d4ba40eb910847a1642f69fec79694513408cb6 100644 GIT binary patch delta 204 zcmW-aF$%&!6h!~eZg#UVGD&4)VWpjT11})xHLL`^KyD!7MT9+osVxLc16Cp^DuN&( zXyGQ!n_}KDX(rN4Y@&gOqfI({n5Y#5quG4Au$SQ-tk;KezbTqT#3%_R-Zn|EXp=VV z`7Fsr)k@@q4<0xpw@JK1Lu*Ar;A*YxW!8@%I)M&v8)tV+0wO6jDPd@!j6&dpCkk9_ zoE#CDAaKlAwp`D~^mST=ZK|XvZND+&kWmZt&Z$wk$1A3u)SBI{8j=;0kt6raXas&} S(ctBpH~3mBHl%EOFv%Zl5ip_v From 5f4c1b9be9cfcf633a7dbb00f53366b71c0c2075 Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Mon, 27 Feb 2023 07:06:03 +0100 Subject: [PATCH 08/11] :hammer: Modification de MessageController --- .../Controllers/MessageController.cs | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/code/server/ApiLeapHit/Controllers/MessageController.cs b/code/server/ApiLeapHit/Controllers/MessageController.cs index abf4e31..cdbecf8 100644 --- a/code/server/ApiLeapHit/Controllers/MessageController.cs +++ b/code/server/ApiLeapHit/Controllers/MessageController.cs @@ -4,6 +4,7 @@ using DTO; using DTO.Factory; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using System.Net; namespace ApiLeapHit.Controllers { @@ -80,18 +81,24 @@ namespace ApiLeapHit.Controllers [HttpGet("{id}")] public async Task> ReceiveMessage(int id) { - var message = await _dataManager.ReceiveMessage(id); - if (message == null) + try { - return NotFound(); - } - - var player = await _dataManager.GetPlayer(message.player); - var chat = await _dataManager.GetChat(message.chat); - + var message = await _dataManager.ReceiveMessage(id); + if (message == null) + { + _logger.LogWarning($"Message with id {id} not found."); + return NotFound(new ApiResponse("Le message n'a pas été trouvé.")); + } - return Ok(message); + _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)); + } + 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.")); + } } } From d525ddc8d6397c50f1ec5b8da0cd5bcd1113fb23 Mon Sep 17 00:00:00 2001 From: Noan07 <84435602+Noan07@users.noreply.github.com> Date: Mon, 27 Feb 2023 07:23:48 +0100 Subject: [PATCH 09/11] :hammer: Ajout de getAll dans MessageController --- .../Controllers/MessageController.cs | 27 ++++++++++++++++-- .../DataManager/DbDataManager.Message.cs | 2 +- code/server/DataBase/PongDB.db-shm | Bin 0 -> 32768 bytes code/server/DataBase/PongDB.db-wal | 0 4 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 code/server/DataBase/PongDB.db-shm create mode 100644 code/server/DataBase/PongDB.db-wal diff --git a/code/server/ApiLeapHit/Controllers/MessageController.cs b/code/server/ApiLeapHit/Controllers/MessageController.cs index cdbecf8..683c1e6 100644 --- a/code/server/ApiLeapHit/Controllers/MessageController.cs +++ b/code/server/ApiLeapHit/Controllers/MessageController.cs @@ -87,7 +87,7 @@ namespace ApiLeapHit.Controllers if (message == null) { - _logger.LogWarning($"Message with id {id} not found."); + _logger.LogWarning($"Aucun message avec l'idée {id} n'a été trouvé."); return NotFound(new ApiResponse("Le message n'a pas été trouvé.")); } @@ -97,7 +97,30 @@ namespace ApiLeapHit.Controllers 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.")); + 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 message = await _dataManager.ReceiveAllMessages(); + + if (message == null || message.Count() == 0) + { + _logger.LogWarning($"Aucun message n'a été trouvé."); + return NotFound(new ApiResponse("Aucun message n'a pas été trouvé.")); + } + + _logger.LogInformation($"Les messages ont été reçus avec succès."); + return Ok(new ApiResponse>("Messages reçus avec succès.", message)); + } + 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/DataBase/DataManager/DbDataManager.Message.cs b/code/server/DataBase/DataManager/DbDataManager.Message.cs index b0ba7a7..ef18a47 100644 --- a/code/server/DataBase/DataManager/DbDataManager.Message.cs +++ b/code/server/DataBase/DataManager/DbDataManager.Message.cs @@ -44,7 +44,7 @@ namespace DataBase.DataManager } } - public Task> GetMessages() + public Task> ReceiveAllMessages() { using (var context = new PongDbContext()) { diff --git a/code/server/DataBase/PongDB.db-shm b/code/server/DataBase/PongDB.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3 Date: Mon, 27 Feb 2023 15:38:36 +0100 Subject: [PATCH 10/11] =?UTF-8?q?:hammer:=20modification=20des=20dto=20et?= =?UTF-8?q?=20autres=20classes=20en=20cons=C3=A9quences?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApiLeapHit/Controllers/ChatController.cs | 31 +++++++--------- .../ApiLeapHit/Controllers/GameController.cs | 19 +++++----- .../Controllers/MessageController.cs | 33 ++++++++---------- code/server/ApiLeapHit/Mapper/ChatMapper.cs | 12 +++---- code/server/ApiLeapHit/Mapper/GameMapper.cs | 12 +++---- .../server/ApiLeapHit/Mapper/MessageMapper.cs | 19 ++++++++-- code/server/DTO/DTOChat.cs | 4 +-- code/server/DTO/DTOGame.cs | 4 +-- code/server/DTO/DTOMessage.cs | 4 +-- code/server/DataBase/PongDB.db-shm | Bin 32768 -> 0 bytes code/server/DataBase/PongDB.db-wal | 0 11 files changed, 72 insertions(+), 66 deletions(-) delete mode 100644 code/server/DataBase/PongDB.db-shm delete mode 100644 code/server/DataBase/PongDB.db-wal diff --git a/code/server/ApiLeapHit/Controllers/ChatController.cs b/code/server/ApiLeapHit/Controllers/ChatController.cs index 8ed49ba..3bc0b15 100644 --- a/code/server/ApiLeapHit/Controllers/ChatController.cs +++ b/code/server/ApiLeapHit/Controllers/ChatController.cs @@ -27,10 +27,10 @@ namespace ApiLeapHit.Controllers { try { - var player1 = await _dataManager.GetPlayer(dtoChat.PlayerId1.playerId); - var player2 = await _dataManager.GetPlayer(dtoChat.PlayerId2.playerId); + var player1 = await _dataManager.GetPlayer(dtoChat.PlayerId1); + var player2 = await _dataManager.GetPlayer(dtoChat.PlayerId2); - await _dataManager.AddChat(dtoChat.ToChat(player1, player2)); + 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); @@ -60,10 +60,10 @@ namespace ApiLeapHit.Controllers var dtoChats = new List(); foreach (var chat in chats) { - var player1 = await _dataManager.GetPlayer(chat.player1); - var player2 = await _dataManager.GetPlayer(chat.player2); + //var player1 = await _dataManager.GetPlayer(chat.player1); + //var player2 = await _dataManager.GetPlayer(chat.player2); - var dtoChat = chat.ToDto(player1, player2); + var dtoChat = chat.ToDto(); dtoChats.Add(dtoChat); } @@ -93,10 +93,10 @@ namespace ApiLeapHit.Controllers return NotFound(new ApiResponse(message)); } - var player1 = await _dataManager.GetPlayer(chat.player1); - var player2 = await _dataManager.GetPlayer(chat.player2); + //var player1 = await _dataManager.GetPlayer(chat.player1); + //var player2 = await _dataManager.GetPlayer(chat.player2); - var dtoChat = chat.ToDto(player1, 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); @@ -126,12 +126,7 @@ namespace ApiLeapHit.Controllers 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(player1, player2); - - dtoChats.Add(dtoChat); + dtoChats.Add(chat.ToDto()); } var success_message = $"La récupération des chats a réussi pour l'id : {id}. Nombre de chats : {dtoChats.Count}"; @@ -162,10 +157,10 @@ namespace ApiLeapHit.Controllers var dtoChats = new List(); foreach (var chat in chats) { - var player1 = await _dataManager.GetPlayer(chat.player1); - var player2 = await _dataManager.GetPlayer(chat.player2); + //var player1 = await _dataManager.GetPlayer(chat.player1); + //var player2 = await _dataManager.GetPlayer(chat.player2); - dtoChats.Add(chat.ToDto(player1, player2)); + dtoChats.Add(chat.ToDto()); } var success_message = $"La récupération des chats a réussi pour les joueurs {idPlayer1} et {idPlayer2}. Nombre de chats : {dtoChats.Count}"; diff --git a/code/server/ApiLeapHit/Controllers/GameController.cs b/code/server/ApiLeapHit/Controllers/GameController.cs index 306d809..9dc5947 100644 --- a/code/server/ApiLeapHit/Controllers/GameController.cs +++ b/code/server/ApiLeapHit/Controllers/GameController.cs @@ -40,12 +40,9 @@ namespace ApiLeapHit.Controllers return NotFound(new ApiResponse(message)); } - var winner = await _dataManager.GetPlayer(game.winner); - var loser = await _dataManager.GetPlayer(game.loser); - _logger.LogInformation("Récupération des joueurs pour la game avec l'identifiant {id}", id); - return Ok(new ApiResponse("Récupération de la game réussie.", game.ToDto(winner, loser))); + return Ok(new ApiResponse("Récupération de la game réussie.", game.ToDto())); } catch (Exception ex) { @@ -83,7 +80,7 @@ namespace ApiLeapHit.Controllers continue; } - dtoGames.Add(game.ToDto(winner, loser)); + dtoGames.Add(game.ToDto()); } _logger.LogInformation("{Count} games ont été récupérées.", dtoGames.Count); @@ -118,7 +115,13 @@ namespace ApiLeapHit.Controllers var winner = await _dataManager.GetPlayer(game.winner); var loser = await _dataManager.GetPlayer(game.loser); - dtoGames.Add(game.ToDto(winner, 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()); } var successMessage = $"Récupération réussie des games pour le joueur avec l'id {id}."; @@ -134,7 +137,7 @@ namespace ApiLeapHit.Controllers } [HttpPost] - public async Task AddGame([FromBody] DTOGameWithIdPlayer dtoGame) + public async Task AddGame([FromBody] DTOGame dtoGame) { try { @@ -148,7 +151,7 @@ namespace ApiLeapHit.Controllers // return NotFound(new ApiResponse(errorMessage)); //} - var game = dtoGame.ToGame(winner, loser); + var game = dtoGame.ToGame(); await _dataManager.AddGame(game); var successMessage = "La partie avec l'identifiant " + game.gameId + " a été ajoutée avec succès."; diff --git a/code/server/ApiLeapHit/Controllers/MessageController.cs b/code/server/ApiLeapHit/Controllers/MessageController.cs index 683c1e6..097fe5b 100644 --- a/code/server/ApiLeapHit/Controllers/MessageController.cs +++ b/code/server/ApiLeapHit/Controllers/MessageController.cs @@ -1,4 +1,5 @@ -using DataBase.DataManager; +using ApiLeapHit.Mapper; +using DataBase.DataManager; using DataBase.Entity; using DTO; using DTO.Factory; @@ -27,25 +28,17 @@ namespace ApiLeapHit.Controllers { try { - var player = await _dataManager.GetPlayer(dtoMessage.PlayerId.playerId); + var player = await _dataManager.GetPlayer(dtoMessage.PlayerId); if (player == null) { - _logger.LogWarning($"Le joueur avec l'identifiant {dtoMessage.PlayerId.playerId} n'existe pas."); - return NotFound(new ApiResponse($"Le joueur avec l'identifiant {dtoMessage.PlayerId.playerId} n'existe pas.")); + _logger.LogWarning($"Le joueur avec l'identifiant {dtoMessage.PlayerId} n'existe pas."); + return NotFound(new ApiResponse($"Le joueur avec l'identifiant {dtoMessage.PlayerId} n'existe pas.")); } - var message = new Message - { - messageId = dtoMessage.messageId, - message = dtoMessage.message, - timestamp = dtoMessage.timestamp, - player = player.playerId - }; - - await _dataManager.SendMessage(message); + await _dataManager.SendMessage(dtoMessage.ToMessage()); - _logger.LogInformation($"Le message avec l'identifiant {message.messageId} a été envoyé avec succès."); - return Ok(new ApiResponse($"Le message avec l'identifiant {message.messageId} a été envoyé avec succès.")); + _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) { @@ -92,7 +85,7 @@ namespace ApiLeapHit.Controllers } _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)); + return Ok(new ApiResponse("Message reçu avec succès.", message.ToDto())); } catch (Exception ex) { @@ -106,16 +99,18 @@ namespace ApiLeapHit.Controllers { try { - var message = await _dataManager.ReceiveAllMessages(); + var messages = await _dataManager.ReceiveAllMessages(); - if (message == null || message.Count() == 0) + 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.", message)); + return Ok(new ApiResponse>("Messages reçus avec succès.", dtosMessages)); } catch (Exception ex) { diff --git a/code/server/ApiLeapHit/Mapper/ChatMapper.cs b/code/server/ApiLeapHit/Mapper/ChatMapper.cs index ced8900..220daa4 100644 --- a/code/server/ApiLeapHit/Mapper/ChatMapper.cs +++ b/code/server/ApiLeapHit/Mapper/ChatMapper.cs @@ -5,24 +5,24 @@ namespace ApiLeapHit.Mapper { public static class ChatMapper { - public static DTOChat ToDto(this Chat chat, Player player1, Player player2) + public static DTOChat ToDto(this Chat chat) { DTOChat dtoChat = new DTOChat() { chatId = chat.chatId, - PlayerId1 = player1.ToDto(), - PlayerId2 = player2.ToDto() + PlayerId1 = chat.player1, + PlayerId2 = chat.player2 }; return dtoChat; } - public static Chat ToChat(this DTOChat dtoChat, Player player1, Player player2) + public static Chat ToChat(this DTOChat dtoChat) { return new Chat { chatId = dtoChat.chatId, - player1 = player1.playerId, - player2 = player2.playerId + player1 = dtoChat.PlayerId1, + player2 = dtoChat.PlayerId2 }; } } diff --git a/code/server/ApiLeapHit/Mapper/GameMapper.cs b/code/server/ApiLeapHit/Mapper/GameMapper.cs index fe6f6db..fa7d34a 100644 --- a/code/server/ApiLeapHit/Mapper/GameMapper.cs +++ b/code/server/ApiLeapHit/Mapper/GameMapper.cs @@ -5,27 +5,27 @@ namespace ApiLeapHit.Mapper { public static class GameMapper { - public static DTOGame ToDto(this Game game, Player winner, Player loser) + public static DTOGame ToDto(this Game game) { DTOGame dtoGame = new DTOGame() { gameId = game.gameId, durationGame = game.durationGame, nbMaxEchanges = game.nbMaxEchanges, - playerWinner = winner.ToDto(), - playerLoser = loser.ToDto() + playerWinner = game.winner, + playerLoser = game.loser }; return dtoGame; } - public static Game ToGame(this DTOGame dtoGame, Player winner, Player loser) + public static Game ToGame(this DTOGame dtoGame) { return new Game { durationGame = dtoGame.durationGame, nbMaxEchanges = dtoGame.nbMaxEchanges, - winner = winner.playerId, - loser = loser.playerId + winner = dtoGame.playerWinner, + loser = dtoGame.playerLoser }; } } diff --git a/code/server/ApiLeapHit/Mapper/MessageMapper.cs b/code/server/ApiLeapHit/Mapper/MessageMapper.cs index 573f1a4..f354d04 100644 --- a/code/server/ApiLeapHit/Mapper/MessageMapper.cs +++ b/code/server/ApiLeapHit/Mapper/MessageMapper.cs @@ -5,17 +5,30 @@ namespace ApiLeapHit.Mapper { public static class MessageMapper { - public static DTOMessage ToDto(this Message message, Player player, Chat chat) + public static DTOMessage ToDto(this Message message) { DTOMessage dtoMessage = new DTOMessage() { messageId = message.messageId, message = message.message, timestamp = message.timestamp, - PlayerId = player.ToDto(), - //ChatId = chat.ToDto() + PlayerId = message.player, + ChatId = message.chat }; return dtoMessage; } + + public static Message ToMessage(this DTOMessage dtoMessage) + { + Message message = new Message() + { + messageId = dtoMessage.messageId, + message = dtoMessage.message, + timestamp = dtoMessage.timestamp, + player = dtoMessage.PlayerId, + chat = dtoMessage.ChatId + }; + return message; + } } } diff --git a/code/server/DTO/DTOChat.cs b/code/server/DTO/DTOChat.cs index e86896c..1765d3e 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 DTOPlayer PlayerId1 { get; set; } - public DTOPlayer PlayerId2 { get; set; } + public int PlayerId1 { get; set; } + public int PlayerId2 { get; set; } } } diff --git a/code/server/DTO/DTOGame.cs b/code/server/DTO/DTOGame.cs index 8e12a3f..ff430e8 100644 --- a/code/server/DTO/DTOGame.cs +++ b/code/server/DTO/DTOGame.cs @@ -11,7 +11,7 @@ namespace DTO public int gameId { get; set; } public int durationGame { get; set; } public int nbMaxEchanges { get; set; } - public DTOPlayer playerWinner { get; set; } - public DTOPlayer playerLoser { get; set; } + public int playerWinner { get; set; } + public int playerLoser { get; set; } } } diff --git a/code/server/DTO/DTOMessage.cs b/code/server/DTO/DTOMessage.cs index 47154c0..df21cde 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 DTOPlayer PlayerId { get; set; } - public DTOChat ChatId { get; set; } + public int PlayerId { get; set; } + public int ChatId { get; set; } } } diff --git a/code/server/DataBase/PongDB.db-shm b/code/server/DataBase/PongDB.db-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3 Date: Mon, 27 Feb 2023 16:22:09 +0100 Subject: [PATCH 11/11] :merge: --- code/server/DataBase/PongDB.db-shm | Bin 0 -> 32768 bytes code/server/DataBase/PongDB.db-wal | 0 code/server/Server.sln | 18 ++++++++---------- 3 files changed, 8 insertions(+), 10 deletions(-) create mode 100644 code/server/DataBase/PongDB.db-shm create mode 100644 code/server/DataBase/PongDB.db-wal diff --git a/code/server/DataBase/PongDB.db-shm b/code/server/DataBase/PongDB.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3