using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using TechStart.ECommerce.Services;
using TechStart.ECommerce.Models;
namespace TechStart.ECommerce.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class ProductController : ControllerBase
{
private readonly IProductService _productService;
private readonly ILogger<ProductController> _logger;
private readonly ICacheService _cache;
public ProductController(
IProductService productService,
ILogger<ProductController> logger,
ICacheService cache)
{
_productService = productService;
_logger = logger;
_cache = cache;
}
[HttpGet]
public async Task<IActionResult> GetProducts(
[FromQuery] int page = 1,
[FromQuery] int pageSize = 20,
[FromQuery] string category = null)
{
var cacheKey = $"products_{page}_{pageSize}_{category}";
var cachedResult = await _cache.GetAsync<ProductListResponse>(cacheKey);
if (cachedResult != null)
{
return Ok(cachedResult);
}
var products = await _productService
.GetPaginatedAsync(page, pageSize, category);
_logger.LogInformation(
"Retrieved {Count} products for page {Page}",
products.Items.Count, page);
await _cache.SetAsync(cacheKey, products, TimeSpan.FromMinutes(5));
return Ok(products);
}
}
}