示例#1
0
        public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, HttpMethods.Put, Route = "category/{id:guid}")] UpdateCategoryHttpRequest updateCategoryRequest,
            string id)
        {
            var existingCategoryResult = await _categoryRepository.GetById(id);

            if (!existingCategoryResult.Success)
            {
                return(new NotFoundResult());
            }

            var validationResult = await _updateCommandValidator.ValidateAsync(new UpdateCategoryCommand(id, updateCategoryRequest));

            if (!validationResult.IsValid)
            {
                return(new BadRequestObjectResult(validationResult.Errors));
            }

            var categoryToUpdate = new CategoryDto(
                id,
                updateCategoryRequest.Name,
                updateCategoryRequest.Description,
                updateCategoryRequest.SortOrder);

            var updateResult = await _categoryRepository.Update(categoryToUpdate);

            if (!updateResult.Success)
            {
                return(new BadRequestResult());
            }

            await _eventPublisher.PublishEvent(this.BuildCategoryChangedEvent(categoryToUpdate));

            return(new NoContentResult());
        }
        public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, HttpMethods.Put, Route = "category/{id:guid}")] UpdateCategoryHttpRequest updateCategoryRequest,
            string id,
            [NotificationSubscriber] string subscriber,
            ILogger log)
        {
            var correlationId = _guidProvider.GenerateGuid();

            _correlationInitializer.Initialize(correlationId);
            var validationResult = await _updateCommandValidator.ValidateAsync(new UpdateCategoryCommand(id, updateCategoryRequest));

            log.LogProgress(OperationStatus.Started, "Updating category process started", correlationId);

            if (!validationResult.IsValid)
            {
                log.LogProgress(OperationStatus.Failed, "Validation failed", correlationId);
                return(new BadRequestObjectResult(validationResult.Errors));
            }

            await _subscriber.Register(correlationId, subscriber);

            var categoryChangedEvent = new UpdateCategoryProcessStartedEvent(
                id,
                updateCategoryRequest.Name,
                updateCategoryRequest.Description,
                updateCategoryRequest.SortOrder,
                correlationId);

            var saveEventResult = await _eventStore.AppendEvent(id, categoryChangedEvent);

            if (!saveEventResult.Success)
            {
                log.LogFailedOperation(OperationStatus.Failed, "Creating category process failed", saveEventResult.Errors, correlationId);
                return(new BadRequestResult());
            }

            log.LogProgress(OperationStatus.InProgress, "Request accepted to further processing.", correlationId);
            await _eventPublisher.PublishEvent(categoryChangedEvent);

            log.LogProgress(OperationStatus.InProgress, $"{nameof(UpdateCategoryProcessStartedEvent)} published", correlationId);

            return(new AcceptedWithCorrelationIdHeaderResult(correlationId));
        }
 public UpdateCategoryCommand(string id, UpdateCategoryHttpRequest request)
 {
     Id      = id;
     Request = request;
 }