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"));
        }
Beispiel #2
0
        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));
        }