diff --git a/.vs/LolProject/v17/.suo b/.vs/LolProject/v17/.suo index 25c0511..f873e9e 100644 Binary files a/.vs/LolProject/v17/.suo and b/.vs/LolProject/v17/.suo differ diff --git a/.vs/LolProject/v17/.wsuo b/.vs/LolProject/v17/.wsuo index 53bddc1..9ab157c 100644 Binary files a/.vs/LolProject/v17/.wsuo and b/.vs/LolProject/v17/.wsuo differ diff --git a/README.md b/README.md index 387bb11..c57057d 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,18 @@ +
+ +--- + +[![Duplicated Lines (%)](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=LolProjectIUT&metric=duplicated_lines_density&token=b65c8ed30f0fbe374e41e98340dc910942b77bba)](https://codefirst.iut.uca.fr/sonar/dashboard?id=LolProjectIUT) +[![Security Rating](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=LolProjectIUT&metric=security_rating&token=b65c8ed30f0fbe374e41e98340dc910942b77bba)](https://codefirst.iut.uca.fr/sonar/dashboard?id=LolProjectIUT) +[![Vulnerabilities](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=LolProjectIUT&metric=vulnerabilities&token=b65c8ed30f0fbe374e41e98340dc910942b77bba)](https://codefirst.iut.uca.fr/sonar/dashboard?id=LolProjectIUT) + +--- + +
+ **Thème du projet** : Réalisation d'une API et d'un ORM (Entity Framework) qui seront reliés à une base de données dans le thème de League of Legends
@@ -14,7 +26,7 @@ La racine de mon GitLab contient deux dossiers essentiels pour le projet : [**src**](src) : **Toute la partie codage de l'application** -[**doc**](doc) : **Documentation de l'application** +[**doc**](doc) : **Documentation de l'application** (Images + Schéma et description de l'architecture globale de l'application) 👉 [**Solution de l'application**](src/EntityFramework_LoL/Sources/LeagueOfLegends.sln) @@ -59,6 +71,8 @@ Normalement, tout est bon et vous serez redirigé vers Swagger, qui est l'interf +Vous pouvez aussi utiliser l'API via cette url: https://codefirst.iut.uca.fr/containers/emrekartal-lolApi/Api/v3/champions + - ### Comment lancer Le projet Entity Framework ? Afin de générer les migrations et les tables, vous devez avoir installé correctement EntityFrameworkCore. Pour cela il existe la commande : **dotnet tool install --global dotnet-ef**, qui peut être lancé à partir d'un terminal. Si elle est déjà installée mais n'a pas la bonne version : **dotnet tool update --global dotnet-ef** (oui, il n'y a que l'*install* qui change. Vous êtes perspicace !). @@ -108,8 +122,10 @@ Mon environnement de travail est basé sur un outil et un langage en particulier --- +  ![Docker](https://img.shields.io/badge/Docker-2496ED.svg?style=for-the-badge&logo=Docker&logoColor=white)   ![Dotnet](https://img.shields.io/badge/Core-000?style=for-the-badge&logo=Dotnet&logoColor=white&color=purple) -  ![C#](https://img.shields.io/badge/Csharp-000?style=for-the-badge&logo=csharp&logoColor=white&color=blue) +  ![C#](https://img.shields.io/badge/C%20Sharp-239120.svg?style=for-the-badge&logo=C-Sharp&logoColor=white) +  ![SQLite](https://img.shields.io/badge/SQLite-003B57.svg?style=for-the-badge&logo=SQLite&logoColor=white) --- diff --git a/doc/Schémas/Architecture_Global.png b/doc/Schémas/Architecture_Global.png new file mode 100644 index 0000000..5b76ba0 Binary files /dev/null and b/doc/Schémas/Architecture_Global.png differ diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Controllers/RunesController.cs b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/RunesController.cs new file mode 100644 index 0000000..b5225f3 --- /dev/null +++ b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/RunesController.cs @@ -0,0 +1,177 @@ +using ApiLol.Mapper; +using DTO; +using Microsoft.AspNetCore.Mvc; +using Microsoft.IdentityModel.Tokens; +using Model; + +// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 + +namespace ApiLol.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class RunesController : ControllerBase + { + private readonly IDataManager _manager; + private readonly ILogger _logger; + + public RunesController(IDataManager dataManager, ILogger logger) + { + _logger = logger; + this._manager = dataManager; + } + + + // GET: api/ + [HttpGet] + public async Task Get([FromQuery] PageRequest pageRequest) + { + _logger.LogInformation("Executing {Action} - RUNE with parameters: {Parameters}", nameof(Get), pageRequest); + try + { + int nbTotal = await _manager.RunesMgr.GetNbItems(); + if (pageRequest.count == 0) + { + pageRequest = new PageRequest() { index = 0, count = nbTotal, orderingPropertyName = pageRequest.orderingPropertyName, descending = pageRequest.descending, name = pageRequest.name }; + } + else if (pageRequest.count * pageRequest.index >= nbTotal || pageRequest.count > nbTotal) + { + _logger.LogWarning("too many, maximum {number}", nbTotal); + return BadRequest($"Rune limit exceed, max {nbTotal}"); + } + + IEnumerable dtos; + if (pageRequest.name == null) + { + dtos = (await _manager.RunesMgr.GetItems(pageRequest.index, pageRequest.count, pageRequest.orderingPropertyName, pageRequest.descending)) + .Select(x => x.ToDto()); + } + else + { + dtos = (await _manager.RunesMgr.GetItemsByName(pageRequest.name, pageRequest.index, pageRequest.count, pageRequest.orderingPropertyName, pageRequest.descending)) + .Select(x => x.ToDto()); + } + return Ok(new { Data = dtos, index = pageRequest.index, count = pageRequest.count, total = nbTotal }); + + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + // GET api//5 + [HttpGet("{name}")] + public async Task Get(string name) + { + _logger.LogInformation("method {Action} - RUNE call with {name}", nameof(Get), name); + try + { + var dtos = (await _manager.RunesMgr.GetItemByName(name, 0, await _manager.RunesMgr.GetNbItems())) + .Select(x => x.ToDto()); + if (dtos.IsNullOrEmpty()) + { + _logger.LogWarning($"{name} was not found"); + return NotFound($"{name} was not found"); + } + return Ok(dtos.First()); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + // POST api/ + [HttpPost] + public async Task Post([FromBody] RuneDto rune) + { + _logger.LogInformation("method {Action} - RUNE call with {item}", nameof(Post), rune); + try + { + if (await _manager.RunesMgr.GetNbItemsByName(rune.Name) == 0) + { + return CreatedAtAction(nameof(Get), + (await _manager.RunesMgr.AddItem(rune.ToModel()))); + } + _logger.LogWarning($"Name : {rune.Name} is already exist"); + return BadRequest($"Name : {rune.Name} is already exist"); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + // PUT api//5 + [HttpPut("{name}")] + public async Task Put(string name, [FromBody] RuneDto rune) + { + _logger.LogInformation("method {Action} - RUNE call with {name} and {item}", nameof(Put), name, rune); + try + { + var dtos = (await _manager.RunesMgr.GetItemByName(name, 0, await _manager.RunesMgr.GetNbItems())); + if (dtos.IsNullOrEmpty()) + { + return NotFound($"Name {name} not exist"); + } + // Checks if the new name exists + if (name != rune.Name) + { + var dtos2 = (await _manager.RunesMgr.GetItemByName(rune.Name, 0, await _manager.RunesMgr.GetNbItems())); + if (dtos2.IsNullOrEmpty() || dtos2.Count() > 0) + { + return BadRequest($"New Name {rune.Name} is already exist"); + } + } + return Ok(await _manager.RunesMgr.UpdateItem(dtos.First(),rune.ToModel())); + + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + // DELETE api//5 + [HttpDelete("{name}")] + public async Task Delete(string name) + { + _logger.LogInformation("method {Action} - RUNE call with {name}", nameof(Delete), name); + try + { + var dtos = (await _manager.RunesMgr.GetItemByName(name, 0, await _manager.RunesMgr.GetNbItems())); + if (dtos.IsNullOrEmpty()) + { + _logger.LogWarning("{name} was not found", name); + return BadRequest(); + } + return Ok(await _manager.RunesMgr.DeleteItem(dtos.First())); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + [HttpGet("/countRunes")] + public async Task> GetCountSkins() + { + try + { + return Ok(await _manager.RunesMgr.GetNbItems()); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + + } + } + } +} diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Controllers/SkinsController.cs b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/SkinsController.cs index bef0ede..7b9f0fd 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Controllers/SkinsController.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/SkinsController.cs @@ -1,76 +1,221 @@ -using ApiLol.Mapper; -using DTO; -using Microsoft.AspNetCore.Mvc; -using Model; - -// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 - -namespace ApiLol.Controllers -{ - [Route("api/[controller]")] - [ApiController] - public class SkinsController : ControllerBase - { - private readonly IDataManager _manager; - private readonly ILogger _logger; - - public SkinsController(IDataManager dataManager, ILogger logger) - { - _logger = logger; - this._manager = dataManager; - } - - // GET: api/ - [HttpGet] - public async Task Get([FromQuery] PageRequest pageRequest) - { - try - { - int nbTotal = await _manager.ChampionsMgr.GetNbItems(); - if (pageRequest.count + pageRequest.index > nbTotal) - { - _logger.LogWarning($"too many, maximum {nbTotal}"); - return BadRequest($"Champion limit exceed, max {nbTotal}"); - } - - _logger.LogInformation($"method Get call"); - IEnumerable dtos = (await _manager.SkinsMgr.GetItems(pageRequest.index, pageRequest.count)) - .Select(x => x.ToDtoC()); - return Ok(dtos); - - } - catch (Exception e) - { - return BadRequest(e.Message); - } - } - - // GET api//5 - [HttpGet("{name}")] - public async Task Get(string name) - { - return Ok(); - } - - // POST api/ - [HttpPost] - public async Task Post([FromBody] string value) - { - return Ok(); - } - - // PUT api//5 - [HttpPut("{name}")] - public async Task Put(int id, [FromBody] string value) - { - return Ok(); - } - - // DELETE api//5 - [HttpDelete("{name}")] - public async Task Delete(string name) - { - return Ok(); - } - } -} +using ApiLol.Mapper; +using DTO; +using Microsoft.AspNetCore.Mvc; +using Microsoft.IdentityModel.Tokens; +using Model; + +// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 + +namespace ApiLol.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class SkinsController : ControllerBase + { + private readonly IDataManager _manager; + private readonly ILogger _logger; + + public SkinsController(IDataManager dataManager, ILogger logger) + { + _logger = logger; + this._manager = dataManager; + } + + // GET: api/ + [HttpGet] + public async Task Get([FromQuery] PageRequest pageRequest) + { + _logger.LogInformation("Executing {Action} - SKIN with parameters: {Parameters}", nameof(Get), pageRequest); + try + { + int nbTotal = await _manager.SkinsMgr.GetNbItems(); + if (pageRequest.count == 0) + { + pageRequest = new PageRequest() { index = 0, count = nbTotal, orderingPropertyName = pageRequest.orderingPropertyName, descending = pageRequest.descending, name = pageRequest.name }; + } + else if (pageRequest.count * pageRequest.index >= nbTotal || pageRequest.count > nbTotal) + { + _logger.LogWarning("too many, maximum {number}", nbTotal); + return BadRequest($"Skin limit exceed, max {nbTotal}"); + } + + IEnumerable dtos; + if (pageRequest.name == null) + { + dtos = (await _manager.SkinsMgr.GetItems(pageRequest.index, pageRequest.count, pageRequest.orderingPropertyName, pageRequest.descending)) + .Select(x => x.ToDtoC()); + } + else + { + dtos = (await _manager.SkinsMgr.GetItemsByName(pageRequest.name, pageRequest.index, pageRequest.count, pageRequest.orderingPropertyName, pageRequest.descending)) + .Select(x => x.ToDtoC()); + } + return Ok(new { Data = dtos, index = pageRequest.index, count = pageRequest.count, total = nbTotal }); + + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + // GET api//5 + [HttpGet("{name}")] + public async Task Get(string name) + { + _logger.LogInformation("method {Action} - SKIN call with {name}", nameof(Get), name); + try + { + var dtos = (await _manager.SkinsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems())) + .Select(x => x.ToDtoC()); + if (dtos.IsNullOrEmpty()) + { + _logger.LogWarning($"{name} was not found"); + return NotFound($"{name} was not found"); + } + return Ok(dtos.First()); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + // POST api/ + [HttpPost] + public async Task Post([FromBody] SkinDtoC skin) + { + _logger.LogInformation("method {Action} - SKIN call with {item}", nameof(Post), skin); + try + { + if (skin.ChampionName != null) + { + var dtos = (await _manager.ChampionsMgr.GetItemByName(skin.ChampionName, 0, await _manager.ChampionsMgr.GetNbItems())); + if (dtos.IsNullOrEmpty()) + { + _logger.LogWarning($"Champion Name : {skin.ChampionName} not exist"); + return BadRequest($"Champion Name : {skin.ChampionName} not exist"); + } + else + { + if (await _manager.SkinsMgr.GetNbItemsByName(skin.Name) == 0) + { + return CreatedAtAction(nameof(Get), + (await _manager.SkinsMgr.AddItem(skin.ToModelC(dtos.First()))).ToDtoC()); + } + _logger.LogWarning($"Name : {skin.Name} is already exist"); + return BadRequest($"Name : {skin.Name} is already exist"); + } + } + else + { + return BadRequest("Please fill in the name of the champion"); + } + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + // PUT api//5 + [HttpPut("{name}")] + public async Task Put(string name, [FromBody] SkinDtoC skin) + { + _logger.LogInformation("method {Action} - SKIN call with {name} and {item}", nameof(Put), name, skin); + try + { + var dtos = (await _manager.SkinsMgr.GetItemByName(name, 0, await _manager.SkinsMgr.GetNbItems())); + if (dtos.IsNullOrEmpty()) + { + return NotFound($"Name {name} not exist"); + } + // Checks if the new name exists + if (name != skin.Name) + { + var dtos2 = (await _manager.SkinsMgr.GetItemByName(skin.Name, 0, await _manager.SkinsMgr.GetNbItems())); + if (dtos2.IsNullOrEmpty() || dtos2.Count() > 0) + { + return BadRequest($"New Name {skin.Name} is already exist"); + } + } + var dtosChampion = (await _manager.ChampionsMgr.GetItemByName(skin.ChampionName, 0, await _manager.ChampionsMgr.GetNbItems())); + if (dtosChampion.IsNullOrEmpty()) + { + _logger.LogWarning($"Champion Name : {skin.ChampionName} not exist"); + return BadRequest($"Champion Name : {skin.ChampionName} not exist"); + } + return Ok((await _manager.SkinsMgr.UpdateItem(dtos.First(), skin.ToModelC(dtosChampion.First()))).ToDtoC()); + + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + [HttpGet("/{name}/champion")] + public async Task> GetChampionBySkinName(string name) + { + _logger.LogInformation("method {Action} - Skin call with {name}", nameof(GetChampionBySkinName), name); + try + { + var dtos = (await _manager.SkinsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems())) + .Select(x => x.ToDtoC()); + if (dtos.IsNullOrEmpty()) + { + _logger.LogWarning($"{name} was not found"); + return NotFound($"{name} was not found"); + } + var champion = (await _manager.ChampionsMgr.GetItemByName(dtos.First().ChampionName, 0, 1)); + return Ok(champion.First().ToDto()); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + + [HttpGet("/countSkins")] + public async Task> GetCountSkins() + { + try + { + return Ok(await _manager.SkinsMgr.GetNbItems()); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + // DELETE api//5 + [HttpDelete("{name}")] + public async Task Delete(string name) + { + _logger.LogInformation("method {Action} - SKIN call with {name}", nameof(Delete), name); + try + { + var dtos = (await _manager.SkinsMgr.GetItemByName(name, 0, await _manager.SkinsMgr.GetNbItems())); + if (dtos.IsNullOrEmpty()) + { + _logger.LogWarning("{name} was not found", name); + return BadRequest(); + } + return Ok(await _manager.SkinsMgr.DeleteItem(dtos.First())); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + } +} diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Controllers/v1/ChampionsController.cs b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/v1/ChampionsController.cs index 53c9853..c565858 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Controllers/v1/ChampionsController.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/v1/ChampionsController.cs @@ -1,82 +1,96 @@ -using ApiLol.Mapper; -using DTO; -using Microsoft.AspNetCore.Mvc; -using Microsoft.IdentityModel.Tokens; -using Model; - -// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 - -namespace ApiLol.Controllers.v1 -{ - [ApiVersion("1.0")] - [Route("api/v{version:apiVersion}/[controller]")] - [ApiController] - public class ChampionsController : ControllerBase - { - private readonly IDataManager _manager; - private readonly ILogger _logger; - public ChampionsController(IDataManager dataManager, ILogger logger) - { - _logger = logger; - this._manager = dataManager; - } - - // GET: api/ - [HttpGet] - public async Task Get([FromQuery] PageRequest pageRequest) - { - _logger.LogInformation("Executing {Action} with parameters: {Parameters}", nameof(Get), pageRequest); - IEnumerable dtos = (await _manager.ChampionsMgr.GetItems(pageRequest.index, pageRequest.count, pageRequest.orderingPropertyName, pageRequest.descending)) - .Select(x => x.ToDto()); - return Ok(dtos); - - } - - // GET api//5 - [HttpGet("{name}")] - public async Task Get(string name) - { - _logger.LogInformation("method {Action} call with {name}", nameof(Get), name); - var dtos = (await _manager.ChampionsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems())) - .Select(x => x.ToDto()); - - return Ok(dtos.First()); - - } - - // POST api/ - [HttpPost] - public async Task Post([FromBody] ChampionDto champion) - { - - _logger.LogInformation("method {Action} call with {item}", nameof(Post), champion); - return CreatedAtAction(nameof(Get), - (await _manager.ChampionsMgr.AddItem(champion.ToModel())).ToDto()); - - } - - // PUT api//5 - [HttpPut("{name}")] - public async Task Put(string name, [FromBody] ChampionDto champion) - { - - _logger.LogInformation("method {Action} call with {name} and {item}", nameof(Put), name, champion); +using ApiLol.Mapper; +using DTO; +using Microsoft.AspNetCore.Mvc; +using Microsoft.IdentityModel.Tokens; +using Model; + +// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 + +namespace ApiLol.Controllers.v1 +{ + [ApiVersion("1.0")] + [Route("api/v{version:apiVersion}/[controller]")] + [ApiController] + public class ChampionsController : ControllerBase + { + private readonly IDataManager _manager; + private readonly ILogger _logger; + public ChampionsController(IDataManager dataManager, ILogger logger) + { + _logger = logger; + this._manager = dataManager; + } + + // GET: api/ + [HttpGet] + public async Task Get([FromQuery] PageRequest pageRequest) + { + _logger.LogInformation("Executing {Action} - CHAMPION - V1.0 with parameters: {Parameters}", nameof(Get), pageRequest); + IEnumerable dtos = (await _manager.ChampionsMgr.GetItems(pageRequest.index, pageRequest.count, pageRequest.orderingPropertyName, pageRequest.descending)) + .Select(x => x.ToDto()); + return Ok(dtos); + + } + + // GET api//5 + [HttpGet("{name}")] + public async Task Get(string name) + { + _logger.LogInformation("method {Action} - CHAMPION - V1.0 call with {name}", nameof(Get), name); + var dtos = (await _manager.ChampionsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems())) + .Select(x => x.ToDto()); + + return Ok(dtos.First()); + + } + + // POST api/ + [HttpPost] + public async Task Post([FromBody] ChampionDto champion) + { + + _logger.LogInformation("method {Action} - CHAMPION - V1.0 call with {item}", nameof(Post), champion); + return CreatedAtAction(nameof(Get), + (await _manager.ChampionsMgr.AddItem(champion.ToModel())).ToDto()); + + } + + // PUT api//5 + [HttpPut("{name}")] + public async Task Put(string name, [FromBody] ChampionDto champion) + { + + _logger.LogInformation("method {Action} - CHAMPION - V1.0 call with {name} and {item}", nameof(Put), name, champion); var dtos = (await _manager.ChampionsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems())); - return Ok((await _manager.ChampionsMgr.UpdateItem(dtos.First(), champion.ToModel())).ToDto()); - - } - - // DELETE api//5 - [HttpDelete("{name}")] - public async Task Delete(string name) - { - - _logger.LogInformation("method {Action} call with {name}", nameof(Delete), name); - var dtos = (await _manager.ChampionsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems())); - - return Ok(await _manager.ChampionsMgr.DeleteItem(dtos.First())); - - } - } + return Ok((await _manager.ChampionsMgr.UpdateItem(dtos.First(), champion.ToModel())).ToDto()); + + } + + [HttpGet("/countChampions")] + public async Task> GetCountChampions() + { + try + { + return Ok(await _manager.ChampionsMgr.GetNbItems()); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + // DELETE api//5 + [HttpDelete("{name}")] + public async Task Delete(string name) + { + + _logger.LogInformation("method {Action} - CHAMPION - V1.0 call with {name}", nameof(Delete), name); + var dtos = (await _manager.ChampionsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems())); + + return Ok(await _manager.ChampionsMgr.DeleteItem(dtos.First())); + + } + } } \ No newline at end of file diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Controllers/v2/ChampionsController.cs b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/v2/ChampionsController.cs index 838fe00..457cb91 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Controllers/v2/ChampionsController.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/v2/ChampionsController.cs @@ -1,211 +1,242 @@ -using ApiLol.Mapper; -using Azure.Core; -using DTO; -using Microsoft.AspNetCore.Mvc; -using Microsoft.IdentityModel.Tokens; -using Model; - -// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 - -namespace ApiLol.Controllers.v2 -{ - [ApiVersion("2.0")] - [ApiVersion("3.0")] - [Route("api/v{version:apiVersion}/[controller]")] - [ApiController] - public class ChampionsController : ControllerBase - { - private readonly IDataManager _manager; - private readonly ILogger _logger; - public ChampionsController(IDataManager dataManager, ILogger logger) - { - _logger = logger; - this._manager = dataManager; - } - - // GET: api/ - [HttpGet] - public async Task Get([FromQuery] PageRequest pageRequest) - { - try - { - int nbTotal = await _manager.ChampionsMgr.GetNbItems(); - if (pageRequest.count == 0) - { - pageRequest = new PageRequest() { index = 0, count = nbTotal }; - } - else if (pageRequest.count * pageRequest.index >= nbTotal) - { - _logger.LogWarning($"too many, maximum {nbTotal}"); - return BadRequest($"Champion limit exceed, max {nbTotal}"); - } - - _logger.LogInformation("Executing {Action} with parameters: {Parameters}", nameof(Get), pageRequest.count); - IEnumerable dtos = (await _manager.ChampionsMgr.GetItems(pageRequest.index, pageRequest.count)) - .Select(x => x.ToDto()); - return Ok(dtos); - } - catch (Exception error) - { - return BadRequest(error.Message); - } - } - - // GET: api/ - [HttpGet, MapToApiVersion("3.0")] - public async Task GetV3([FromQuery] PageRequest pageRequest) - { - try - { - int nbTotal = await _manager.ChampionsMgr.GetNbItems(); - if (pageRequest.count == 0) - { - pageRequest = new PageRequest() { index = 0, count = nbTotal }; - } - else if (pageRequest.count * pageRequest.index >= nbTotal || pageRequest.count > nbTotal) - { - _logger.LogWarning("too many, maximum {number}", nbTotal); - return BadRequest($"Champion limit exceed, max {nbTotal}"); - } - - _logger.LogInformation("Executing {Action} with parameters: {Parameters}", nameof(Get), pageRequest); - IEnumerable dtos = (await _manager.ChampionsMgr.GetItems(pageRequest.index, pageRequest.count, pageRequest.orderingPropertyName, pageRequest.descending)) - .Select(x => x.ToDto()); - return Ok(new { Data = dtos, index = pageRequest.index, count = pageRequest.count, total = nbTotal}); - } - catch (Exception error) - { - return BadRequest(error.Message); - } - } - - // GET api//5 - [HttpGet("{name}")] - public async Task Get(string name) - { - try - { - _logger.LogInformation("method {Action} call with {name}", nameof(Get), name); - var dtos = (await _manager.ChampionsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems())) - .Select(x => x.ToDto()); - if (dtos.IsNullOrEmpty()) - { - _logger.LogWarning($"{name} was not found"); - return NotFound(); - } - return Ok(dtos.First()); - } - catch (Exception error) - { - return BadRequest(error.Message); - } - } - - // POST api/ - [HttpPost] - public async Task Post([FromBody] ChampionDto champion) - { - try - { - _logger.LogInformation("method {Action} call with {item}", nameof(Post), champion); - var dtos = (await _manager.ChampionsMgr.GetItemByName(champion.Name, 0, await _manager.ChampionsMgr.GetNbItems())); - if (!dtos.IsNullOrEmpty()) - { - return BadRequest("Name is already exist"); - } - return CreatedAtAction(nameof(Get), - (await _manager.ChampionsMgr.AddItem(champion.ToModel())).ToDto()); - } - catch (Exception error) - { - return BadRequest(error.Message); - } - } - - // PUT api//5 - [HttpPut("{name}")] - public async Task Put(string name, [FromBody] ChampionDto champion) - { - try - { - _logger.LogInformation("method {Action} call with {name} and {item}", nameof(Put), name, champion); - var dtos = (await _manager.ChampionsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems())); - if (dtos.IsNullOrEmpty()) - { - return NotFound($"Name {name} not exist"); - } - // Checks if the new name exists - if (name != champion.Name) - { - var dtos2 = (await _manager.ChampionsMgr.GetItemByName(champion.Name, 0, await _manager.ChampionsMgr.GetNbItems())); - if (dtos2.IsNullOrEmpty() || dtos2.Count() > 0) - { - return BadRequest("Name is already exist"); - } - } - return Ok((await _manager.ChampionsMgr.UpdateItem(dtos.First(), champion.ToModel())).ToDto()); - } - catch (Exception error) - { - return BadRequest(error.Message); - } - } - - [HttpGet("/{name}/skins")] - public async Task> GetChampionsSkins(string name) - { - try - { - _logger.LogInformation("method {Action} call with {name}", nameof(GetChampionsSkins), name); - var champions = await _manager.ChampionsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems()); - //skinsDTO - IEnumerable res = champions.First().Skins.Select(e => e.ToDto()); - - return Ok(res); - } - catch (Exception error) - { - return BadRequest(error.Message); - } - } - - [HttpGet("/{name}/skills")] - public async Task> GetChampionsSkills(string name) - { - try - { - _logger.LogInformation("method {Action} call with {name}", nameof(GetChampionsSkills), name); - var champions = await _manager.ChampionsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems()); - //SkillDTO - IEnumerable res = champions.First().Skills.Select(e => e.ToDto()); - - return Ok(res); - } - catch (Exception error) - { - return BadRequest(error.Message); - } - } - - // DELETE api//5 - [HttpDelete("{name}")] - public async Task Delete(string name) - { - try - { - _logger.LogInformation("method {Action} call with {name}", nameof(Delete), name); - var dtos = (await _manager.ChampionsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems())); - if (dtos.IsNullOrEmpty()) - { - _logger.LogWarning("{name} was not found", name); - return BadRequest(); - } - return Ok(await _manager.ChampionsMgr.DeleteItem(dtos.First())); - } - catch (Exception error) - { - return BadRequest(error.Message); - } - } - } +using ApiLol.Mapper; +using Azure.Core; +using DTO; +using Microsoft.AspNetCore.Mvc; +using Microsoft.IdentityModel.Tokens; +using Model; + +// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 + +namespace ApiLol.Controllers.v2 +{ + [ApiVersion("2.0")] + [ApiVersion("3.0")] + [Route("api/v{version:apiVersion}/[controller]")] + [ApiController] + public class ChampionsController : ControllerBase + { + private readonly IDataManager _manager; + private readonly ILogger _logger; + public ChampionsController(IDataManager dataManager, ILogger logger) + { + _logger = logger; + this._manager = dataManager; + } + + // GET: api/ + [HttpGet] + public async Task Get([FromQuery] PageRequest pageRequest) + { + _logger.LogInformation("Executing {Action} - CHAMPION - V2.0 with parameters: {Parameters}", nameof(Get), pageRequest); + try + { + int nbTotal = await _manager.ChampionsMgr.GetNbItems(); + if (pageRequest.count == 0) + { + pageRequest = new PageRequest() { index = 0, count = nbTotal, orderingPropertyName = pageRequest.orderingPropertyName, descending = pageRequest.descending, name = pageRequest.name }; + } + else if (pageRequest.count * pageRequest.index >= nbTotal) + { + _logger.LogWarning($"too many, maximum {nbTotal}"); + return BadRequest($"Champion limit exceed, max {nbTotal}"); + } + + IEnumerable dtos = (await _manager.ChampionsMgr.GetItems(pageRequest.index, pageRequest.count)) + .Select(x => x.ToDto()); + return Ok(dtos); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + // GET: api/ + [HttpGet, MapToApiVersion("3.0")] + public async Task GetV3([FromQuery] PageRequest pageRequest) + { + _logger.LogInformation("Executing {Action} - CHAMPION - V3.0 with parameters: {Parameters}", nameof(Get), pageRequest); + try + { + int nbTotal = await _manager.ChampionsMgr.GetNbItems(); + if (pageRequest.count == 0) + { + pageRequest = new PageRequest() { index = 0, count = nbTotal, orderingPropertyName = pageRequest.orderingPropertyName, descending = pageRequest.descending, name = pageRequest.name }; + } + else if (pageRequest.count * pageRequest.index >= nbTotal || pageRequest.count > nbTotal) + { + _logger.LogWarning("too many, maximum {number}", nbTotal); + return BadRequest($"Champion limit exceed, max {nbTotal}"); + } + + IEnumerable dtos; + if (pageRequest.name == null) + { + dtos = (await _manager.ChampionsMgr.GetItems(pageRequest.index, pageRequest.count, pageRequest.orderingPropertyName, pageRequest.descending)) + .Select(x => x.ToDto()); + } + else + { + dtos = (await _manager.ChampionsMgr.GetItemsByName(pageRequest.name, pageRequest.index, pageRequest.count, pageRequest.orderingPropertyName, pageRequest.descending)) + .Select(x => x.ToDto()); + } + return Ok(new { Data = dtos, index = pageRequest.index, count = pageRequest.count, total = nbTotal }); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + // GET api//5 + [HttpGet("{name}")] + public async Task Get(string name) + { + _logger.LogInformation("method {Action} - CHAMPION - V2.0 call with {name}", nameof(Get), name); + try + { + var dtos = (await _manager.ChampionsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems())) + .Select(x => x.ToDto()); + if (dtos.IsNullOrEmpty()) + { + _logger.LogWarning($"{name} was not found"); + return NotFound($"{name} was not found"); + } + return Ok(dtos.First()); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + // POST api/ + [HttpPost] + public async Task Post([FromBody] ChampionDto champion) + { + _logger.LogInformation("method {Action} - CHAMPION - V2.0 call with {item}", nameof(Post), champion); + try + { + if (await _manager.ChampionsMgr.GetNbItemsByName(champion.Name) == 0) + { + return CreatedAtAction(nameof(Get), + (await _manager.ChampionsMgr.AddItem(champion.ToModel())).ToDto()); + } + _logger.LogWarning($"Name : {champion.Name} is already exist"); + return BadRequest($"Name : {champion.Name} is already exist"); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + // PUT api//5 + [HttpPut("{name}")] + public async Task Put(string name, [FromBody] ChampionDto champion) + { + _logger.LogInformation("method {Action} - CHAMPION - V2.0 call with {name} and {item}", nameof(Put), name, champion); + try + { + var dtos = (await _manager.ChampionsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems())); + if (dtos.IsNullOrEmpty()) + { + return NotFound($"Name {name} not exist"); + } + // Checks if the new name exists + if (name != champion.Name) + { + var dtos2 = (await _manager.ChampionsMgr.GetItemByName(champion.Name, 0, await _manager.ChampionsMgr.GetNbItems())); + if (dtos2.IsNullOrEmpty() || dtos2.Count() > 0) + { + return BadRequest($"New Name {champion.Name} is already exist"); + } + } + return Ok((await _manager.ChampionsMgr.UpdateItem(dtos.First(), champion.ToModel())).ToDto()); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + [HttpGet("/{name}/skins")] + public async Task> GetChampionsSkins(string name) + { + _logger.LogInformation("method {Action} - CHAMPION - V2.0 call with {name}", nameof(GetChampionsSkins), name); + try + { + var champions = await _manager.ChampionsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems()); + //skinsDTO + IEnumerable res = champions.First().Skins.Select(e => e.ToDto()); + + return Ok(res); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + [HttpGet("/{name}/skills")] + public async Task> GetChampionsSkills(string name) + { + try + { + _logger.LogInformation("method {Action} - CHAMPION - V2.0 call with {name}", nameof(GetChampionsSkills), name); + var champions = await _manager.ChampionsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems()); + //SkillDTO + IEnumerable res = champions.First().Skills.Select(e => e.ToDto()); + + return Ok(res); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + [HttpGet("/countChampions")] + public async Task> GetCountChampions() + { + try + { + return Ok(await _manager.ChampionsMgr.GetNbItems()); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + + // DELETE api//5 + [HttpDelete("{name}")] + public async Task Delete(string name) + { + _logger.LogInformation("method {Action} - CHAMPION - V2.0 call with {name}", nameof(Delete), name); + try + { + var dtos = (await _manager.ChampionsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems())); + if (dtos.IsNullOrEmpty()) + { + _logger.LogWarning("{name} was not found", name); + return BadRequest(); + } + return Ok(await _manager.ChampionsMgr.DeleteItem(dtos.First())); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } + } + } } \ No newline at end of file diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/RuneMapper.cs b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/RuneMapper.cs index 276d0ac..af4640e 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/RuneMapper.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/RuneMapper.cs @@ -1,4 +1,5 @@ -using DTO; +using ApiLol.Mapper.enums; +using DTO; using Model; namespace ApiLol.Mapper @@ -11,15 +12,15 @@ namespace ApiLol.Mapper { Name = rune.Name, Description = rune.Description, + Family = rune.Family.ToDto(), + Icon = rune.Icon, + Image = rune.Image.ToDto() }; } -/* public static Rune ToModel(this RuneDto runeDto) + public static Rune ToModel(this RuneDto rune) { - return new Rune(rune.Name) - { - Description = rune.Description, - }; - }*/ + return new Rune(rune.Name, rune.Family.ToModel(), rune.Icon, rune.Image.Base64, rune.Description); + } } } diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/SkinMapper.cs b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/SkinMapper.cs index 9b5273b..776209e 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/SkinMapper.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/SkinMapper.cs @@ -35,5 +35,10 @@ namespace ApiLol.Mapper return new Skin(skinDto.Name, champ, skinDto.Price, skinDto.Icon, skinDto.Image.Base64, skinDto.Description); } + public static Skin ToModelC(this SkinDtoC skinDto, Champion champ) + { + return new Skin(skinDto.Name, champ, skinDto.Price, skinDto.Icon, skinDto.Image.Base64, skinDto.Description); + } + } } \ No newline at end of file diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/ChampionClassMapper.cs b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/ChampionClassMapper.cs index 35339f5..a61f12f 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/ChampionClassMapper.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/ChampionClassMapper.cs @@ -1,4 +1,4 @@ -using DTO; +using DTO; using Model; namespace ApiLol.Mapper @@ -7,73 +7,46 @@ namespace ApiLol.Mapper { public static ChampionClassDto ToDto(this ChampionClass championClass) { - if (championClass == ChampionClass.Unknown) - { - return ChampionClassDto.Unknown; - } - if (championClass == ChampionClass.Assassin) - { - return ChampionClassDto.Assassin; - } - if (championClass == ChampionClass.Fighter) - { - return ChampionClassDto.Fighter; - } - if (championClass == ChampionClass.Mage) - { - return ChampionClassDto.Mage; - } - if (championClass == ChampionClass.Marksman) - { - return ChampionClassDto.Marksman; - } - if (championClass == ChampionClass.Support) - { - return ChampionClassDto.Support; - } - if (championClass == ChampionClass.Tank) - { - return ChampionClassDto.Tank; - } - else - { - return ChampionClassDto.Unknown; + switch (championClass) + { + case ChampionClass.Unknown: + return ChampionClassDto.Unknown; + case ChampionClass.Assassin: + return ChampionClassDto.Assassin; + case ChampionClass.Fighter: + return ChampionClassDto.Fighter; + case ChampionClass.Mage: + return ChampionClassDto.Mage; + case ChampionClass.Marksman: + return ChampionClassDto.Marksman; + case ChampionClass.Support: + return ChampionClassDto.Support; + case ChampionClass.Tank: + return ChampionClassDto.Tank; + default: + return ChampionClassDto.Unknown; } - } public static ChampionClass ToModel(this ChampionClassDto championClass) { - if (championClass == ChampionClassDto.Unknown) - { - return ChampionClass.Unknown; - } - if (championClass == ChampionClassDto.Assassin) - { - return ChampionClass.Assassin; - } - if (championClass == ChampionClassDto.Fighter) - { - return ChampionClass.Fighter; - } - if (championClass == ChampionClassDto.Mage) - { - return ChampionClass.Mage; - } - if (championClass == ChampionClassDto.Marksman) - { - return ChampionClass.Marksman; - } - if (championClass == ChampionClassDto.Support) - { - return ChampionClass.Support; - } - if (championClass == ChampionClassDto.Tank) - { - return ChampionClass.Tank; - } - else - { - return ChampionClass.Unknown; + switch (championClass) + { + case ChampionClassDto.Unknown: + return ChampionClass.Unknown; + case ChampionClassDto.Assassin: + return ChampionClass.Assassin; + case ChampionClassDto.Fighter: + return ChampionClass.Fighter; + case ChampionClassDto.Mage: + return ChampionClass.Mage; + case ChampionClassDto.Marksman: + return ChampionClass.Marksman; + case ChampionClassDto.Support: + return ChampionClass.Support; + case ChampionClassDto.Tank: + return ChampionClass.Tank; + default: + return ChampionClass.Unknown; } } } diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/RuneFamilyMapper.cs b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/RuneFamilyMapper.cs new file mode 100644 index 0000000..00f550e --- /dev/null +++ b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/RuneFamilyMapper.cs @@ -0,0 +1,39 @@ +using DTO; +using DTO.enums; +using Model; + +namespace ApiLol.Mapper.enums +{ + public static class RuneFamilyMapper + { + public static RuneFamilyDto ToDto(this RuneFamily runeFamily) + { + switch (runeFamily) + { + case RuneFamily.Unknown: + return RuneFamilyDto.Unknown; + case RuneFamily.Precision: + return RuneFamilyDto.Precision; + case RuneFamily.Domination: + return RuneFamilyDto.Domination; + default: + return RuneFamilyDto.Unknown; + } + } + + public static RuneFamily ToModel(this RuneFamilyDto runeFamily) + { + switch (runeFamily) + { + case RuneFamilyDto.Unknown: + return RuneFamily.Unknown; + case RuneFamilyDto.Precision: + return RuneFamily.Precision; + case RuneFamilyDto.Domination: + return RuneFamily.Domination; + default: + return RuneFamily.Unknown; + } + } + } +} diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/SkillTypeMapper.cs b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/SkillTypeMapper.cs index ace0c98..c21be45 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/SkillTypeMapper.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/SkillTypeMapper.cs @@ -7,49 +7,35 @@ namespace ApiLol.Mapper { public static SkillTypeDto ToDto(this SkillType skillType) { - if (skillType == SkillType.Unknown) - { - return SkillTypeDto.Unknown; - } - if (skillType == SkillType.Basic) - { - return SkillTypeDto.Basic; - } - if (skillType == SkillType.Passive) - { - return SkillTypeDto.Passive; - } - if (skillType == SkillType.Ultimate) - { - return SkillTypeDto.Ultimate; - } - else - { - return SkillTypeDto.Unknown; + switch (skillType) + { + case SkillType.Unknown: + return SkillTypeDto.Unknown; + case SkillType.Basic: + return SkillTypeDto.Basic; + case SkillType.Passive: + return SkillTypeDto.Passive; + case SkillType.Ultimate: + return SkillTypeDto.Ultimate; + default: + return SkillTypeDto.Unknown; } } public static SkillType ToModel(this SkillTypeDto skillTypeDto) { - if (skillTypeDto == SkillTypeDto.Unknown) - { - return SkillType.Unknown; - } - if (skillTypeDto == SkillTypeDto.Basic) - { - return SkillType.Basic; - } - if (skillTypeDto == SkillTypeDto.Passive) - { - return SkillType.Passive; - } - if (skillTypeDto == SkillTypeDto.Ultimate) - { - return SkillType.Ultimate; - } - else - { - return SkillType.Unknown; + switch (skillTypeDto) + { + case SkillTypeDto.Unknown: + return SkillType.Unknown; + case SkillTypeDto.Basic: + return SkillType.Basic; + case SkillTypeDto.Passive: + return SkillType.Passive; + case SkillTypeDto.Ultimate: + return SkillType.Ultimate; + default: + return SkillType.Unknown; } } diff --git a/src/EntityFramework_LoL/Sources/Client/ChampionHttpClient.cs b/src/EntityFramework_LoL/Sources/Client/ChampionHttpClient.cs index deae099..0ea6c35 100644 --- a/src/EntityFramework_LoL/Sources/Client/ChampionHttpClient.cs +++ b/src/EntityFramework_LoL/Sources/Client/ChampionHttpClient.cs @@ -10,17 +10,17 @@ namespace Client { public class ChampionHttpClient { - private const string ApiChampions = "api/champions"; + private const string UrlApiChampions = "/api/v3/champions"; private readonly HttpClient _httpClient; public ChampionHttpClient(HttpClient httpClient) { _httpClient = httpClient; - httpClient.BaseAddress = new Uri("https://localhost:7252;http://localhost:5252"); + httpClient.BaseAddress = new Uri("https://localhost:7252"); } public async Task> GetChampion(int index, int count) { - var url = $"{ApiChampions}?index={index}&count={count}"; + var url = $"{UrlApiChampions}?index={index}&count={count}"; return await _httpClient.GetFromJsonAsync>(url); } /* public async void Add(ChampionDto champion) diff --git a/src/EntityFramework_LoL/Sources/Client/Program.cs b/src/EntityFramework_LoL/Sources/Client/Program.cs index fdff83d..e0dab23 100644 --- a/src/EntityFramework_LoL/Sources/Client/Program.cs +++ b/src/EntityFramework_LoL/Sources/Client/Program.cs @@ -3,7 +3,6 @@ using Client; using DTO; Console.WriteLine("Hello, World!"); - var championClient = new ChampionHttpClient(new HttpClient()); // Get all champions diff --git a/src/EntityFramework_LoL/Sources/DTO/PageRequest.cs b/src/EntityFramework_LoL/Sources/DTO/PageRequest.cs index a947eb9..2631eee 100644 --- a/src/EntityFramework_LoL/Sources/DTO/PageRequest.cs +++ b/src/EntityFramework_LoL/Sources/DTO/PageRequest.cs @@ -10,6 +10,7 @@ namespace DTO { public int index { get; set; } = 0; public int count { get; set; } = 0; + public string? name { get; set; } = null; public string? orderingPropertyName { get; set; } = "Name"; public bool descending { get; set; } = false; } diff --git a/src/EntityFramework_LoL/Sources/DTO/RuneDto.cs b/src/EntityFramework_LoL/Sources/DTO/RuneDto.cs index 5f463b6..9b20766 100644 --- a/src/EntityFramework_LoL/Sources/DTO/RuneDto.cs +++ b/src/EntityFramework_LoL/Sources/DTO/RuneDto.cs @@ -12,6 +12,7 @@ namespace DTO public string Name { get; set; } public string Description { get; set; } public RuneFamilyDto Family { get; set; } + public string Icon { get; set; } public LargeImageDto Image { get; set; } } diff --git a/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTest.cs b/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTest.cs index 078a64a..8613e57 100644 --- a/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTest.cs +++ b/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTest.cs @@ -1,127 +1,127 @@ -using ApiLol.Controllers; -using ApiLol.Controllers.v2; -using DTO; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Abstractions; -using StubLib; - -namespace ApiTests -{ - [TestClass] - public class ChampionsControllerTest - { - private readonly StubData stub; - private readonly ChampionsController champs; - public ChampionsControllerTest() - { - stub = new StubData(); - champs = new ChampionsController(stub, new NullLogger()); - } - - [TestMethod] - public async Task TestGetChampions() - { - //Arrange - - //Act - var total = await stub.ChampionsMgr.GetNbItems(); - var champion = await champs.Get(new PageRequest()); - - //Assert - var objectResult = champion as OkObjectResult; - Assert.IsNotNull(objectResult); - - var champions = objectResult?.Value as IEnumerable; - Assert.IsNotNull(champions); - - Assert.AreEqual(champions.Count(), total); - - } - - [TestMethod] - public async Task TestPostChampion() - { - //Arange - var ChampionDto = new ChampionDto - { - Name = "Sylas", - Bio = "Good", - Class = ChampionClassDto.Tank, - Icon = "", - Image = new LargeImageDto() { Base64 = "" }, - Skins = new List() - }; - - //Act - var championsResult = await champs.Post(ChampionDto); - - //Assert - var objectResult = championsResult as CreatedAtActionResult; - Assert.IsNotNull(objectResult); - - var champions = objectResult?.Value as ChampionDto; - Assert.IsNotNull(champions); - +using ApiLol.Controllers; +using ApiLol.Controllers.v2; +using DTO; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using StubLib; + +namespace ApiTests +{ + [TestClass] + public class ChampionsControllerTest + { + private readonly StubData stub; + private readonly ChampionsController champs; + public ChampionsControllerTest() + { + stub = new StubData(); + champs = new ChampionsController(stub, new NullLogger()); } - [TestMethod] - public async Task TestPutChampion() + [TestMethod] + public async Task TestGetChampions() + { + //Arrange + + //Act + var total = await stub.ChampionsMgr.GetNbItems(); + var champion = await champs.Get(new PageRequest()); + + //Assert + var objectResult = champion as OkObjectResult; + Assert.IsNotNull(objectResult); + + var champions = objectResult?.Value as IEnumerable; + Assert.IsNotNull(champions); + + Assert.AreEqual(champions.Count(), total); + + } + + [TestMethod] + public async Task TestPostChampion() { //Arange - var ChampionDto = new ChampionDto - { - Name = "Sylas", - Bio = "Good", - Class = ChampionClassDto.Tank, - Icon = "", - Image = new LargeImageDto() { Base64 = "" }, - Skins = new List() + var ChampionDto = new ChampionDto + { + Name = "Sylas", + Bio = "Good", + Class = ChampionClassDto.Tank, + Icon = "", + Image = new LargeImageDto() { Base64 = "" }, + Skins = new List() }; - var ChampionDtoPut = new ChampionDto - { - Name = "Sylas", - Bio = "Bad", - Class = ChampionClassDto.Tank, - Icon = "", - Image = new LargeImageDto() { Base64 = "" }, - Skins = new List() - }; - - //Act - await champs.Post(ChampionDto); + + //Act + var championsResult = await champs.Post(ChampionDto); + + //Assert + var objectResult = championsResult as CreatedAtActionResult; + Assert.IsNotNull(objectResult); + + var champions = objectResult?.Value as ChampionDto; + Assert.IsNotNull(champions); + + } + + [TestMethod] + public async Task TestPutChampion() + { + //Arange + var ChampionDto = new ChampionDto + { + Name = "Sylas", + Bio = "Good", + Class = ChampionClassDto.Tank, + Icon = "", + Image = new LargeImageDto() { Base64 = "" }, + Skins = new List() + }; + var ChampionDtoPut = new ChampionDto + { + Name = "Sylas", + Bio = "Bad", + Class = ChampionClassDto.Tank, + Icon = "", + Image = new LargeImageDto() { Base64 = "" }, + Skins = new List() + }; + + //Act + await champs.Post(ChampionDto); var championsResult = await champs.Put(ChampionDto.Name, ChampionDtoPut); //Assert - var objectResult = championsResult as OkObjectResult; + var objectResult = championsResult as OkObjectResult; Assert.IsNotNull(objectResult); - var champions = objectResult?.Value as ChampionDto; - Assert.IsNotNull(champions); - + var champions = objectResult?.Value as ChampionDto; + Assert.IsNotNull(champions); + Assert.AreNotEqual(ChampionDto.Bio, champions.Bio); - Assert.AreEqual(ChampionDtoPut.Bio, champions.Bio); - + Assert.AreEqual(ChampionDtoPut.Bio, champions.Bio); + } - [TestMethod] - public async Task TestDeleteChampion() + [TestMethod] + public async Task TestDeleteChampion() { //Arange //Act - var total = await stub.ChampionsMgr.GetNbItems(); - var championsResult = await champs.Delete("Akali"); - - //Assert - var objectResult = championsResult as OkObjectResult; - Assert.IsNotNull(objectResult); - + var total = await stub.ChampionsMgr.GetNbItems(); + var championsResult = await champs.Delete("Akali"); + + //Assert + var objectResult = championsResult as OkObjectResult; + Assert.IsNotNull(objectResult); + Assert.AreEqual(objectResult.Value, true); - Assert.AreNotEqual(await stub.ChampionsMgr.GetNbItems(), total); - - } - - } + Assert.AreNotEqual(await stub.ChampionsMgr.GetNbItems(), total); + + } + + } } \ No newline at end of file diff --git a/src/EntityFramework_LoL/Sources/Tests/ApiTests/SkinsControllerTest.cs b/src/EntityFramework_LoL/Sources/Tests/ApiTests/SkinsControllerTest.cs new file mode 100644 index 0000000..1cc4c36 --- /dev/null +++ b/src/EntityFramework_LoL/Sources/Tests/ApiTests/SkinsControllerTest.cs @@ -0,0 +1,126 @@ +using ApiLol.Controllers; +using DTO; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging.Abstractions; +using StubLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ApiTests +{ + [TestClass] + public class SkinsControllerTest + { + private readonly StubData stub; + private readonly SkinsController skins; + public SkinsControllerTest() + { + stub = new StubData(); + skins = new SkinsController(stub, new NullLogger()); + } + +/* [TestMethod] + public async Task TestGetSkins() + { + //Arrange + + //Act + var total = await stub.SkinsMgr.GetNbItems(); + var skin = await skins.Get(new PageRequest()); + + //Assert + var objectResult = skin as OkObjectResult; + Assert.IsNotNull(objectResult); + + var skinsResult = objectResult?.Value as IEnumerable; + Assert.IsNotNull(skinsResult); + + Assert.AreEqual(skinsResult.Count(), total); + + }*/ + +/* [TestMethod] + public async Task TestPostSkin() + { + //Arange + var SkinDto = new SkinDtoC + { + Name = "Project", + ChampionName = "Aatrox" + }; + + //Act + var skinsResult = await skins.Post(SkinDto); + + //Assert + var objectResult = skinsResult as CreatedAtActionResult; + Assert.IsNotNull(objectResult); + + var champions = objectResult?.Value as Ski; + Assert.IsNotNull(champions); + + }*/ + +/* [TestMethod] + public async Task TestPutSkin() + { + //Arange + var ChampionDto = new ChampionDto + { + Name = "Sylas", + Bio = "Good", + Class = ChampionClassDto.Tank, + Icon = "", + Image = new LargeImageDto() { Base64 = "" }, + Skins = new List() + }; + var ChampionDtoPut = new ChampionDto + { + Name = "Sylas", + Bio = "Bad", + Class = ChampionClassDto.Tank, + Icon = "", + Image = new LargeImageDto() { Base64 = "" }, + Skins = new List() + }; + + //Act + await champs.Post(ChampionDto); + var championsResult = await champs.Put(ChampionDto.Name, ChampionDtoPut); + + //Assert + var objectResult = championsResult as OkObjectResult; + Assert.IsNotNull(objectResult); + + var champions = objectResult?.Value as ChampionDto; + Assert.IsNotNull(champions); + + Assert.AreNotEqual(ChampionDto.Bio, champions.Bio); + Assert.AreEqual(ChampionDtoPut.Bio, champions.Bio); + + } + + [TestMethod] + public async Task TestDeleteChampion() + { + //Arange + + + //Act + var total = await stub.ChampionsMgr.GetNbItems(); + var championsResult = await champs.Delete("Akali"); + + //Assert + var objectResult = championsResult as OkObjectResult; + Assert.IsNotNull(objectResult); + + Assert.AreEqual(objectResult.Value, true); + Assert.AreNotEqual(await stub.ChampionsMgr.GetNbItems(), total); + + }*/ + + } +} diff --git a/src/EntityFramework_LoL/Sources/Tests/UT_EF/ChampionsTest.cs b/src/EntityFramework_LoL/Sources/Tests/UT_EF/ChampionsTest.cs index 1e5086d..6e44013 100644 --- a/src/EntityFramework_LoL/Sources/Tests/UT_EF/ChampionsTest.cs +++ b/src/EntityFramework_LoL/Sources/Tests/UT_EF/ChampionsTest.cs @@ -4,7 +4,7 @@ using Xunit; namespace UT_EF { - public class UnitTest1 + public class ChampionsTest { [Fact] public void TestAdd()