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 }