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)); }