PIAPS_CW/RestAPI/Controllers/ProductController.cs

103 lines
3.1 KiB
C#

using BusinessLogic.BusinessLogic;
using Contracts.BindingModels;
using Contracts.BusinessLogicContracts;
using Contracts.Exceptions;
using Contracts.SearchModels;
using Contracts.ViewModels;
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
namespace RestAPI.Controllers
{
[Route("[controller]/[action]")]
[ApiController]
public class ProductController
{
private readonly ILogger _logger;
private readonly IProductLogic _product;
public ProductController(ILogger<ProductController> logger, IProductLogic productLogic)
{
_logger = logger;
_product = productLogic;
}
[HttpGet]
public List<ProductViewModel>? GetList(string? search, string? category, double? pricefrom, double? priceto)
{
try
{
if (string.IsNullOrEmpty(search) && string.IsNullOrEmpty(category) && pricefrom == null && priceto == null)
return _product.ReadList(null);
else
return _product.ReadList(new ProductSearchModel()
{
Name = search,
Category = category,
PriceFrom = pricefrom,
PriceTo = priceto
});
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка получения списка продуктов");
throw;
}
}
[HttpGet]
public ProductViewModel GetProduct(Guid id)
{
try
{
return _product.ReadElement(new ProductSearchModel() {Id = id});
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка получения продукта");
throw;
}
}
[HttpPatch]
public IResult Update([FromBody] ProductBindingModel model)
{
try
{
var res = _product.Update(model);
return Results.Ok(res);
}
catch (AccountException ex)
{
_logger.LogWarning(ex, "Wrong update data");
return Results.BadRequest(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error update user");
return Results.Problem(ex.Message);
}
}
[HttpDelete]
public IResult Delete(Guid id)
{
try
{
var res = _product.Delete(new() { Id = id });
return Results.Ok(res);
}
catch (ElementNotFoundException ex)
{
_logger.LogInformation(ex, "User not found");
return Results.NoContent();
}
catch (Exception ex)
{
_logger.LogError(ex, "Error delete user");
return Results.Problem(ex.Message);
}
}
}
}