Beispiel #1
0
        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
        }