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)); }
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)); }
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); }
public async Task <GetProductByCodeQuery> AdapteeAsync(Product source, GetProductByCodeQuery to) { to.SetCode(source.Code); return(await Task.FromResult(to)); }