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