using FastEndpoints; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.DTO.Framework.ResponseStandard; using GB5Shared.FastEndPoint; using MMBLL.VendorComparison; using static GB5Shared.GB5Constant.Constant; namespace MMSL.EndPoints.VendorComparison { // Ported from GB4 MMHead.svc "/Get/Vendor/Comparison/?Type={Type}&FirstNumber={FirstNumber}&MaxResult={MaxResult}" // (IMMHead.GetVendorComparison / MMHeadBLL.GetVendorComparison). Type: 0 = Summary, 1 = Detail. public class GetVendorComparison : BaseEndpoint> { private readonly IVendorComparisonBLL _VendorComparisonBLL; public GetVendorComparison(IVendorComparisonBLL VendorComparisonBLL) { _VendorComparisonBLL = VendorComparisonBLL; } public override void Configure() { Post("/VendorComparison/GetVendorComparison"); AllowAnonymous(); } public record GetVendorComparisonParameters( [property: FromHeader] string Login, [property: FromBody] CriteriaDTO CriteriaDTO, [property: QueryParam] int Type, [property: QueryParam] int FirstNumber, [property: QueryParam] int MaxResult, // Summary (Type=0) only — selects which value populates V1-V4/BestFit: // 0=Rate (default), 1=Cost, 2=Delivery, 3=Quality, 4=Overall. 5=Grade unsupported. // Defaults to 0 so existing callers that don't send it yet keep working unchanged. [property: QueryParam] int MetricType = 0 ); protected override async Task> ExecuteAsync(GetVendorComparisonParameters req, LoginDTO LoginDTO, CancellationToken ct) { try { var Result = await _VendorComparisonBLL.GetVendorComparison(req.Type, req.MetricType, req.FirstNumber, req.MaxResult, req.CriteriaDTO, LoginDTO!, ct); return await GB5Shared.ResponseStandard.Response.CreateSuccessResponse(Result, CacheKeyLevel.NOT_REQUIRED, LoginDTO); } catch (Exception ex) { return await GB5Shared.ResponseStandard.Response.CreateExceptionError(ex, CacheKeyLevel.NOT_REQUIRED, LoginDTO, ex.Message, 500); } } } }