public async Task <IActionResult> GetProductAsync([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "products/{productCode}")]
                                                          HttpRequest request, string productCode)
        {
            var correlationId = request.GetHeaderValue("correlationId");

            if (string.IsNullOrWhiteSpace(correlationId))
            {
                return(new BadRequestObjectResult("correlationId is required in the HTTP header."));
            }

            var getProductRequest = new GetProductByCodeRequest
            {
                CorrelationId = correlationId,
                ProductCode   = productCode
            };

            var operation = await _productService.GetProductAsync(getProductRequest);

            if (!operation.Status)
            {
                _logger.LogError("Error when getting product data {correlationId}", correlationId);
                return(new InternalServerErrorResult());
            }

            var product = operation.Data;

            if (product == null)
            {
                return(new NotFoundResult());
            }

            return(new OkObjectResult(operation.Data));
        }
        public async Task <Result <GetProductResponse> > Handle(GetProductByCodeRequest request, CancellationToken cancellationToken)
        {
            var query     = new GetProductByCodeQuery(request.CorrelationId, request.ProductCode);
            var operation = await _mediator.Send(query, cancellationToken);

            if (!operation.Status)
            {
                return(Result <GetProductResponse> .Failure(operation.ErrorCode, operation.Validation));
            }

            var product = operation.Data;

            if (product == null)
            {
                return(Result <GetProductResponse> .Failure(ErrorCodes.ProductNotFound, "Product not found."));
            }

            var productResponse = new GetProductResponse
            {
                ProductCode = request.ProductCode,
                ProductName = product.ProductName
            };

            return(Result <GetProductResponse> .Success(productResponse));
        }
        public async Task <Result <GetProductResponse> > GetProductAsync(GetProductByCodeRequest request)
        {
            //
            // TODO: Perform application validation here.
            //

            var cancellationToken = new CancellationTokenSource().Token;

            var operation = await _dataService.GetProductAsync(request, cancellationToken);

            if (!operation.Status)
            {
                return(Result <GetProductResponse> .Failure(operation.Validation));
            }

            var product = operation.Data;

            if (product == null)
            {
                return(Result <GetProductResponse> .Success(null));
            }

            var productResponse = new GetProductResponse
            {
                ProductCode = product.ProductCode,
                ProductName = product.ProductName
            };

            return(Result <GetProductResponse> .Success(productResponse));
        }
        public async Task <Result <GetProductResponse> > Handle(GetProductByCodeDto request, CancellationToken cancellationToken)
        {
            var serviceRequest = new GetProductByCodeRequest(request.CorrelationId, request.ProductCode);

            var operation = await _mediator.Send(serviceRequest, cancellationToken);

            return(operation);
        }
Exemplo n.º 5
0
        public async Task <Result <Product> > GetProductAsync(GetProductByCodeRequest request, CancellationToken cancellationToken)
        {
            var query     = new GetProductQuery(request.ProductCode);
            var operation = await _mediator.Send(query, cancellationToken);

            if (!operation.Status)
            {
                return(Result <Product> .Failure("", "Error occured when getting the product."));
            }

            return(Result <Product> .Success(operation.Data));
        }