public async Task <IActionResult> PutProductRouteAsync(Guid id,
                                                               [FromBody] ProductForModificationUiModel productForModificationUiModel)
        {
            var modifiedProduct =
                await _updateProductProcessor.UpdateProductAsync(id, productForModificationUiModel);

            switch (modifiedProduct.Message)
            {
            case ("SUCCESS_MODIFICATION"):
            {
                Log.Information(
                    $"--Method:PutProductRouteAsync -- Message:Product_ACTIVATION_SUCCESSFULLY -- " +
                    $"Datetime:{DateTime.Now} -- ProductInfo:{id} ");
                return(Ok(modifiedProduct));
            }

            case ("ERROR_INVALID_PRODUCT_MODEL"):
            {
                return(BadRequest(new { errorMessage = "ERROR_INVALID_PRODUCT_MODEL" }));
            }

            case ("ERROR_PRODUCT_NOT_EXIST"):
            {
                return(BadRequest(new { errorMessage = "ERROR_PRODUCT_NOT_EXIST" }));
            }

            case ("ERROR_PRODUCT_NOT_MADE_PERSISTENT"):
            {
                return(BadRequest(new { errorMessage = "ERROR_PRODUCT_NOT_MADE_PERSISTENT" }));
            }

            case ("UNKNOWN_ERROR"):
            {
                return(BadRequest(new { errorMessage = "ERROR_ACTIVATION_PRODUCT" }));
            }
            }

            return(NotFound("MODIFICATION_FAILED"));
        }
예제 #2
0
        public Task <ProductUiModel> UpdateProductAsync(Guid productIdToBeModified, ProductForModificationUiModel updatedProduct)
        {
            var response =
                new ProductUiModel()
            {
                Message = "SUCCESS_MODIFICATION"
            };

            if (updatedProduct == null)
            {
                response.Message = "ERROR_INVALID_PRODUCT_MODEL";
                return(Task.Run(() => response));
            }

            if (productIdToBeModified == Guid.Empty)
            {
                response.Message = "ERROR_INVALID_PRODUCT_ID";
                return(Task.Run(() => response));
            }

            try
            {
                var productToBeModified = ThrowExceptionIfProductDoesNotExist(productIdToBeModified);

                productToBeModified.ModifyWith(updatedProduct.ProductName,
                                               updatedProduct.ProductDescription, updatedProduct.ProductPrice);

                Log.Debug(
                    $"Update-Modify Product: with Id: {productIdToBeModified}" +
                    "--UpdateProduct--  @Ready@ [UpdateProductAsync]. " +
                    "Message: Just Before MakeItPersistence");

                MakeProductPersistent(productToBeModified);

                Log.Debug(
                    $"Update-Modify Product: with Id: {productIdToBeModified}" +
                    "--UpdateProduct--  @Ready@ [UpdateProductAsync]. " +
                    "Message: Just After MakeItPersistence");

                response         = ThrowExcIfModificationWasNotBeMadePersistent(productIdToBeModified);
                response.Message = "SUCCESS_MODIFICATION";
            }
            catch (ProductDoesNotExistException e)
            {
                response.Message = "ERROR_PRODUCT_NOT_EXIST";
                Log.Error(
                    $"Modify Product: {updatedProduct.ProductName}" +
                    "--ModifyProductAsync-- @fail@ [UpdateProductProcessor]." +
                    $" @innerfault:{e?.Message} and {e?.InnerException}");
            }
            catch (InvalidProductException e)
            {
                response.Message = "ERROR_INVALID_PRODUCT_MODEL";
                Log.Error(
                    $"Modify Product: {updatedProduct.ProductName}" +
                    "--ModifyProductAsync--  @fail@ [UpdateProductProcessor]." +
                    $" @innerfault:{e?.Message} and {e?.InnerException}");
            }
            catch (ProductDoesNotExistAfterMadePersistentException e)
            {
                response.Message = "ERROR_MODIFICATION_NOT_MADE_PERSISTENT";
                Log.Error(
                    $"Modify Product: {updatedProduct.ProductName}" +
                    "--ModifyProductAsync--  @fail@ [UpdateProductProcessor]." +
                    $" @innerfault:{e?.Message} and {e?.InnerException}");
            }
            catch (Exception e)
            {
                response.Message = "UNKNOWN_ERROR";
                Log.Error(
                    $"Modify Product: {updatedProduct.ProductName}" +
                    "--ModifyProductAsync--  @fail@ [UpdateProductProcessor]." +
                    $" @innerfault:{e?.Message} and {e?.InnerException}");
            }


            return(Task.Run(() => response));
        }