public async Task <IActionResult> PostProductRouteAsync( [FromBody] ProductForCreationUiModel productForCreationUiModel) { var newCreatedProduct = await _createProductProcessor.CreateProductAsync(productForCreationUiModel); switch (newCreatedProduct.Message) { case ("SUCCESS_CREATION"): { Log.Information( $"--Method:PostProductRouteAsync -- Message:PRODUCT_CREATION_SUCCESSFULLY -- " + $"Datetime:{DateTime.Now} -- ProductInfo:{productForCreationUiModel.ProductName}"); return(Created(nameof(PostProductRouteAsync), newCreatedProduct)); } case ("ERROR_ALREADY_EXISTS"): { Log.Error( $"--Method:PostProductRouteAsync -- Message:ERROR_PRODUCT_ALREADY_EXISTS -- " + $"Datetime:{DateTime.Now} -- ProductInfo:{productForCreationUiModel.ProductName}"); return(BadRequest(new { errorMessage = "PRODUCT_ALREADY_EXISTS" })); } case ("ERROR_PRODUCT_NOT_MADE_PERSISTENT"): { Log.Error( $"--Method:PostProductRouteAsync -- Message:ERROR_PRODUCT_NOT_MADE_PERSISTENT -- " + $"Datetime:{DateTime.Now} -- ProductInfo:{productForCreationUiModel.ProductName}"); return(BadRequest(new { errorMessage = "ERROR_CREATION_NEW_PRODUCT" })); } case ("UNKNOWN_ERROR"): { Log.Error( $"--Method:PostProductRouteAsync -- Message:ERROR_CREATION_NEW_PRODUCT -- " + $"Datetime:{DateTime.Now} -- ProductInfo:{productForCreationUiModel.ProductName}"); return(BadRequest(new { errorMessage = "ERROR_CREATION_NEW_PRODUCT" })); } } return(NotFound("CREATION_FAILED")); }
public Task <ProductUiModel> CreateProductAsync(ProductForCreationUiModel newProductUiModel) { var response = new ProductUiModel() { Message = "START_CREATION" }; if (newProductUiModel == null) { response.Message = "ERROR_INVALID_PRODUCT_MODEL"; return(Task.Run(() => response)); } var productToBeCreated = new Product(); try { productToBeCreated.InjectWithInitialAttributes(newProductUiModel.ProductName, newProductUiModel.ProductDescription, newProductUiModel.ProductPrice); ThrowExcIfProductCannotBeCreated(productToBeCreated); ThrowExcIfThisProductAlreadyExist(productToBeCreated); Log.Debug( $"Create Product: {newProductUiModel.ProductName}" + "--CreateProduct-- @NotComplete@ [CreateProductProcessor]. " + "Message: Just Before MakeItPersistence"); MakeProductPersistent(productToBeCreated); Log.Debug( $"Create Product: {newProductUiModel.ProductName}" + "--CreateProduct-- @NotComplete@ [CreateProductProcessor]. " + "Message: Just After MakeItPersistence"); response = ThrowExcIfProductWasNotBeMadePersistent(productToBeCreated); response.Message = "SUCCESS_CREATION"; } catch (InvalidProductException e) { response.Message = "ERROR_INVALID_Product_MODEL"; Log.Error( $"Create Product: {newProductUiModel.ProductName}" + "--CreateProduct-- @NotComplete@ [CreateProductProcessor]. " + $"Broken rules: {e.BrokenRules}"); } catch (ProductAlreadyExistsException ex) { response.Message = "ERROR_Product_ALREADY_EXISTS"; Log.Error( $"Create Product: {newProductUiModel.ProductName}" + "--CreateProduct-- @fail@ [CreateProductProcessor]. " + $"@innerfault:{ex?.Message} and {ex?.InnerException}"); } catch (ProductDoesNotExistAfterMadePersistentException exx) { response.Message = "ERROR_Product_NOT_MADE_PERSISTENT"; Log.Error( $"Create Product: {newProductUiModel.ProductName}" + "--CreateProduct-- @fail@ [CreateProductProcessor]." + $" @innerfault:{exx?.Message} and {exx?.InnerException}"); } catch (Exception exxx) { response.Message = "UNKNOWN_ERROR"; Log.Error( $"Create Product: {newProductUiModel.ProductName}" + $"--CreateProduct-- @fail@ [CreateProductProcessor]. " + $"@innerfault:{exxx.Message} and {exxx.InnerException}"); } return(Task.Run(() => response)); }