public async Task <IHttpActionResult> UpdateTextMediaElementLocalization(
            int customerId,
            Guid textMediaElementId,
            UpdateTextMediaElementLocalizedRequestDto request,
            string language = null
            )
        {
            var result = await controllerHelper.UpdateLocalization(customerId, textMediaElementId, request);

            if (result == UpdateTextMediaElementStatus.NotFound)
            {
                return(Content(
                           HttpStatusCode.NotFound,
                           new ErrorResponseDto()
                {
                    Error = ErrorCode.InvalidRequest,
                    Message = ErrorCode.InvalidRequest.Description(),
                    Details = UpdateTextMediaElementStatus.NotFound.Description()
                }
                           ));
            }

            if (result != UpdateTextMediaElementStatus.Success)
            {
                return(Content(
                           HttpStatusCode.BadRequest,
                           new ErrorResponseDto()
                {
                    Error = ErrorCode.InvalidRequest,
                    Message = ErrorCode.InvalidRequest.Description(),
                    Details = result.Description()
                }
                           ));
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
Exemple #2
0
        /// <summary>
        /// Updates the localization.
        /// </summary>
        /// <param name="customerId">The customer identifier.</param>
        /// <param name="textMediaElementId">The text media element identifier.</param>
        /// <param name="model">The model.</param>
        /// <returns></returns>
        public async Task <UpdateTextMediaElementStatus> UpdateLocalization(
            int customerId,
            Guid textMediaElementId,
            UpdateTextMediaElementLocalizedRequestDto model
            )
        {
            if (model.Type != null && model.Media == null && !model.MediaId.HasValue)
            {
                return(UpdateTextMediaElementStatus.MediaFileMissed);
            }

            if (model.Media != null && !model.MediaId.HasValue && model.Type == null)
            {
                return(UpdateTextMediaElementStatus.MediaMediaType);
            }

            if (model.Text == null && model.Media == null && !model.MediaId.HasValue)
            {
                return(UpdateTextMediaElementStatus.TextOrMediaMissed);
            }

            var element = await this.textMediaElementsService.GetElement(customerId, textMediaElementId);

            if (element == null)
            {
                return(UpdateTextMediaElementStatus.NotFound);
            }

            var language = CareElementRequestContext.Current.Language;

            if (model.Text != null)
            {
                var elementLocalizedText = element.TextLocalizedStrings.FirstOrDefault(ls => ls.Language == language);

                if (elementLocalizedText == null)
                {
                    elementLocalizedText          = Mapper.Map <TextMediaElementString>(model.Text);
                    elementLocalizedText.Language = language;
                    element.TextLocalizedStrings.Add(elementLocalizedText);
                }
                else
                {
                    elementLocalizedText.Value         = model.Text.Value;
                    elementLocalizedText.Description   = model.Text.Description;
                    elementLocalizedText.Pronunciation = model.Text.Pronunciation;
                }

                if (model.Text.AudioFileMedia != null)
                {
                    elementLocalizedText.AudioFileMedia =
                        await mediaFileHelper.CreateMediaFile(model.Text.AudioFileMedia);
                }
            }
            else
            {
                element.TextLocalizedStrings.RemoveRange(
                    element.TextLocalizedStrings.Where(s => s.Language == language).ToList()
                    );
            }

            #region Media

            if (element.TextMediaElementsToMedias.Any(m => m.Language == language))
            {
                element.TextMediaElementsToMedias.RemoveRange(
                    element.TextMediaElementsToMedias.Where(m => m.Language == language).ToList()
                    );
            }

            if (model.MediaId.HasValue)
            {
                var existingMedia = await mediaService.Get(customerId, model.MediaId.Value);

                if (existingMedia == null)
                {
                    return(UpdateTextMediaElementStatus.MediaFileNotFound);
                }

                var media = new TextMediaElementToMedia()
                {
                    MediaId  = model.MediaId.Value,
                    Language = language
                };

                element.TextMediaElementsToMedias.Add(media);
            }
            else if (model.Media != null)
            {
                var media = await mediaFileHelper.CreateMediaFile(model.Media);

                if (media != null)
                {
                    element.TextMediaElementsToMedias.Add(
                        new TextMediaElementToMedia()
                    {
                        Media    = media,
                        Language = language
                    }
                        );
                }
            }

            #endregion

            await this.textMediaElementsService.Update(element);

            return(UpdateTextMediaElementStatus.Success);
        }