player controller
continuous-integration/drone/push Build is failing Details

EF
Zakariya SAOULA 2 years ago
parent 4d9e8bfc08
commit 9b0b5682cd

@ -8,13 +8,14 @@ namespace Model
{
public class Case
{
public int Id { get; set; }
public int Valeur
{
get => valeur;
set
{
//pas évolutif car case dangereuse c'est 6 MAX
if (value > 12)
if (value > 12 || value < 0)
{
throw new ArgumentException("a Case must have a value lower or equal to 12");
}
@ -23,9 +24,17 @@ namespace Model
}
private int valeur;
public Case(int valeur)
//public Case(int valeur)
//{
// Valeur = valeur;
//}
public Case()
{
Valeur = valeur;
}
public void AddValue(int valeur)
{
this.valeur = valeur;
}
}
}

@ -9,10 +9,12 @@ namespace Model
{
public class Game
{
public int Id { get; set; }
public TimeSpan Duration { get; set; }
public DateOnly Date { get; set; }
public ReadOnlyCollection<Player> Players { get; private set; }
private List<Player> players = new();
//public ReadOnlyCollection<Player> Players { get; private set; }
//private List<Player> players = new();
public ReadOnlyCollection<Turn> Turns { get; private set; }
private List<Turn> turns = new();
@ -25,28 +27,70 @@ namespace Model
public GameMode GameMode { get; set; }
//public Grille Grille
//public Game(TimeSpan duration, DateOnly date, Dictionary<Player,Grille> grilles, Dictionary<Player, int> scores, List<Turn> turns, GameMode gameMode,int id=0)
//{
// get => grille;
// private init
// {
// if (value == null)
// throw new ArgumentNullException("A grid can't be null for a game");
// grille = value;
// }
//}
//private Grille grille;
// Players = players.AsReadOnly();
// Duration = duration;
// Date = date;
// Grilles = new ReadOnlyDictionary<Player, Grille>(grilles);
// Scores = new ReadOnlyDictionary<Player, int>(scores);
// Turns = turns.AsReadOnly();
// GameMode = gameMode;
// Id = id;
public Game(TimeSpan duration, DateOnly date, Dictionary<Player,Grille> grilles, Dictionary<Player, int> scores, List<Turn> turns, GameMode gameMode)
//}
public Game(DateOnly date, Player owner, GameMode gameMode, int id = 0)
{
Players = players.AsReadOnly();
Duration = duration;
Date = date;
Grilles = new ReadOnlyDictionary<Player, Grille>(grilles);
Scores = new ReadOnlyDictionary<Player, int>(scores);
Turns = turns.AsReadOnly();
Turns = new ReadOnlyCollection<Turn>(turns);
grilles.Add(owner, new Grille());
scores.Add(owner, 0);
GameMode = gameMode;
Id = id;
}
public bool AddPlayerToGame(Player player)
{
if(grilles.ContainsKey(player) == false && scores.ContainsKey(player) == false)
{
grilles.Add(player, new Grille());
scores.Add(player, 0);
return true;
}
return false;
}
public bool AddScoreToPlayer(Player player, int score)
{
if (grilles.ContainsKey(player) == true && scores.ContainsKey(player) == true)
{
scores[player] = score;
return true;
}
return false;
}
public bool AddCaseValue(Player player, int value, int index)
{
if (grilles.ContainsKey(player) == true && scores.ContainsKey(player) == true)
{
return grilles[player].AddValueToCase(value, index);
}
return false;
}
public void AddTurn(Turn turn)
{
turns.Add(turn);
}
public void AddTime(TimeSpan time)
{
Duration = time;
}
}
}

@ -8,6 +8,8 @@ namespace Model
{
public class GameMode
{
public int Id { get; set; }
public string Name
{
get => name;

@ -7,6 +7,7 @@ using System.Threading.Tasks;
namespace Model
{
public int Id { get; set; }
public class Grille
{
public int NbChaine { get; set; }
@ -18,9 +19,25 @@ namespace Model
private List<Case> cases = new();
public Grille(List<Case> cases)
//public Grille(List<Case> cases)
//{
// Cases = cases.AsReadOnly();
//}
public Grille()
{
Cases = new ReadOnlyCollection<Case>(cases);
cases.AddRange((Enumerable.Repeat(new Case(), 19)));
}
public bool AddValueToCase(int value, int index)
{
Cases = cases.AsReadOnly();
if(index > 0 || index <= cases.Count)
{
cases[index - 1].Valeur = value;
return true;
}
return false;
}
}
}

@ -20,10 +20,21 @@ namespace Model
public interface IPlayersManager : IGenericDataManager<Player?>
{
}
Task<IEnumerable<Player?>> GetItemsByPseudo(string charPseudo, int index, int count, string? orderingPropertyName, bool descending = false);
Task<int> GetNbItemsByPseudo(string charPseudo);
//byId ?
}
public interface IGamesManager : IGenericDataManager<Game?>
{
Task<bool> AddPlayer(Player player);
Task<bool> AddScoreToPlayer(int id, int score);
Task<bool> AddCaseValueToPlayer(int id, int value, int index);
Task<bool> AddTurn(Turn turn);
Task<bool> AddTime(TimeSpan time);
}
public interface IGamesModeManager : IGenericDataManager<GameMode?>

@ -1,7 +1,8 @@
namespace Model;
//public class Player : IEquatable<Player>
public class Player
public class Player : IEquatable<Player>
{
public int Id { get; set; }
public string Pseudo
{
get => pseudo;
@ -25,21 +26,46 @@
Stats = new Stats();
}
public Player(string pseudo, Stats stats)
public Player(string pseudo, Stats stats, int id=0)
{
Pseudo = pseudo;
Stats = stats;
Id = id;
}
public void AddWin()
{
Stats.NbWin += 1;
}
public void AddPlayed()
{
Stats.NbPlayed += 1;
}
public void AddMaxChain(int maxChain)
{
Stats.MaxChain = maxChain;
}
public void AddMaxZone(int maxZone)
{
Stats.MaxZone = maxZone;
}
public void AddMaxPoints(int maxPts)
{
Stats.MaxPoints = maxPts;
}
//nécessaire ?
//public bool Equals(Player? other)
// => Pseudo.Equals(other?.Pseudo);
public bool Equals(Player? other)
=> Pseudo.ToLower().Equals(other?.Pseudo.ToLower());
//997 ou un autre chiffre, à voir
//public override int GetHashCode()
// => Pseudo.GetHashCode() % 997;
public override int GetHashCode()
=> Pseudo.GetHashCode() % 997;
//public override string ToString()
// => $"{Pseudo}";
public override string ToString()
=> $"{Pseudo}";
}

@ -8,6 +8,7 @@ namespace Model
{
public class Stats
{
public int Id { get; set; }
public int NbWin { get; set; } = 0;
public int NbPlayed { get; set; } = 0;
public int MaxChain { get; set; } = 0;

@ -8,6 +8,8 @@ namespace Model
{
public class Turn
{
public int Id { get; set; }
public int DiceValue1
{
get => diceValue1;

@ -41,6 +41,16 @@ namespace Stub
public Task<Player?> UpdateItem(Player? oldItem, Player? newItem)
=> parent.players.UpdateItem(oldItem, newItem);
private Func<Player, string, bool> filterByPseudo = (player, substring) => player.Pseudo.Contains(substring, StringComparison.InvariantCultureIgnoreCase);
public Task<IEnumerable<Player?>> GetItemsByPseudo(string charPseudo, int index, int count, string? orderingPropertyName, bool descending = false)
=> parent.players.GetItemsWithFilterAndOrdering(player => filterByPseudo(player, charPseudo), index, count, orderingPropertyName, descending);
public Task<int> GetNbItemsByPseudo(string charPseudo)
{
throw new NotImplementedException();
}
}
}
}

@ -20,20 +20,57 @@ namespace Trek12_API.Controllers
_logger = logger;
}
//[HttpGet]
//public async Task<IActionResult> Get(int index, int count, string? order = null, bool descending = false )
//{
// //si count > nb_max
// //_logger.LogWarning + reaffecter count
// //var list = await playersManager.GetItems(0, await playersManager.GetNbItems(), order, descending);
// var list = await playersManager.GetItems(index, count, order, descending);
// return Ok(list.Select(player => player?.toDTO()));
//}
[HttpGet]
public async Task<IActionResult> Get()
public async Task<IActionResult> Get(int index, int count, string? order = null, bool descending = false)
{
//si count > nb_max
//_logger.LogWarning + reaffecter count
var list = await playersManager.GetItems(0, await playersManager.GetNbItems());
return Ok(list.Select(player => player?.toDTO()));
try
{
if (index < 0)
{
_logger.LogWarning($"Invalid index value {index} in Get method.");
return BadRequest("Index must be a non-negative integer.");
}
if (count <= 0)
{
_logger.LogWarning($"Invalid count value {count} in Get method.");
return BadRequest("Count must be a positive integer.");
}
var list = await playersManager.GetItems(index, count, order, descending);
if (list == null || !list.Any())
{
_logger.LogWarning($"No players found in Get method with index {index} and count {count}.");
return NotFound("No players found.");
}
_logger.LogInformation($"Returning list of {list.Count()} players in Get method with index {index} and count {count}.");
return Ok(list.Select(player => player?.toDTO()));
}
catch (Exception ex)
{
_logger.LogError($"Error occurred in Get method with index {index} and count {count}: {ex.Message}");
return StatusCode(500, "Internal server error.");
}
}
[HttpGet]
public async Task<IActionResult> GetById()
[HttpGet("pseudo/{pseudo}")]
public async Task<IActionResult> GetByPseudo([FromRoute] string pseudo, int index, int count, string? order = null, bool descending = false)
{
var list = await playersManager.GetItems(0, await playersManager.GetNbItems());
return Ok(list.Select(player => player?.toDTO()));
var player = await playersManager.GetItemsByPseudo(pseudo, index, count, order, descending);
return Ok(player?.toDTOs());
}
[HttpPost]
@ -44,7 +81,7 @@ namespace Trek12_API.Controllers
return Ok(playerToCreate?.toDTO());
}
[HttpDelete("{player}")]
[HttpDelete]
public async Task<IActionResult> Delete(PlayerDTO player)
{
var playerToDelete = player.toModel();
@ -53,6 +90,15 @@ namespace Trek12_API.Controllers
return Ok();
}
[HttpDelete("pseudo/{pseudo}")]
public async Task<IActionResult> DeleteByPseudo(PlayerDTO player)
{
var playerToDelete = player.toModel();
//faire recherche pour voir si player existe
await playersManager.DeleteItem(playerToDelete);
return Ok();
}
[HttpPut]
public async Task<IActionResult> Update(string pseudo, PlayerDTO playerOld)
{
@ -61,5 +107,45 @@ namespace Trek12_API.Controllers
await playersManager.UpdateItem(playerOldModel, playerNew);
return Ok(playerNew);
}
[HttpPut]
public async Task<IActionResult> UpdateMaxChain(int newMaxChain, PlayerDTO playerOld)
{
Player playerOldModel = playerOld.toModel();
Player playerNew = new Player(playerOldModel.Pseudo, playerOldModel.Stats);
playerNew.Stats.MaxChain = newMaxChain;
await playersManager.UpdateItem(playerOldModel, playerNew);
return Ok(playerNew);
}
[HttpPut]
public async Task<IActionResult> UpdateMaxPoints(int newMaxPoints, PlayerDTO playerOld)
{
Player playerOldModel = playerOld.toModel();
Player playerNew = new Player(playerOldModel.Pseudo, playerOldModel.Stats);
playerNew.Stats.MaxPoints = newMaxPoints;
await playersManager.UpdateItem(playerOldModel, playerNew);
return Ok(playerNew);
}
[HttpPut]
public async Task<IActionResult> UpdateMaxZone(int newMaxZone, PlayerDTO playerOld)
{
Player playerOldModel = playerOld.toModel();
Player playerNew = new Player(playerOldModel.Pseudo, playerOldModel.Stats);
playerNew.Stats.MaxZone = newMaxZone;
await playersManager.UpdateItem(playerOldModel, playerNew);
return Ok(playerNew);
}
[HttpPut]
public async Task<IActionResult> UpdateWin(int newMaxZone, PlayerDTO playerOld)
{
Player playerOldModel = playerOld.toModel();
Player playerNew = new Player(playerOldModel.Pseudo, playerOldModel.Stats);
playerNew.AddWin();
await playersManager.UpdateItem(playerOldModel, playerNew);
return Ok(playerNew);
}
}
}

@ -1,33 +0,0 @@
using Microsoft.AspNetCore.Mvc;
namespace Trek12_API.Controllers;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}

@ -0,0 +1,6 @@
namespace Trek12_API.DTO
{
public class GameDTO
{
}
}

@ -1,13 +0,0 @@
namespace Trek12_API;
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string? Summary { get; set; }
}
Loading…
Cancel
Save