using Data.SeaHavenIndustries; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using SeaHaven.Services.Interfaces; namespace Api.SeaHavenIndustries.Controllers { [Authorize] [ApiController] [Route("api/[controller]")] [Route("api/dispatches")] public class DispatchController : Controller { private readonly IDispatchService _dispatchService; public DispatchController(IDispatchService dispatchService) { _dispatchService = dispatchService; } [HttpGet] public async Task List( [FromQuery] string? search = null, [FromQuery] string? status = null, [FromQuery] int? vendorId = null, [FromQuery] DateTime? dateFrom = null, [FromQuery] DateTime? dateTo = null, [FromQuery] string? sortBy = "dispatchedAt", [FromQuery] string? sortDir = "desc", [FromQuery] int page = 1, [FromQuery] int pageSize = 25, CancellationToken cancellationToken = default) { var result = await _dispatchService.GetDispatchListAsync( search, status, vendorId, dateFrom, dateTo, sortBy, sortDir, page, pageSize, cancellationToken); return Ok(new DataResponse { Status = "Success", Data = new { total = result.Total, page = result.Page, pageSize = result.PageSize, items = result.Items } }); } [HttpGet("{id:int}")] public async Task GetById(int id, CancellationToken cancellationToken) { var dispatch = await _dispatchService.GetDispatchDetailAsync(id, cancellationToken); if (dispatch == null) return NotFound(new Response { Status = "Error", Message = "Dispatch not found" }); return Ok(new DataResponse { Status = "Success", Data = dispatch }); } } }