Mise en place de toutes les tables dont on a besoin pour Trek12 en EF et début des tests sur ces tables dans la DbConsole
continuous-integration/drone/push Build is failing Details

EF
Théo DUPIN 2 years ago
commit 7605976586

@ -6,7 +6,7 @@ trigger:
event:
- push
steps:
- name: build
image: mcr.microsoft.com/dotnet/sdk:6.0
@ -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: {}

@ -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

@ -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<Player>(players);

@ -33,7 +33,13 @@ namespace Model
Task<bool> AddScoreToPlayer(int idGame, int idPlayer, int score);
Task<bool> AddCaseValueToPlayer(int idGame, int idPlayer, int value, int index);
Task<bool> AddTurn(Turn turn);
Task<bool> AddTime(TimeSpan time);
// Task<IEnumerable<Game?>> GetItemsById(int id);
}
public interface IGamesModeManager : IGenericDataManager<GameMode?>

@ -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<Game, int, bool> filterById = (game, id) => game.Id.Equals(id);
public Task<bool> AddCaseValueToPlayer(int idGame, int idPlayer, int value, int index)
{
var game = parent.games.FirstOrDefault(g => g.Id == idGame);
@ -98,7 +104,7 @@ namespace Stub
public Task<bool> DeleteItem(Game? item)
=> parent.games.DeleteItem(item);
public Task<IEnumerable<Game?>> GetItems(int index, int count, string? orderingPropertyName, bool descending)
public Task<IEnumerable<Game?>> GetItems(int index, int count, string? orderingPropertyName, bool descending = false)
=> parent.games.GetItemsWithFilterAndOrdering(
g => true,
index, count,
@ -109,6 +115,13 @@ namespace Stub
public Task<Game?> UpdateItem(Game? oldItem, Game? newItem)
=> parent.games.UpdateItem(oldItem, newItem);
public Task<IEnumerable<Game?>> GetItemsById(int id)
{
return parent.games.GetItemsWithFilterAndOrdering<Game>(game => filterById(game, id), 0, 1);
}
}
}
}

@ -47,6 +47,8 @@ namespace Stub
private Func<Player, int, bool> filterById = (player, id) => player.Id.Equals(id);
public Task<IEnumerable<Player?>> GetItemsByPseudo(string charPseudo)
=> parent.players.GetItemsWithFilterAndOrdering<Player>(player => filterByPseudo(player, charPseudo), 0, parent.players.Count());

@ -21,6 +21,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stub", "Stub\Stub\Stub.cspr
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared", "Shared\Shared.csproj", "{8B6EC777-57F8-4509-9163-4312A40FE63C}"
EndProject
Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{7DF17583-2166-4ABE-82EE-F63CEE2132C2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -55,6 +57,10 @@ Global
{8B6EC777-57F8-4509-9163-4312A40FE63C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8B6EC777-57F8-4509-9163-4312A40FE63C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8B6EC777-57F8-4509-9163-4312A40FE63C}.Release|Any CPU.Build.0 = Release|Any CPU
{7DF17583-2166-4ABE-82EE-F63CEE2132C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7DF17583-2166-4ABE-82EE-F63CEE2132C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7DF17583-2166-4ABE-82EE-F63CEE2132C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7DF17583-2166-4ABE-82EE-F63CEE2132C2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

@ -1,5 +1,8 @@
using Microsoft.AspNetCore.Mvc;
using Model;
using Stub;
using Trek12_API.DTO;
using static Stub.StubData;
namespace Trek12_API.Controllers
{
@ -17,9 +20,56 @@ namespace Trek12_API.Controllers
}
[HttpGet("/AllGames")]
public async Task<IActionResult> Get()
public async Task<IActionResult> 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/{id}")]
public async Task<IActionResult> GetGameById([FromRoute] 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);
}
}
[HttpDelete (Name = "DeleteGameById")]
public async Task<IActionResult> DeleteGame(int idGame)
{
var gameToDelete = await gamesManager.GetItemsById(idGame);
if (gameToDelete == null)
{
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<IActionResult> Update(int id, GameDTO newGame)
{
await gamesManager.UpdateItem(gamesManager.GetItemsById(id).Result.FirstOrDefault(), newGame.toModel());
return Ok(newPlayer);
}*/
}
}

