示例#1
0
        public async Task <ActionResultResponse <string> > Insert(string tenantId, string creatorId, string creatorFullName, string creatorAvata, VideoMeta videoMeta)
        {
            var videoId = Guid.NewGuid().ToString();
            // Insert new video.
            var video = new Video
            {
                Id               = videoId,
                AlbumId          = videoMeta.AlbumId,
                ConcurrencyStamp = videoId,
                Thumbnail        = videoMeta.Thumbnail,
                Url              = videoMeta.Url,
                Order            = videoMeta.Order,
                Type             = videoMeta.Type,
                VideoLinkId      = videoMeta.VideoLinkId,
                IsActive         = videoMeta.IsActive,
                TenantId         = tenantId,
                CreatorId        = creatorId,
                CreatorFullName  = creatorFullName
            };

            if (videoMeta.IsHomePage.HasValue)
            {
                video.IsHomePage           = videoMeta.IsHomePage.Value;
                video.LastUpdateIsHomePage = DateTime.Now;
            }

            var resultInsertVideo = await _videoRepository.Insert(video);

            if (resultInsertVideo <= 0)
            {
                return(new ActionResultResponse <string>(resultInsertVideo,
                                                         _sharedResourceService.GetString(ErrorMessage.SomethingWentWrong)));
            }

            #region insert video Translation.

            if (videoMeta.Translations.Count > 0)
            {
                var resultInsertTranslation = await InsertVideoTranslation();

                if (resultInsertTranslation.Code <= 0)
                {
                    return(resultInsertTranslation);
                }
            }
            #endregion

            return(new ActionResultResponse <string>(1,
                                                     _websiteResourceService.GetString("Add new video successful."),
                                                     string.Empty, videoId));


            #region Local functions

            async Task <ActionResultResponse <string> > InsertVideoTranslation()
            {
                var apiUrls = _configuration.GetApiUrl();

                if (apiUrls == null)
                {
                    return(new ActionResultResponse <string>(-5,
                                                             _sharedResourceService.GetString(
                                                                 "Missing some configuration. Please contact with administrator.")));
                }

                var videoTranslations = new List <VideoTranslation>();
                var videoTags         = new List <TagSubjectViewModel>();

                foreach (var videoTranslation in videoMeta.Translations)
                {
                    // Check name exists.
                    var isNameExists = await _videoTranslationRepository.CheckExists(videoId, tenantId,
                                                                                     videoTranslation.LanguageId, videoTranslation.Title);

                    if (isNameExists)
                    {
                        await RollbackInsertVideo();

                        return(new ActionResultResponse <string>(-2, _websiteResourceService.GetString(
                                                                     "Video name: \"{0}\" already exists.",
                                                                     videoTranslation.Title)));
                    }

                    var videoTranslationInsert = new VideoTranslation
                    {
                        TenantId    = tenantId,
                        VideoId     = videoId,
                        LanguageId  = videoTranslation.LanguageId.Trim(),
                        Title       = videoTranslation.Title.Trim(),
                        Description = videoTranslation.Description?.Trim(),
                        UnsignName  = videoTranslation.Title.StripVietnameseChars().ToUpper()
                    };

                    videoTranslations.Add(videoTranslationInsert);

                    var videoTagInsert = new TagSubjectViewModel
                    {
                        TenantId        = tenantId,
                        CreatorId       = creatorId,
                        CreatorFullName = creatorFullName,
                        CreatorAvata    = creatorAvata,
                        Type            = TagType.Video,
                        SubjectId       = videoId,
                        LanguageId      = videoTranslation.LanguageId.Trim(),
                        Tags            = videoTranslation.Tags
                    };
                    videoTags.Add(videoTagInsert);
                }
                var resultTag = await new HttpClientService()
                                .PostAsync <ActionResultResponse>($"{apiUrls.CoreApiUrl}/tags", videoTags);

                // Insert video translations.
                var resultInsertTranslation = await _videoTranslationRepository.Inserts(videoTranslations);

                if (resultInsertTranslation > 0)
                {
                    return(new ActionResultResponse <string>(1,
                                                             _websiteResourceService.GetString("Add new video translation successful."), string.Empty,
                                                             videoId));
                }

                await RollbackInsertVideoTranslation();
                await RollbackInsertVideo();

                return(new ActionResultResponse <string>(-3,
                                                         _websiteResourceService.GetString(
                                                             "Can not insert new video. Please contact with administrator.")));
            }

            async Task RollbackInsertVideo()
            {
                await _videoRepository.ForceDelete(videoId);
            }

            async Task RollbackInsertVideoTranslation()
            {
                await _videoTranslationRepository.ForceDelete(videoId);
            }

            #endregion
        }