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 logger, IProductLogic productLogic) { _logger = logger; _product = productLogic; } [HttpGet] public List? 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); } } } }