@ -50,6 +50,7 @@ namespace Trek12_API.Controllers
public async Task<IActionResult> GetById([FromRoute] int id)
{
var player = await playersManager.GetItemsById(id);
if (player == null) return NotFound("Joueur non trouvé");
return Ok(player?.toDTOs());
}

@ -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<TurnDTO>();
@ -26,7 +26,50 @@ namespace Trek12_API.Converter
{
gameDTO.Scores.Add(score.Key.toDTO(), score.Value);
}
gameDTO.Players = new List<PlayerDTO>();
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<Turn>();
foreach (var turn in game.Turns)
{
gameDTO.Turns.Add(turn.toDTO());
}
gameDTO.Grilles = new Dictionary<PlayerDTO, GrilleDTO>();
foreach (var grille in game.Grilles)
{
gameDTO.Grilles.Add(grille.Key.toDTO(), grille.Value.toDTO());
}
gameDTO.Scores = new Dictionary<PlayerDTO, int>();
foreach (var score in game.Scores)
{
gameDTO.Scores.Add(score.Key.toDTO(), score.Value);
}
gameDTO.Players = new List<PlayerDTO>();
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;
}*/
}
}

@ -11,12 +11,13 @@ namespace Trek12_API.DTO
public List<TurnDTO> Turns { get; set; }
public Dictionary<PlayerDTO, GrilleDTO> Grilles { get; set; }
public Dictionary<PlayerDTO, int> Scores { get; set; }
public List<PlayerDTO> 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<PlayerDTO>();
Grilles = new Dictionary<PlayerDTO, GrilleDTO>();
Scores = new Dictionary<PlayerDTO, int>();
Turns = new List<TurnDTO>();
@ -24,7 +25,7 @@ namespace Trek12_API.DTO
Scores.Add(owner, 0);
GameMode = gameMode;
Id = id;
Player = owner;
}
Players.Add(owner);
}*/
}
}

@ -0,0 +1,25 @@
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Trek12_API/Trek12_API.csproj", "Trek12_API/"]
COPY ["Stub/Stub/Stub.csproj", "Stub/Stub/"]
COPY ["Model/Model.csproj", "Model/"]
COPY ["Shared/Shared.csproj", "Shared/"]
RUN dotnet restore "Trek12_API/Trek12_API.csproj"
COPY . .
WORKDIR "/src/Trek12_API"
RUN dotnet build "Trek12_API.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Trek12_API.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Trek12_API.dll"]

@ -4,6 +4,8 @@
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<DockerComposeProjectPath>../docker-compose.dcproj</DockerComposeProjectPath>
<UserSecretsId>24549743-d6e0-4694-975a-beb4dc331de3</UserSecretsId>
</PropertyGroup>
<ItemGroup>

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" Sdk="Microsoft.Docker.Sdk" DefaultTargets="Build">
<PropertyGroup Label="Globals">
<ProjectVersion>2.1</ProjectVersion>
<DockerTargetOS>Linux</DockerTargetOS>
<ProjectGuid>{7DF17583-2166-4ABE-82EE-F63CEE2132C2}</ProjectGuid>
<DockerLaunchBrowser>True</DockerLaunchBrowser>
<DockerServiceUrl>{Scheme}://localhost:{ServicePort}/swagger</DockerServiceUrl>
<DockerServiceName>trek12_api</DockerServiceName>
</PropertyGroup>
<ItemGroup>
<None Include="docker-compose.override.yml">
<DependentUpon>docker-compose.yml</DependentUpon>
</None>
<None Include="docker-compose.yml" />
<None Include=".dockerignore" />
</ItemGroup>
</Project>

@ -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

@ -0,0 +1,8 @@
version: '3.4'
services:
trek12_api:
image: ${DOCKER_REGISTRY-}trek12api
build:
context: .
dockerfile: Trek12_API/Dockerfile
Loading…
Cancel
Save