private async Task <bool> SaveGuard(UpdateCategoryProcessStartedEvent categoryChangedEvent) { var existingCategoryResult = await _categorySearchHandler.GetById(new GetCategoryByIdQuery(categoryChangedEvent.Id)); if (!existingCategoryResult.Success) { var failedEvent = new UpdatingCategoryFailedEvent(categoryChangedEvent.Id, CategoryModificationStatus.NotFound, categoryChangedEvent.CorrelationId); await this.SaveAndDispatchEvent(categoryChangedEvent.Id, failedEvent); _logger.LogProgress(OperationStatus.Failed, $"Category({categoryChangedEvent.Id}) cannot be found", categoryChangedEvent.CorrelationId); return(false); } var existingCategoryWithSameNameResult = await _categorySearchHandler.GetByName(new GetCategoryByNameQuery(categoryChangedEvent.Name)); if (existingCategoryWithSameNameResult.Success) { var failedEvent = new UpdatingCategoryFailedEvent(categoryChangedEvent.Id, CategoryModificationStatus.DuplicatedName, categoryChangedEvent.CorrelationId); await this.SaveAndDispatchEvent(categoryChangedEvent.Id, failedEvent); _logger.LogProgress(OperationStatus.Failed, $"Cannot save category({categoryChangedEvent.Id}). Duplicated name", categoryChangedEvent.CorrelationId); return(false); } return(true); }
public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, HttpMethods.Get, Route = "category/{id:guid}")] HttpRequest req, string id) { var categoryResult = await _categorySearchHandler.GetById(new GetCategoryByIdQuery(id)); if (!categoryResult.Success) { return(new NotFoundResult()); } return(new OkObjectResult(categoryResult.Value)); }
public async Task <ICategoryDeleteValidationResult> CanDelete(string id) { var existingCategoryResult = await _categorySearchHandler.GetById(new GetCategoryByIdQuery(id)); if (!existingCategoryResult.Success) { return(new FailedCategoryDeleteValidationResult(CategoryModificationStatus.NotFound)); } var categoryUsage = await _usedCategoryRepository.GetCategoryUsageById(id); var canDelete = categoryUsage == null || categoryUsage.UsageCounter == default; return(canDelete ? (ICategoryDeleteValidationResult) new SuccessfulDeleteValidationResult() : (ICategoryDeleteValidationResult) new FailedCategoryDeleteValidationResult(CategoryModificationStatus.Used)); }