using Microsoft.AspNetCore.Mvc; namespace Distribution.Features.StockReport; [ApiController] [Route("api/reports/stock")] public class StockReportController(StockReportService service) : ControllerBase { [HttpGet("overview")] public async Task Overview([FromQuery] Guid? locationId, [FromQuery] int expiryDays = 30) { var error = StockReportService.ValidateExpiry(expiryDays, 1, 1); return error is null ? Ok(await service.GetOverviewAsync(locationId, expiryDays)) : BadRequest(new { message = error }); } [HttpGet("ledger")] public async Task Ledger( [FromQuery] Guid? locationId, [FromQuery] Guid? categoryId, [FromQuery] Guid? brandId, [FromQuery] DateTime? from, [FromQuery] DateTime? to, [FromQuery] string? status = null, [FromQuery] bool activeOnly = true, [FromQuery] string? search = null, [FromQuery] int page = 1, [FromQuery] int pageSize = 50) { var end = (to ?? DateTime.Now).Date; var start = (from ?? end.AddDays(-30)).Date; var f = new StockReportFilter(locationId, categoryId, brandId, search, start, end, status, activeOnly); var error = StockReportService.Validate(f, page, pageSize); return error is null ? Ok(await service.GetLedgerAsync(f, page, pageSize)) : BadRequest(new { message = error }); } [HttpGet("expiry")] public async Task Expiry( [FromQuery] Guid? locationId, [FromQuery] string? search = null, [FromQuery] int days = 30, [FromQuery] int page = 1, [FromQuery] int pageSize = 50) { var error = StockReportService.ValidateExpiry(days, page, pageSize); return error is null ? Ok(await service.GetExpiryAsync(locationId, search, days, page, pageSize)) : BadRequest(new { message = error }); } }