From 460d9fc1ba72553afe133d05360107341ee98d68 Mon Sep 17 00:00:00 2001 From: Maxence LANONE Date: Mon, 20 Mar 2023 17:04:18 +0100 Subject: [PATCH 1/5] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20'.drone.yml'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .drone.yml | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/.drone.yml b/.drone.yml index 9db81b1..1c17afa 100644 --- a/.drone.yml +++ b/.drone.yml @@ -47,19 +47,30 @@ steps: from_secret: SECRET_SONAR_LOGIN depends on: [tests] - # docker image build - - name: docker-build-and-push + # docker image build + - name: docker-build image: plugins/docker settings: - dockerfile: Dockerfile - context: WebApiLol + dockerfile: Sources/Trek12_API/Dockerfile + context: Sources/ registry: hub.codefirst.iut.uca.fr - repo: hub.codefirst.iut.uca.fr/maxence.lanone/EfCore_LoL_S4 + repo: hub.codefirst.iut.uca.fr/Trek_Prod/Trek12_API username: from_secret: SECRET_REGISTRY_USERNAME password: from_secret: SECRET_REGISTRY_PASSWORD + # container deployment + - name: deploy-container + image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest + environment: + IMAGENAME: hub.codefirst.iut.uca.fr/Trek_Prod/Trek12_API:latest + CONTAINERNAME: trek12api + COMMAND: create + OVERWRITE: true + ADMINS: maxencelanone, aurelienpintrand, theodupin, zakariyasaoula + depends_on: [ docker-build ] + volumes: - name: docs temp: {} From 49ec760eb18fc44ae54c55e7febc22ad7198da92 Mon Sep 17 00:00:00 2001 From: Maxence Lanone Date: Mon, 20 Mar 2023 17:06:15 +0100 Subject: [PATCH 2/5] :construction_worker: ajout dockerfile pour api --- Sources/.dockerignore | 25 ++++++++++++++++++ .../Tests/DbConsole/projet.Champions.db-shm | Bin 32768 -> 0 bytes .../Tests/DbConsole/projet.Champions.db-wal | 0 Sources/Trek12_API.sln | 6 +++++ Sources/Trek12_API/Dockerfile | 25 ++++++++++++++++++ Sources/Trek12_API/Trek12_API.csproj | 2 ++ Sources/docker-compose.dcproj | 18 +++++++++++++ Sources/docker-compose.override.yml | 13 +++++++++ Sources/docker-compose.yml | 8 ++++++ 9 files changed, 97 insertions(+) create mode 100644 Sources/.dockerignore delete mode 100644 Sources/Tests/DbConsole/projet.Champions.db-shm delete mode 100644 Sources/Tests/DbConsole/projet.Champions.db-wal create mode 100644 Sources/Trek12_API/Dockerfile create mode 100644 Sources/docker-compose.dcproj create mode 100644 Sources/docker-compose.override.yml create mode 100644 Sources/docker-compose.yml diff --git a/Sources/.dockerignore b/Sources/.dockerignore new file mode 100644 index 0000000..bdca33b --- /dev/null +++ b/Sources/.dockerignore @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/Sources/Tests/DbConsole/projet.Champions.db-shm b/Sources/Tests/DbConsole/projet.Champions.db-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3net6.0 enable enable + ../docker-compose.dcproj + 24549743-d6e0-4694-975a-beb4dc331de3 diff --git a/Sources/docker-compose.dcproj b/Sources/docker-compose.dcproj new file mode 100644 index 0000000..2e6fc8e --- /dev/null +++ b/Sources/docker-compose.dcproj @@ -0,0 +1,18 @@ + + + + 2.1 + Linux + {7DF17583-2166-4ABE-82EE-F63CEE2132C2} + True + {Scheme}://localhost:{ServicePort}/swagger + trek12_api + + + + docker-compose.yml + + + + + diff --git a/Sources/docker-compose.override.yml b/Sources/docker-compose.override.yml new file mode 100644 index 0000000..8584db8 --- /dev/null +++ b/Sources/docker-compose.override.yml @@ -0,0 +1,13 @@ +version: '3.4' + +services: + trek12_api: + environment: + - ASPNETCORE_ENVIRONMENT=Development + - ASPNETCORE_URLS=https://+:443;http://+:80 + ports: + - "80" + - "443" + volumes: + - ~/.aspnet/https:/root/.aspnet/https:ro + - ~/.microsoft/usersecrets:/root/.microsoft/usersecrets:ro \ No newline at end of file diff --git a/Sources/docker-compose.yml b/Sources/docker-compose.yml new file mode 100644 index 0000000..1ebd451 --- /dev/null +++ b/Sources/docker-compose.yml @@ -0,0 +1,8 @@ +version: '3.4' + +services: + trek12_api: + image: ${DOCKER_REGISTRY-}trek12api + build: + context: . + dockerfile: Trek12_API/Dockerfile From d65c6cf6236d92da9f20093c184a958431ba8c26 Mon Sep 17 00:00:00 2001 From: Aurelien PINTRAND Date: Mon, 20 Mar 2023 17:11:04 +0100 Subject: [PATCH 3/5] :hammer: un truc qui build --- Sources/Model/IDataManager.cs | 6 +++ Sources/Stub/Stub/StubData.Games.cs | 26 +++++++++++++ Sources/Stub/Stub/StubData.Players.cs | 2 + .../Trek12_API/Controllers/GameController.cs | 38 ++++++++++++++++++- .../Controllers/PlayerController.cs | 1 + 5 files changed, 71 insertions(+), 2 deletions(-) diff --git a/Sources/Model/IDataManager.cs b/Sources/Model/IDataManager.cs index e21281a..79aca84 100644 --- a/Sources/Model/IDataManager.cs +++ b/Sources/Model/IDataManager.cs @@ -33,7 +33,13 @@ namespace Model Task AddScoreToPlayer(int idGame, int idPlayer, int score); Task AddCaseValueToPlayer(int idGame, int idPlayer, int value, int index); Task AddTurn(Turn turn); + Task AddTime(TimeSpan time); + + // Task> GetItemsById(int id); + + + } public interface IGamesModeManager : IGenericDataManager diff --git a/Sources/Stub/Stub/StubData.Games.cs b/Sources/Stub/Stub/StubData.Games.cs index cfc33ea..30700fc 100644 --- a/Sources/Stub/Stub/StubData.Games.cs +++ b/Sources/Stub/Stub/StubData.Games.cs @@ -3,6 +3,7 @@ using Shared; using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; @@ -27,6 +28,11 @@ namespace Stub public GamesManager(StubData parent) => this.parent = parent; + private Func filterById = (game, id) => game.Id.Equals(id); + + + + public Task AddCaseValueToPlayer(int idGame, int idPlayer, int value, int index) { var game = parent.games.FirstOrDefault(g => g.Id == idGame); @@ -109,6 +115,26 @@ namespace Stub public Task UpdateItem(Game? oldItem, Game? newItem) => parent.games.UpdateItem(oldItem, newItem); + + /*public Task> GetItemsById(int idPlayer) + { + var Task<> + + foreach (var game in parent.games) + { + foreach (var player in game.Players) + { + if (player.Id == idPlayer) + { + + } + } + return false; + }*/ + + // return parent.games.GetItemsWithFilterAndOrdering(game => filterById(game, id), 0, 1); + } + } } diff --git a/Sources/Stub/Stub/StubData.Players.cs b/Sources/Stub/Stub/StubData.Players.cs index 3c95fa1..1f64bb4 100644 --- a/Sources/Stub/Stub/StubData.Players.cs +++ b/Sources/Stub/Stub/StubData.Players.cs @@ -47,6 +47,8 @@ namespace Stub private Func filterById = (player, id) => player.Id.Equals(id); + + public Task> GetItemsByPseudo(string charPseudo) => parent.players.GetItemsWithFilterAndOrdering(player => filterByPseudo(player, charPseudo), 0, parent.players.Count()); diff --git a/Sources/Trek12_API/Controllers/GameController.cs b/Sources/Trek12_API/Controllers/GameController.cs index b014b88..438e1ce 100644 --- a/Sources/Trek12_API/Controllers/GameController.cs +++ b/Sources/Trek12_API/Controllers/GameController.cs @@ -17,9 +17,43 @@ namespace Trek12_API.Controllers } [HttpGet("/AllGames")] - public async Task Get() + public async Task GetAllGames() { - var list = await gamesManager + try + { + var list = await gamesManager.GetItems(0, gamesManager.GetNbItems().Result, null, false); + if (list == null) return NotFound("Pas de parties trouvées"); + return Ok(list); + } + catch(Exception ex) + { + return BadRequest(ex.Message); + } } + +/* [HttpGet("/GameById")] + public async Task GetGameById(int id) + { + try + { + var game = await gamesManager.GetItemsById(id); + if (game == null) return NotFound("Pas de parties trouvées"); + return Ok(game.FirstOrDefault()); + } + catch(Exception ex) + { + return BadRequest(ex.Message); + } + }*/ + + /* + [HttpGet("/GameByPlayer")] + public async Task GetGamesByPlayer() + { + try + { + var games = await gamesManager.GetItems(0, gamesManager) + } + }*/ } } diff --git a/Sources/Trek12_API/Controllers/PlayerController.cs b/Sources/Trek12_API/Controllers/PlayerController.cs index 6f98d27..4b429ac 100644 --- a/Sources/Trek12_API/Controllers/PlayerController.cs +++ b/Sources/Trek12_API/Controllers/PlayerController.cs @@ -50,6 +50,7 @@ namespace Trek12_API.Controllers public async Task GetById([FromRoute] int id) { var player = await playersManager.GetItemsById(id); + if (player == null) return NotFound("Joueur non trouvé"); return Ok(player?.toDTOs()); } From 14084d1201909b2b46282e03ed9b081a2666eb1e Mon Sep 17 00:00:00 2001 From: Maxence LANONE Date: Mon, 20 Mar 2023 17:19:56 +0100 Subject: [PATCH 4/5] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20'.drone.yml'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 1c17afa..d445b9b 100644 --- a/.drone.yml +++ b/.drone.yml @@ -6,7 +6,7 @@ trigger: event: - push - + steps: - name: build image: mcr.microsoft.com/dotnet/sdk:6.0 From 20e578f7bc44029a779432af4825c3c97fe2bc6f Mon Sep 17 00:00:00 2001 From: Aurelien PINTRAND Date: Mon, 20 Mar 2023 18:00:00 +0100 Subject: [PATCH 5/5] :hammer: maj gameController, DTOs et Converter --- Sources/Model/Game.cs | 2 +- Sources/Stub/Stub/StubData.Games.cs | 21 ++------- .../Trek12_API/Controllers/GameController.cs | 34 ++++++++++---- Sources/Trek12_API/Converter/GameConverter.cs | 45 ++++++++++++++++++- Sources/Trek12_API/DTO/GameDTO.cs | 9 ++-- 5 files changed, 79 insertions(+), 32 deletions(-) diff --git a/Sources/Model/Game.cs b/Sources/Model/Game.cs index 54f7029..c80dd9f 100644 --- a/Sources/Model/Game.cs +++ b/Sources/Model/Game.cs @@ -42,7 +42,7 @@ namespace Model // Id = id; //} - public Game(DateOnly date, Player owner, GameMode gameMode, int id = 0) + public Game(DateOnly date, Player ?owner, GameMode gameMode, int id = 0) { Date = date; Players = new ReadOnlyCollection(players); diff --git a/Sources/Stub/Stub/StubData.Games.cs b/Sources/Stub/Stub/StubData.Games.cs index 30700fc..526fb83 100644 --- a/Sources/Stub/Stub/StubData.Games.cs +++ b/Sources/Stub/Stub/StubData.Games.cs @@ -104,7 +104,7 @@ namespace Stub public Task DeleteItem(Game? item) => parent.games.DeleteItem(item); - public Task> GetItems(int index, int count, string? orderingPropertyName, bool descending) + public Task> GetItems(int index, int count, string? orderingPropertyName, bool descending = false) => parent.games.GetItemsWithFilterAndOrdering( g => true, index, count, @@ -116,23 +116,10 @@ namespace Stub public Task UpdateItem(Game? oldItem, Game? newItem) => parent.games.UpdateItem(oldItem, newItem); - /*public Task> GetItemsById(int idPlayer) + public Task> GetItemsById(int id) { - var Task<> - - foreach (var game in parent.games) - { - foreach (var player in game.Players) - { - if (player.Id == idPlayer) - { - - } - } - return false; - }*/ - - // return parent.games.GetItemsWithFilterAndOrdering(game => filterById(game, id), 0, 1); + return parent.games.GetItemsWithFilterAndOrdering(game => filterById(game, id), 0, 1); + } } diff --git a/Sources/Trek12_API/Controllers/GameController.cs b/Sources/Trek12_API/Controllers/GameController.cs index 438e1ce..b7961d9 100644 --- a/Sources/Trek12_API/Controllers/GameController.cs +++ b/Sources/Trek12_API/Controllers/GameController.cs @@ -1,5 +1,8 @@ using Microsoft.AspNetCore.Mvc; +using Model; using Stub; +using Trek12_API.DTO; +using static Stub.StubData; namespace Trek12_API.Controllers { @@ -31,8 +34,8 @@ namespace Trek12_API.Controllers } } -/* [HttpGet("/GameById")] - public async Task GetGameById(int id) + [HttpGet("/GameById/{id}")] + public async Task GetGameById([FromRoute] int id) { try { @@ -44,16 +47,29 @@ namespace Trek12_API.Controllers { return BadRequest(ex.Message); } - }*/ - - /* - [HttpGet("/GameByPlayer")] - public async Task GetGamesByPlayer() + } + [HttpDelete (Name = "DeleteGameById")] + public async Task DeleteGame(int idGame) { - try + var gameToDelete = await gamesManager.GetItemsById(idGame); + if (gameToDelete == null) { - var games = await gamesManager.GetItems(0, gamesManager) + return NotFound("Partie non trouvée"); } + + if (!await gamesManager.DeleteItem(gameToDelete.SingleOrDefault(game => game.Id == idGame))) + { + return BadRequest("Erreur lors de la suppression de la partie"); + } + + return Ok("Partie bien supprimée"); + } + +/* [HttpPut(Name = "UpdateGameById")] + public async Task Update(int id, GameDTO newGame) + { + await gamesManager.UpdateItem(gamesManager.GetItemsById(id).Result.FirstOrDefault(), newGame.toModel()); + return Ok(newPlayer); }*/ } } diff --git a/Sources/Trek12_API/Converter/GameConverter.cs b/Sources/Trek12_API/Converter/GameConverter.cs index b8d65c1..bca6e14 100644 --- a/Sources/Trek12_API/Converter/GameConverter.cs +++ b/Sources/Trek12_API/Converter/GameConverter.cs @@ -8,7 +8,7 @@ namespace Trek12_API.Converter { public static GameDTO toDTO(this Game game) { - var gameDTO = new GameDTO(game.Id, game.Date, game.Players.toDTOs().First(), game.GameMode.toDTO()); + var gameDTO = new GameDTO(); gameDTO.Duration = game.Duration; gameDTO.Date = game.Date; gameDTO.Turns = new List(); @@ -26,7 +26,50 @@ namespace Trek12_API.Converter { gameDTO.Scores.Add(score.Key.toDTO(), score.Value); } + gameDTO.Players = new List(); + foreach ( var player in game.Players) + { + gameDTO.Players.Add(player.toDTO()); + } + gameDTO.GameMode = new GamemodeDTO() { + Id = game.GameMode.Id, + Name = game.GameMode.Name + }; return gameDTO; } + + /*public static Game toModel(this GameDTO gameDTO) + { + { + var game = new Game(); + game.Duration = gameDTO.Duration; + game.Date = gameDTO.Date; + game.Turns = new List(); + foreach (var turn in game.Turns) + { + gameDTO.Turns.Add(turn.toDTO()); + } + gameDTO.Grilles = new Dictionary(); + foreach (var grille in game.Grilles) + { + gameDTO.Grilles.Add(grille.Key.toDTO(), grille.Value.toDTO()); + } + gameDTO.Scores = new Dictionary(); + foreach (var score in game.Scores) + { + gameDTO.Scores.Add(score.Key.toDTO(), score.Value); + } + gameDTO.Players = new List(); + foreach (var player in game.Players) + { + gameDTO.Players.Add(player.toDTO()); + } + gameDTO.GameMode = new GamemodeDTO() + { + Id = game.GameMode.Id, + Name = game.GameMode.Name + }; + return gameDTO; + }*/ } } diff --git a/Sources/Trek12_API/DTO/GameDTO.cs b/Sources/Trek12_API/DTO/GameDTO.cs index 10a4997..a00d37a 100644 --- a/Sources/Trek12_API/DTO/GameDTO.cs +++ b/Sources/Trek12_API/DTO/GameDTO.cs @@ -11,12 +11,13 @@ namespace Trek12_API.DTO public List Turns { get; set; } public Dictionary Grilles { get; set; } public Dictionary Scores { get; set; } + public List Players { get; set; } public GamemodeDTO GameMode { get; set; } - public PlayerDTO Player { get; set; } - public GameDTO(int id, DateOnly date, PlayerDTO owner, GamemodeDTO gameMode) +/* public GameDTO(int id, DateOnly date, PlayerDTO owner, GamemodeDTO gameMode) { Date = date; + Players = new List(); Grilles = new Dictionary(); Scores = new Dictionary(); Turns = new List(); @@ -24,7 +25,7 @@ namespace Trek12_API.DTO Scores.Add(owner, 0); GameMode = gameMode; Id = id; - Player = owner; - } + Players.Add(owner); + }*/ } }