/
korotkova_user
/
techshopapi
Обзор
Документация
Войти
/
korotkova_user
/
techshopapi
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
Controllers/ProductsController.cs
176 строк
5 KB
arian438
Первый коммит: проект techshopAPI
18 фев 2026, 10:28
18 фев 2026, 10:28
e998fa9
Код
Авторство
О чём код?
using Microsoft.AspNetCore.Mvc; using techshopAPI.DTOs; using techshopAPI.Services; namespace techshopAPI.Controllers { [Route("api/[controller]")] [ApiController] public class ProductsController : ControllerBase { private readonly IProductService _productService; private readonly ILogger<ProductsController> _logger; public ProductsController(IProductService productService, ILogger<ProductsController> logger) { _productService = productService; _logger = logger; } // GET: api/products [HttpGet] public async Task<ActionResult<IEnumerable<ProductDto>>> GetProducts() { try { var products = await _productService.GetAllProductsAsync(); return Ok(products); } catch (Exception ex) { _logger.LogError(ex, "Error getting all products"); return StatusCode(500, "Internal server error"); } } // GET: api/products/{id} [HttpGet("{id}")] public async Task<ActionResult<ProductDto>> GetProduct(int id) { try { var product = await _productService.GetProductByIdAsync(id); if (product == null) { return NotFound($"Product with ID {id} not found"); } return Ok(product); } catch (Exception ex) { _logger.LogError(ex, "Error getting product with ID {Id}", id); return StatusCode(500, "Internal server error"); } } // GET: api/products/category/{category} [HttpGet("category/{category}")] public async Task<ActionResult<IEnumerable<ProductDto>>> GetProductsByCategory(string category) { try { var products = await _productService.GetProductsByCategoryAsync(category); return Ok(products); } catch (Exception ex) { _logger.LogError(ex, "Error getting products by category {Category}", category); return StatusCode(500, "Internal server error"); } } // GET: api/products/instock [HttpGet("instock")] public async Task<ActionResult<IEnumerable<ProductDto>>> GetProductsInStock() { try { var products = await _productService.GetProductsInStockAsync(); return Ok(products); } catch (Exception ex) { _logger.LogError(ex, "Error getting products in stock"); return StatusCode(500, "Internal server error"); } } // GET: api/products/discounted [HttpGet("discounted")] public async Task<ActionResult<IEnumerable<ProductDto>>> GetProductsWithDiscount() { try { var products = await _productService.GetProductsWithDiscountAsync(); return Ok(products); } catch (Exception ex) { _logger.LogError(ex, "Error getting products with discount"); return StatusCode(500, "Internal server error"); } } // POST: api/products [HttpPost] public async Task<ActionResult<ProductDto>> CreateProduct(CreateProductDto createDto) { try { if (!ModelState.IsValid) { return BadRequest(ModelState); } var product = await _productService.CreateProductAsync(createDto); return CreatedAtAction(nameof(GetProduct), new { id = product.ID }, product); } catch (Exception ex) { _logger.LogError(ex, "Error creating product"); return StatusCode(500, "Internal server error"); } } // PUT: api/products/{id} [HttpPut("{id}")] public async Task<IActionResult> UpdateProduct(int id, UpdateProductDto updateDto) { try { if (!ModelState.IsValid) { return BadRequest(ModelState); } var updatedProduct = await _productService.UpdateProductAsync(id, updateDto); if (updatedProduct == null) { return NotFound($"Product with ID {id} not found"); } return Ok(updatedProduct); } catch (Exception ex) { _logger.LogError(ex, "Error updating product with ID {Id}", id); return StatusCode(500, "Internal server error"); } } // DELETE: api/products/{id} [HttpDelete("{id}")] public async Task<IActionResult> DeleteProduct(int id) { try { var result = await _productService.DeleteProductAsync(id); if (!result) { return NotFound($"Product with ID {id} not found"); } return NoContent(); } catch (Exception ex) { _logger.LogError(ex, "Error deleting product with ID {Id}", id); return StatusCode(500, "Internal server error"); } } } }