public async Task <ActionResultResponse <string> > Insert(string tenantId, string creatorId, string creatorFullName, string creatorAvata, FaqMeta faqMeta) { var faqId = Guid.NewGuid().ToString(); var infoGroup = await _faqGroupRepository.GetInfo(faqMeta.FaqGroupId.Trim()); if (infoGroup == null) { return(new ActionResultResponse <string>(-1, _websiteResourceService.GetString("Faq group does not exists."))); } // Insert new Faq. var resultInsertFaq = await _faqRepository.Insert(new Faq { Id = faqId, ConcurrencyStamp = faqId.Trim(), FaqGroupId = faqMeta.FaqGroupId.Trim(), Photo = faqMeta.Photo?.Trim(), Order = faqMeta.Order, IsActive = faqMeta.IsActive, TenantId = tenantId, CreatorId = creatorId, CreatorFullName = creatorFullName }); if (resultInsertFaq <= 0) { return(new ActionResultResponse <string>(resultInsertFaq, _sharedResourceService.GetString(ErrorMessage.SomethingWentWrong))); } #region insert Faq Translation. if (faqMeta.Translations.Count > 0) { var resultInsertTranslation = await InsertFaqTranslation(); if (resultInsertTranslation.Code <= 0) { return(resultInsertTranslation); } } #endregion return(new ActionResultResponse <string>(1, _websiteResourceService.GetString("Add new faq successful."), string.Empty, faqId)); #region Local functions async Task <ActionResultResponse <string> > InsertFaqTranslation() { var faqTranslations = new List <FaqTranslation>(); foreach (var faqTranslation in faqMeta.Translations) { // Check name exists. var isNameExists = await _faqTranslationRepository.CheckExists(faqId, tenantId, faqTranslation.LanguageId, faqTranslation.Question); if (isNameExists) { await RollbackInsertFaq(); return(new ActionResultResponse <string>(-2, _websiteResourceService.GetString( "Question: \"{0}\" already exists.", faqTranslation.Question))); } var faqTranslationInsert = new FaqTranslation { TenantId = tenantId, FaqId = faqId, LanguageId = faqTranslation.LanguageId.Trim(), Question = faqTranslation.Question.Trim(), Answer = faqTranslation.Answer?.Trim() }; faqTranslations.Add(faqTranslationInsert); } // Insert Faq translations. var resultInsertTranslation = await _faqTranslationRepository.Inserts(faqTranslations); if (resultInsertTranslation > 0) { return(new ActionResultResponse <string>(resultInsertFaq, _websiteResourceService.GetString("Add new faq translation successful."), string.Empty, faqId)); } await RollbackInsertFaqTranslation(); await RollbackInsertFaq(); return(new ActionResultResponse <string>(-3, _websiteResourceService.GetString( "Can not insert new faq . Please contact with administrator."))); } async Task RollbackInsertFaq() { await _faqRepository.ForceDelete(faqId); } async Task RollbackInsertFaqTranslation() { await _faqTranslationRepository.ForceDelete(faqId); } #endregion }