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> > Handle(DatabaseHealthCheckRequest request, CancellationToken cancellationToken)
        {
            var query     = new GetProductByCodeQuery(request.CorrelationId, "BLAHBLAH");
            var operation = await _mediator.Send(query, cancellationToken);

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

            var getProductResponse = new GetProductResponse
            {
                ProductCode = "HEALTH_CHECK",
                ProductName = "HEATH_CHECK"
            };

            return(Result <GetProductResponse> .Success(getProductResponse));
        }
コード例 #3
0
        public async Task <Result <Product> > Handle(GetProductByCodeQuery request, CancellationToken cancellationToken)
        {
            try
            {
                using (var connection = _dbConnectionFactory.GetConnection())
                {
                    var commandDefinition = new CommandDefinition(query, new { productCode = request.ProductCode });
                    var product           = await connection.QueryFirstOrDefaultAsync <Product>(commandDefinition);

                    return(Result <Product> .Success(product));
                }
            }
            catch (Exception exception)
            {
                _logger.LogError(exception, "Error occured when getting the product {query}", request);
            }

            return(Result <Product> .Failure("", "Error occured when getting the product."));
        }
        public async Task <Result <GetProductResponse> > Handle(UpsertProductRequest request, CancellationToken cancellationToken)
        {
            var getProductQuery     = new GetProductByCodeQuery(request.CorrelationId, request.ProductCode);
            var getProductOperation = await _mediator.Send(getProductQuery, cancellationToken);

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

            var product = getProductOperation.Data;

            if (product == null)
            {
                return(await InsertProductAsync(request, cancellationToken));
            }

            return(await UpdateProductAsync(request, cancellationToken));
        }
コード例 #5
0
        public async Task <Product> ImportProductAsync(Product product)
        {
            bool success         = false;
            var  importedProduct = default(Product);

            #region Validate
            var validationResult = await _productIsValidToImportValidator.Validate(product);

            if (validationResult.HasErrorMessage)
            {
                await SendDomainNotifications(validationResult);

                return(_productFactory.Create(validationResult));
            }
            #endregion

            // Check if product exists
            var getProductByCodeQuery = new GetProductByCodeQuery(UserSessionInfo, GlobalizationInfo, validationResult, product.Code);
            _ = await InMemoryBus.SendQueryAsync(getProductByCodeQuery);

            var productAlreadyExists = getProductByCodeQuery.QueryResult != null;
            if (!productAlreadyExists)
            {
                #region Process
                importedProduct = _productFactory.Create(validationResult);

                try
                {
                    importedProduct.ImportProduct(
                        new TenantInfoValueObject(UserSessionInfo.TenantInfo.TenantCode),
                        _systemUserFactory.Create(UserSessionInfo),
                        product.Code,
                        product.Name,
                        product.Description,
                        product.ActivationInfo.IsActive
                        );

                    success = importedProduct?.Id != Guid.Empty;
                }
                catch (Exception ex)
                {
                    _ = await InMemoryBus.SendRaisedExceptionEventAsync(UserSessionInfo, GlobalizationInfo, ex);

                    _ = await InMemoryBus.SendEventAsync(new ProductImportFailedEvent(
                                                             UserSessionInfo,
                                                             GlobalizationInfo,
                                                             validationResult,
                                                             product));

                    success = false;
                }
                #endregion
            }

            #region Notify
            if (!productAlreadyExists)
            {
                if (success)
                {
                    _ = await InMemoryBus.SendEventAsync(new ProductWasImportedEvent(
                                                             UserSessionInfo,
                                                             GlobalizationInfo,
                                                             validationResult,
                                                             importedProduct
                                                             ));
                }
                else
                {
                    _ = await InMemoryBus.SendEventAsync(new ProductImportFailedEvent(
                                                             UserSessionInfo,
                                                             GlobalizationInfo,
                                                             validationResult,
                                                             importedProduct
                                                             ));
                }
            }
            #endregion

            return(importedProduct);
        }
コード例 #6
0
        public async Task <GetProductByCodeQuery> AdapteeAsync(Product source, GetProductByCodeQuery to)
        {
            to.SetCode(source.Code);

            return(await Task.FromResult(to));
        }