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 class Case
{ {
public int Id { get; set; }
public int Valeur public int Valeur
{ {
get => valeur; get => valeur;
set set
{ {
//pas évolutif car case dangereuse c'est 6 MAX //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"); throw new ArgumentException("a Case must have a value lower or equal to 12");
} }
@ -23,9 +24,17 @@ namespace Model
} }
private int valeur; 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 class Game
{ {
public int Id { get; set; }
public TimeSpan Duration { get; set; } public TimeSpan Duration { get; set; }
public DateOnly Date { get; set; } public DateOnly Date { get; set; }
public ReadOnlyCollection<Player> Players { get; private set; } //public ReadOnlyCollection<Player> Players { get; private set; }
private List<Player> players = new(); //private List<Player> players = new();
public ReadOnlyCollection<Turn> Turns { get; private set; } public ReadOnlyCollection<Turn> Turns { get; private set; }
private List<Turn> turns = new(); private List<Turn> turns = new();
@ -25,28 +27,70 @@ namespace Model
public GameMode GameMode { get; set; } 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; // Players = players.AsReadOnly();
// private init // Duration = duration;
// { // Date = date;
// if (value == null) // Grilles = new ReadOnlyDictionary<Player, Grille>(grilles);
// throw new ArgumentNullException("A grid can't be null for a game"); // Scores = new ReadOnlyDictionary<Player, int>(scores);
// grille = value; // Turns = turns.AsReadOnly();
// } // GameMode = gameMode;
//} // Id = id;
//private Grille grille;
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; Date = date;
Grilles = new ReadOnlyDictionary<Player, Grille>(grilles); Grilles = new ReadOnlyDictionary<Player, Grille>(grilles);
Scores = new ReadOnlyDictionary<Player, int>(scores); 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; 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 class GameMode
{ {
public int Id { get; set; }
public string Name public string Name
{ {
get => name; get => name;

@ -7,6 +7,7 @@ using System.Threading.Tasks;
namespace Model namespace Model
{ {
public int Id { get; set; }
public class Grille public class Grille
{ {
public int NbChaine { get; set; } public int NbChaine { get; set; }
@ -18,9 +19,25 @@ namespace Model
private List<Case> cases = new(); 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?> 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?> 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?> public interface IGamesModeManager : IGenericDataManager<GameMode?>

@ -1,7 +1,8 @@
namespace Model; namespace Model;
//public class Player : IEquatable<Player> public class Player : IEquatable<Player>
public class Player
{ {
public int Id { get; set; }
public string Pseudo public string Pseudo
{ {
get => pseudo; get => pseudo;
@ -25,21 +26,46 @@
Stats = new Stats(); Stats = new Stats();
} }
public Player(string pseudo, Stats stats) public Player(string pseudo, Stats stats, int id=0)
{ {
Pseudo = pseudo; Pseudo = pseudo;
Stats = stats; 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)
//public bool Equals(Player? other) => Pseudo.ToLower().Equals(other?.Pseudo.ToLower());
// => Pseudo.Equals(other?.Pseudo);
//997 ou un autre chiffre, à voir //997 ou un autre chiffre, à voir
//public override int GetHashCode() public override int GetHashCode()
// => Pseudo.GetHashCode() % 997; => Pseudo.GetHashCode() % 997;
//public override string ToString() public override string ToString()
// => $"{Pseudo}"; => $"{Pseudo}";
} }

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

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

@ -41,6 +41,16 @@ namespace Stub
public Task<Player?> UpdateItem(Player? oldItem, Player? newItem) public Task<Player?> UpdateItem(Player? oldItem, Player? newItem)
=> parent.players.UpdateItem(oldItem, 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; _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] [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 try
//_logger.LogWarning + reaffecter count {
var list = await playersManager.GetItems(0, await playersManager.GetNbItems()); if (index < 0)
return Ok(list.Select(player => player?.toDTO())); {
_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()); var player = await playersManager.GetItemsByPseudo(pseudo, index, count, order, descending);
return Ok(list.Select(player => player?.toDTO())); return Ok(player?.toDTOs());
} }
[HttpPost] [HttpPost]
@ -44,7 +81,7 @@ namespace Trek12_API.Controllers
return Ok(playerToCreate?.toDTO()); return Ok(playerToCreate?.toDTO());
} }
[HttpDelete("{player}")] [HttpDelete]
public async Task<IActionResult> Delete(PlayerDTO player) public async Task<IActionResult> Delete(PlayerDTO player)
{ {
var playerToDelete = player.toModel(); var playerToDelete = player.toModel();
@ -53,6 +90,15 @@ namespace Trek12_API.Controllers
return Ok(); 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] [HttpPut]
public async Task<IActionResult> Update(string pseudo, PlayerDTO playerOld) public async Task<IActionResult> Update(string pseudo, PlayerDTO playerOld)
{ {
@ -61,5 +107,45 @@ namespace Trek12_API.Controllers
await playersManager.UpdateItem(playerOldModel, playerNew); await playersManager.UpdateItem(playerOldModel, playerNew);
return Ok(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