public async ValueTask <(bool isSuccess, string error)> DeleteProduct(string categoryId, string subcategoryId, string productId)
        {
            var product = await _repository.GetProduct(categoryId, subcategoryId, productId);

            if (product is null)
            {
                return(
                    false,
                    $"Что-то пошло не так, не удалось найти товар.\n\tКатегория: {categoryId}\n\tПодкатегория: {subcategoryId}\n\tТовар: {productId}"
                    );
            }

            foreach (var photo in product.Photos)
            {
                await _photoSaver.RemoveFileFromRepository(photo, updateDB : false);
            }

            await _repository.DeleteProduct(product);

            return(true, null);
        }
Example #2
0
        public async Task <IActionResult> GetProduct([FromQuery] string categoryId,
                                                     [FromQuery] string subcategoryId,
                                                     [FromQuery] string productId)
        {
            if (String.IsNullOrEmpty(categoryId) || String.IsNullOrEmpty(subcategoryId) || String.IsNullOrEmpty(productId))
            {
                var msg = "Что-то пошло не так, необходимо выбрать категорию, подкатегорию и товар.";
                _logger.LogError(msg);
                return(BadRequest(msg));
            }

            var product = await _repository.GetProduct(categoryId, subcategoryId, productId);

            if (product == null)
            {
                var msg = $"Что-то пошло не так, не удалось найти выбранный товар. Категория: \"{categoryId}\". Подкатегория: \"{subcategoryId}\". Товар: \"{productId}\"\nREQUEST-PATH: {Request.Path}{Request.QueryString}";
                _logger.LogError(msg);
                return(BadRequest(msg));
            }

            return(Success(product));
        }
Example #3
0
        public async Task <IActionResult> AddOrUpdate([FromForm] ProductDTO productDTO)
        {
            const string API_LOCATE = CONTROLLER_LOCATE + ".AddOrUpdate";
            var          error      = ERROR;

            try
            {
                bool isSuccess;

                if (
                    String.IsNullOrEmpty(productDTO?.CategoryId) ||
                    String.IsNullOrEmpty(productDTO?.SubcategoryId) ||
                    String.IsNullOrEmpty(productDTO?.ProductId)
                    )
                {
                    (isSuccess, error) = await _service.AddProduct(productDTO);
                }
                else
                {
                    var oldProduct = await _repository.GetProduct(productDTO.CategoryId, productDTO.SubcategoryId, productDTO.ProductId);

                    if (oldProduct is null)
                    {
                        return(LogBadRequest(
                                   _logger,
                                   API_LOCATE,
                                   customError: $"Что-то пошло не так, не удалось найти товар.\n\tКатегория: {productDTO.CategoryId}\n\tПодкатегория: {productDTO.SubcategoryId}\n\tТовар: {productDTO.ProductId}"
                                   ));
                    }

                    if (
                        productDTO.Alias.TransformToId() != oldProduct.Alias.TransformToId() ||
                        productDTO.CategoryId != productDTO.NewCategoryId ||
                        productDTO.SubcategoryId != productDTO.NewSubcategoryId
                        )
                    {
                        (isSuccess, error) = await _service.FullUpdateProduct(productDTO, oldProduct);
                    }
                    else
                    {
                        (isSuccess, error) = await _service.UpdateProduct(productDTO, oldProduct);
                    }
                }

                if (!isSuccess)
                {
                    return(LogBadRequest(
                               _logger,
                               API_LOCATE,
                               customError: error
                               ));
                }

                return(Success(isSuccess));
            }
            catch (Exception ex)
            {
                return(LogBadRequest(
                           _logger,
                           API_LOCATE,
                           exception: ex,
                           customError: error
                           ));
            }
        }