You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

153 lines
5.4 KiB

using ApiLol.DTO;
using ApiLol.Mapping;
using Microsoft.AspNetCore.Mvc;
using Model;
using StubLib;
using System.Data;
using System.Text;
namespace API.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class RuneController : Controller
{
private readonly ILogger<RuneController> _logger;
private IDataManager dataManager = new StubData();
public RuneController(ILogger<RuneController> logger)
{
_logger = logger;
}
[HttpGet("GetRune/{name}")]
public async Task<ActionResult<IEnumerable<RuneDTO>>> GetRune(string name, int nb=3, int index = 0)
{
var runes = await dataManager.RunesMgr.GetItemsByName(name, index, nb);
if (!runes.Any())
{
_logger.Log(LogLevel.Warning, $"La rune {name} n'existe pas");
return BadRequest(name);
}
else
{
_logger.Log(LogLevel.Information, $"Les runes avec {name} ont été envoyées");
return Ok(runes.Select(x => x?.ToDto()));
}
}
[HttpGet("GetRunes")]
public async Task<ActionResult<IEnumerable<RuneDTO>>> GetRunes(int nb = 15)
{
var runes = await dataManager.RunesMgr.GetItems(0, nb);
return Ok(runes.Select(x => x?.ToDto()));
}
[HttpPost("PostRune")]
public async Task<ActionResult<RuneDTO?>> PostRune(RuneDTO rune)
{
var r = await dataManager.RunesMgr.AddItem(rune.ToPoco());
if (r != null)
{
_logger.Log(LogLevel.Information, $"La Rune {rune.Name} a été ajouté à la base");
return Ok(r.ToDto());
}
return BadRequest(r);
}
[HttpPost("PostRunes")]
public async Task<ActionResult<IEnumerable<RuneDTO>>> PostRunes(List<RuneDTO> runes)
{
var l = new List<RuneDTO>();
foreach (RuneDTO rune in runes)
{
var r = await dataManager.RunesMgr.AddItem(rune.ToPoco());
if (r != null)
{
l.Add(r.ToDto());
_logger.Log(LogLevel.Information, $"La Rune {rune.Name} a été ajoutée à la base");
}
else
{
_logger.Log(LogLevel.Warning, $"La Rune {rune.Name} recherchée n'existe pas ou il y en a plusieurs avec ce nom");
}
}
return Ok(l);
}
[HttpPut("PutRune")]
public async Task<ActionResult<RuneDTO>> PutRune(RuneDTO rune)
{
var ancienne = await dataManager.RunesMgr.GetItemsByName(rune.Name, 0, 1);
if (ancienne.Count() != 1)
{
_logger.Log(LogLevel.Warning, $"La Rune {rune.Name} recherchée n'existe pas ou il y en a plusieurs avec ce nom");
return BadRequest(rune);
}
else
{
await dataManager.RunesMgr.UpdateItem(ancienne.FirstOrDefault(), rune.ToPoco());
_logger.Log(LogLevel.Information, $"La Rune {rune.Name} a été modifiée de la base");
var r = await dataManager.RunesMgr.GetItemsByName(rune.Name, 0, 1);
return Ok(r.First());
}
}
[HttpPut("PutRunes")]
public async Task<ActionResult<IEnumerable<RuneDTO>>> PutRunes(List<RuneDTO> runes, int nb = 10)
{
foreach (RuneDTO run in runes)
{
var rune = await dataManager.RunesMgr.GetItemsByName(run.Name, 0, 1);
if (!rune.Any())
{
_logger.Log(LogLevel.Warning, $"La Rune {run.Name} recherchée n'existe pas");
BadRequest(run);
}
else
{
await dataManager.RunesMgr.UpdateItem(rune.FirstOrDefault(), run.ToPoco());
_logger.Log(LogLevel.Information, $"La Rune {run.Name} a été modifiée de la base");
}
}
var Runes = await dataManager.RunesMgr.GetItems(0, nb);
return Ok(Runes.Select(x => x?.ToDto()));
}
[HttpDelete("DeleteRune")]
public async Task<ActionResult<Boolean>> DeleteRune(RuneDTO rune)
{
var retour = await dataManager.RunesMgr.DeleteItem(rune.ToPoco());
if (retour) {
_logger.Log(LogLevel.Information, $"La Rune {rune.Name} a été supprimée de la base");
return Ok(retour);
}
_logger.Log(LogLevel.Warning, $"La Rune {rune.Name} recherchée n'existe pas");
return BadRequest(retour);
}
[HttpDelete("DeleteRunes")]
public async Task<ActionResult<Boolean>> DeleteRunes(List<RuneDTO> runes)
{
foreach (RuneDTO run in runes)
{
var retour = await dataManager.RunesMgr.DeleteItem(run.ToPoco());
if (!retour)
{
_logger.Log(LogLevel.Warning, $"La Rune {run.Name} recherchée n'existe pas");
BadRequest(run);
}
else
{
_logger.Log(LogLevel.Information, $"La Rune {run.Name} a été supprimée de la base");
}
}
return Ok(true);
}
}
}