/// <summary>
 /// From ThemeTranslation Pivot To ThemeTranslation Dto.
 /// </summary>
 /// <param name="themeTranslationPivot">themeTranslation pivot to assemble.</param>
 /// <returns>ThemeTranslationDto result.</returns>
 public static ThemeTranslationDto ToDto(this ThemeTranslationPivot themeTranslationPivot)
 {
     if (themeTranslationPivot == null)
     {
         return(null);
     }
     return(new ThemeTranslationDto
     {
         TranslationId = themeTranslationPivot.TranslationId,
         ThemeName = themeTranslationPivot.ThemeName,
         ThemeId = themeTranslationPivot.ThemeId,
         Theme = themeTranslationPivot.Theme.ToDto(),
         LanguageId = themeTranslationPivot.LanguageId,
         Language = themeTranslationPivot.Language.ToDto(),
     });
 }
 /// <summary>
 /// From ThemeTranslationPivot to ThemeTranslation.
 /// </summary>
 /// <param name="themeTranslationPivot">themeTranslationPivot to assemble.</param>
 /// <returns>ThemeTranslation result.</returns>
 public static ThemeTranslation ToEntity(this ThemeTranslationPivot themeTranslationPivot)
 {
     if (themeTranslationPivot == null)
     {
         return(null);
     }
     return(new ThemeTranslation
     {
         Language = themeTranslationPivot.Language.ToEntity(),
         TranslationId = themeTranslationPivot.TranslationId,
         Theme = themeTranslationPivot.Theme.ToEntity(),
         LanguageId = themeTranslationPivot.LanguageId,
         ThemeName = themeTranslationPivot.ThemeName,
         ThemeId = themeTranslationPivot.ThemeId
     });
 }
        /// <summary>
        /// Search PublicationTheme.
        /// </summary>
        /// <param name="request">The PublicationTheme Request Pivot to retrive.</param>
        /// <returns>PublicationTheme Response Pivot response.</returns>
        public PublicationThemeResponsePivot FindPublicationThemes(PublicationThemeRequestPivot request)
        {
            if (request?.PublicationThemePivot == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            List <PublicationThemePivot> results = new List <PublicationThemePivot>();
            PublicationThemePivot        result  = new PublicationThemePivot();

            List <PublicationTranslationPivot> publicationTranslationPivotList = new List <PublicationTranslationPivot>();
            PublicationTranslationPivot        publicationTranslationPivot     = new PublicationTranslationPivot();

            List <ThemeTranslationPivot> themeTranslationPivotList = new List <ThemeTranslationPivot>();
            ThemeTranslationPivot        themeTranslationPivot     = new ThemeTranslationPivot();

            switch (request.FindPublicationThemePivot)
            {
            case FindPublicationThemePivot.PublicationThemeId:
                result = _unitOfWork.PublicationThemeRepository
                         .Get(p => p.PublicationThemeId == request.PublicationThemePivot.PublicationThemeId)
                         ?.FirstOrDefault().ToPivot();

                themeTranslationPivot = _unitOfWork.ThemeTranslationRepository
                                        .Get(t => t.ThemeId == request.PublicationThemePivot.ThemeId).FirstOrDefault().ToPivot();

                publicationTranslationPivot = _unitOfWork.PublicationTranslationRepository
                                              .Get(p => p.PublicationId == request.PublicationThemePivot.PublicationId).FirstOrDefault()
                                              .ToPivot();
                break;

            case FindPublicationThemePivot.PublicationId:
                results = _unitOfWork.PublicationThemeRepository
                          .Get(p => p.PublicationId == request.PublicationThemePivot.PublicationId)?.ToList()
                          .ToPivotList();

                if (results != null)
                {
                    foreach (PublicationThemePivot publicationThemePivot in results)
                    {
                        publicationTranslationPivotList.AddRange(_unitOfWork.PublicationTranslationRepository
                                                                 .Get(p => p.PublicationId == publicationThemePivot.PublicationId).ToList()
                                                                 .ToPivotList());

                        themeTranslationPivotList.AddRange(_unitOfWork.ThemeTranslationRepository
                                                           .Get(t => t.ThemeId == publicationThemePivot.ThemeId).ToList()
                                                           .ToPivotList());
                    }
                }
                break;

            case FindPublicationThemePivot.ThemeId:
                results = _unitOfWork.PublicationThemeRepository
                          .Get(p => p.ThemeId == request.PublicationThemePivot.ThemeId)?.ToList().ToPivotList();

                if (results != null)
                {
                    foreach (PublicationThemePivot publicationThemePivot in results)
                    {
                        publicationTranslationPivotList.AddRange(_unitOfWork.PublicationTranslationRepository
                                                                 .Get(p => p.PublicationId == publicationThemePivot.PublicationId).ToList()
                                                                 .ToPivotList());

                        themeTranslationPivotList.AddRange(_unitOfWork.ThemeTranslationRepository
                                                           .Get(t => t.ThemeId == publicationThemePivot.ThemeId).ToList()
                                                           .ToPivotList());
                    }
                }
                break;

            case FindPublicationThemePivot.PublicationIdAndThemeId:
                result = _unitOfWork.PublicationThemeRepository
                         .Get(
                    p => p.ThemeId == request.PublicationThemePivot.ThemeId &&
                    p.PublicationId == request.PublicationThemePivot.PublicationId
                    )?.FirstOrDefault().ToPivot();

                themeTranslationPivot = _unitOfWork.ThemeTranslationRepository
                                        .Get(t => t.ThemeId == request.PublicationThemePivot.ThemeId).FirstOrDefault().ToPivot();

                publicationTranslationPivot = _unitOfWork.PublicationTranslationRepository
                                              .Get(p => p.PublicationId == request.PublicationThemePivot.PublicationId).FirstOrDefault()
                                              .ToPivot();
                break;
            }
            return(new PublicationThemeResponsePivot
            {
                PublicationTranslationPivotList = publicationTranslationPivotList,
                PublicationTranslationPivot = publicationTranslationPivot,

                ThemeTranslationPivotList = themeTranslationPivotList,
                ThemeTranslationPivot = themeTranslationPivot,

                PublicationThemePivotList = results,
                PublicationThemePivot = result
            });
        }