public async Task <IActionResult> EditCategory([FromRoute] int id, [FromBody] CategoryCreateEditRequest updatedCategoryData, CancellationToken cancellationToken)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var originalCategory = await _mediator.Send(new GetCategoryByIdRequest(id), cancellationToken);

            if (originalCategory == null)
            {
                return(NotFound());
            }

            var categoriesWithTheSameName = await _mediator.Send(new GetCategoriesByExactNameRequest(updatedCategoryData.Name), cancellationToken);

            var categoryHasChanges   = originalCategory.Name != updatedCategoryData.Name;
            var categoryCanBeUpdated = !categoryHasChanges || (categoryHasChanges && !categoriesWithTheSameName.Any());

            if (!categoryCanBeUpdated)
            {
                ModelState.AddModelError(nameof(updatedCategoryData.Name), $"Category with the name '{updatedCategoryData.Name}' already exists");
                return(BadRequest(ModelState));
            }

            originalCategory = _mapper.Map(updatedCategoryData, originalCategory);
            await _mediator.Send(new EditCategoryRequest(originalCategory), cancellationToken);

            return(Ok());
        }
        public async Task <IActionResult> CreateCategory([FromBody] CategoryCreateEditRequest categoryData, CancellationToken cancellationToken)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var categoriesWithTheSameName = await _mediator.Send(new GetCategoriesByExactNameRequest(categoryData.Name), cancellationToken);

            if (categoriesWithTheSameName.Any())
            {
                ModelState.AddModelError(nameof(categoryData.Name), $"Category with the name '{categoryData.Name}' already exists");
                return(BadRequest(ModelState));
            }

            var category        = _mapper.Map <Category>(categoryData);
            var createdCategory = await _mediator.Send(new CreateCategoryRequest(category), cancellationToken);

            return(Ok(createdCategory.Id));
        }