Beispiel #1
0
        public async Task <CommandResult> Handle(UpdateMeasureCommand request, CancellationToken cancellationToken)
        {
            CommandResult commandInvariantResult = await ValidateCommandInvariants(request);

            if (!commandInvariantResult.Success)
            {
                return(FailureDueTo(commandInvariantResult.Notifications.ToList()));
            }

            Measure measure = await _measureRepository.GetByIdAsync(request.MeasureId);

            if (!FoundValidMeasure(measure))
            {
                return(FailureDueToMeasureNotFound());
            }

            List <Image> bodyPictures = new List <Image>();

            foreach (IFormFile bodyPicture in request.BodyPictures)
            {
                string containerName = _containerOptions.Value.MeasureImageContainerName;

                StorageFile existingBodyPicture = await _storageService.FindFileAsync(containerName, bodyPicture.FileName);

                if (existingBodyPicture == null)
                {
                    StorageResult storageResult = await UploadBodyPictureToStorage(bodyPicture);

                    if (!storageResult.Success)
                    {
                        return(FailureDueToUploadFailure());
                    }

                    bodyPictures.Add(new Image(storageResult.FileName, storageResult.FileUrl));
                }
                else
                {
                    bodyPictures.Add(new Image(existingBodyPicture.UrlPath, existingBodyPicture.Name));
                }
            }

            BasicMeasure basicMeasure = new BasicMeasure(request.Height, request.Weight);

            measure.Update(
                request.Title,
                request.Details,
                basicMeasure,
                request.MeasureDate,
                bodyPictures,
                _mapper.Map <List <MeasureLine> >(request.MeasureLines)
                );

            await _measureRepository.UpdateAsync(measure);

            return(await CommitAndPublishDefaultAsync());
        }