using Core.Entities; using Microsoft.AspNetCore.Mvc; using Core.Interfaces; using Core.Specifications; using API.Dtos; using AutoMapper; namespace API.Controllers { public class ProductsController : BaseApiController { private readonly IGenericRepository _productsRepo; private readonly IGenericRepository _productBrandRepo; private readonly IGenericRepository _productTypeRepo; private readonly IMapper _mapper; public ProductsController(IGenericRepository productsRepo, IGenericRepository productBrandRepo, IGenericRepository productTypeRepo, IMapper mapper) { _mapper = mapper; _productTypeRepo = productTypeRepo; _productBrandRepo = productBrandRepo; _productsRepo = productsRepo; } [HttpGet] public async Task>> GetProducts() { var spec = new ProductsWithTypesAndBrandsSpecification(); var products = await _productsRepo.ListAsync(spec); return Ok(_mapper.Map, IReadOnlyList>(products)); } [HttpGet("{id}")] public async Task> GetProduct(int id) { var spec = new ProductsWithTypesAndBrandsSpecification(id); var product = await _productsRepo.GetEntityWithSpec(spec); return _mapper.Map(product); } [HttpGet("brands")] public async Task>> GetProductBrands() { return Ok(await _productBrandRepo.ListAllAsync()); } [HttpGet("types")] public async Task>> GetProductTypes() { return Ok(await _productTypeRepo.ListAllAsync()); } } }