Esempio n. 1
0
        public static async Task <RepositoryResponse <PaginationModel <TView> > > GetModelistByMeta <TView>(
            string culture, string metaName, string metaValue
            , string orderByPropertyName, int direction, int?pageSize, int?pageIndex
            , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
            where TView : ViewModelBase <MixCmsContext, MixPost, TView>
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                var result = new RepositoryResponse <PaginationModel <TView> >()
                {
                    IsSucceed = true,
                    Data      = new PaginationModel <TView>()
                    {
                        PageIndex = pageIndex.HasValue ? pageIndex.Value : 0,
                        PageSize  = pageSize
                    }
                };
                var tasks = new List <Task <RepositoryResponse <TView> > >();
                // Get Tag
                var getVal = await MixAttributeSetValues.ReadViewModel.Repository.GetSingleModelAsync(m => m.AttributeSetName == metaName && m.StringValue == metaValue
                                                                                                      , context, transaction);

                if (getVal.IsSucceed)
                {
                    var getRelatedData = await MixRelatedAttributeDatas.ReadViewModel.Repository.GetModelListByAsync(
                        m => m.Specificulture == culture && m.Id == getVal.Data.DataId &&
                        m.ParentType == (int)MixEnums.MixAttributeSetDataType.Post
                        , orderByPropertyName, direction, pageIndex, pageSize
                        , _context : context, _transaction : transaction
                        );

                    if (getRelatedData.IsSucceed)
                    {
                        foreach (var item in getRelatedData.Data.Items)
                        {
                            if (int.TryParse(item.ParentId, out int postId))
                            {
                                var getData = await DefaultRepository <MixCmsContext, MixPost, TView> .Instance.GetSingleModelAsync(
                                    m => m.Specificulture == item.Specificulture && m.Id == postId
                                    , context, transaction);

                                if (getData.IsSucceed)
                                {
                                    result.Data.Items.Add(getData.Data);
                                }
                            }
                        }
                        result.Data.TotalItems = getRelatedData.Data.TotalItems;
                        result.Data.TotalPage  = getRelatedData.Data.TotalPage;
                    }
                    //var query = context.MixRelatedAttributeData.Where(m=> m.Specificulture == culture
                    //    && m.Id == getVal.Data.DataId && m.ParentId == parentId && m.ParentType == (int) MixEnums.MixAttributeSetDataType.Post)
                    //    .Select(m => m.ParentId).Distinct().ToList();
                }
                Expression <Func <MixAttributeSetValue, bool> > valPredicate = m => m.Specificulture == culture && m.AttributeSetName == metaName && m.StringValue == metaValue;

                return(result);
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    context.Dispose();
                }
            }
        }
Esempio n. 2
0
        public static async Task <RepositoryResponse <PaginationModel <TView> > > SearchPost <TView>(
            string keyword
            , List <string> dataIds
            , string culture             = null
            , string orderByPropertyName = "CreatedDateTime"
            , Heart.Enums.MixHeartEnums.DisplayDirection direction = Heart.Enums.MixHeartEnums.DisplayDirection.Desc
            , int?pageSize           = null, int?pageIndex = null
            , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
            where TView : ViewModelBase <MixCmsContext, MixPost, TView>
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                culture = culture ?? MixService.GetConfig <string>("DefaultCulture");
                var result = new RepositoryResponse <PaginationModel <TView> >()
                {
                    IsSucceed = true,
                    Data      = new PaginationModel <TView>()
                };
                List <int> postIds = null;
                Expression <Func <MixRelatedAttributeData, bool> > predicate =
                    m => m.Specificulture == culture && m.ParentType == MixEnums.MixAttributeSetDataType.Post.ToString();

                foreach (var id in dataIds)
                {
                    // Get list related post ids by data id
                    Expression <Func <MixRelatedAttributeData, bool> > dataPredicate =
                        m => m.Specificulture == culture && m.ParentType == MixEnums.MixAttributeSetDataType.Post.ToString() &&
                        m.DataId == id;
                    var ids = context.MixRelatedAttributeData.Where(dataPredicate).Select(m => int.Parse(m.ParentId)).ToList();

                    // if first id in list => return ids
                    if (postIds == null)
                    {
                        postIds = ids.Distinct().ToList();
                    }
                    else
                    {
                        // filter ids by new data id ( for 'AND' condition)
                        postIds = postIds.Where(m => ids.Contains(m)).Distinct().ToList();
                        // if there is no items => no need to filter more
                        if (postIds.Count == 0)
                        {
                            break;
                        }
                    }
                }

                // Load Posts
                Expression <Func <MixPost, bool> > postPredicate = m => m.Specificulture == culture &&
                                                                   (string.IsNullOrEmpty(keyword) ||
                                                                    (EF.Functions.Like(m.Title, $"%{keyword}%")) ||
                                                                    (EF.Functions.Like(m.Excerpt, $"%{keyword}%")) ||
                                                                    (EF.Functions.Like(m.Content, $"%{keyword}%")));

                if (postIds != null && postIds.Count > 0)
                {
                    postPredicate = m => m.Specificulture == culture &&
                                    (string.IsNullOrEmpty(keyword) ||
                                     (EF.Functions.Like(m.Title, $"%{keyword}%")) ||
                                     (EF.Functions.Like(m.Excerpt, $"%{keyword}%")) ||
                                     (EF.Functions.Like(m.Content, $"%{keyword}%"))) &&
                                    postIds.Any(n => n == m.Id);
                }

                var getPosts = await DefaultRepository <MixCmsContext, MixPost, TView> .Instance.GetModelListByAsync(
                    postPredicate
                    , orderByPropertyName, direction
                    , pageSize, pageIndex
                    , _context : context, _transaction : transaction);

                result = getPosts;
                return(result);
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    context.Database.CloseConnection(); transaction.Dispose(); context.Dispose();
                }
            }
        }
Esempio n. 3
0
        public static async Task <RepositoryResponse <PaginationModel <TView> > > GetPostListByValueId <TView>(
            string valueId
            , string culture             = null
            , string orderByPropertyName = "CreatedDateTime"
            , Heart.Enums.MixHeartEnums.DisplayDirection direction = Heart.Enums.MixHeartEnums.DisplayDirection.Desc
            , int?pageSize           = null, int?pageIndex = null
            , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
            where TView : ViewModelBase <MixCmsContext, MixPost, TView>
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                culture = culture ?? MixService.GetConfig <string>("DefaultCulture");
                var result = new RepositoryResponse <PaginationModel <TView> >()
                {
                    IsSucceed = true,
                    Data      = new PaginationModel <TView>()
                    {
                        PageIndex = pageIndex.HasValue ? pageIndex.Value : 0,
                        PageSize  = pageSize
                    }
                };
                // Get Tag
                var getVal = await MixAttributeSetValues.ReadViewModel.Repository.GetSingleModelAsync(
                    m => m.Specificulture == culture &&
                    m.Status == MixEnums.MixContentStatus.Published.ToString() &&
                    m.Id == valueId
                    , context, transaction);

                if (getVal.IsSucceed)
                {
                    result = await GetPostListByDataId <TView>(
                        dataId : getVal.Data.DataId,
                        culture : culture,
                        orderByPropertyName : orderByPropertyName,
                        direction : direction,
                        pageSize : pageSize,
                        pageIndex : pageIndex,
                        _context : context,
                        _transaction : transaction);

                    //var query = context.MixRelatedAttributeData.Where(m=> m.Specificulture == culture
                    //    && m.Id == getVal.Data.DataId && m.ParentId == parentId && m.ParentType == (int) MixEnums.MixAttributeSetDataType.Post)
                    //    .Select(m => m.ParentId).Distinct().ToList();
                }
                return(result);
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    context.Database.CloseConnection(); transaction.Dispose(); context.Dispose();
                }
            }
        }
Esempio n. 4
0
        public static RepositoryResponse <List <MixPagePosts.ReadViewModel> > GetPagePostNavAsync(int postId, string specificulture
                                                                                                  , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                var result = MixPagePosts.ReadViewModel.Repository.GetModelListBy(
                    m => m.PostId == postId && m.Specificulture == specificulture,
                    context, transaction).Data;
                var activeIds = result.Select(n => n.PageId);

                var inactiveNavs = context.MixPage
                                   .Where(a => a.Specificulture == specificulture &&
                                          !activeIds.Any(m => m == a.Id) &&
                                          (a.Type == MixPageType.ListPost)
                                          )
                                   .AsEnumerable()
                                   .Select(p => new MixPagePosts.ReadViewModel(
                                               new MixPagePost()
                {
                    PostId         = postId,
                    PageId         = p.Id,
                    Specificulture = specificulture
                },
                                               _context, _transaction)
                {
                    IsActived   = p.MixPagePost.Any(cp => cp.PostId == postId && cp.Specificulture == specificulture),
                    Description = p.Title
                });

                result.AddRange(inactiveNavs.ToList());

                return(new RepositoryResponse <List <ReadViewModel> >()
                {
                    IsSucceed = true,
                    Data = result
                });
            }
            catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only
            {
                if (isRoot)
                {
                    transaction.Rollback();
                }
                return(new RepositoryResponse <List <MixPagePosts.ReadViewModel> >()
                {
                    IsSucceed = true,
                    Data = null,
                    Exception = ex
                });
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    transaction.Dispose();
                    UnitOfWorkHelper <MixCmsContext> .CloseDbContext(ref context, ref transaction);
                }
            }
        }
Esempio n. 5
0
        public static async Task <RepositoryResponse <PaginationModel <TView> > > SearchPostByIds <TView>(
            string keyword
            , List <string> dataIds
            , List <int> pageIds         = null
            , string culture             = null
            , string orderByPropertyName = "CreatedDateTime"
            , Heart.Enums.MixHeartEnums.DisplayDirection direction = Heart.Enums.MixHeartEnums.DisplayDirection.Desc
            , int?pageSize           = null, int?pageIndex = null
            , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
            where TView : ViewModelBase <MixCmsContext, MixPost, TView>
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                culture = culture ?? MixService.GetConfig <string>("DefaultCulture");
                Expression <Func <MixPost, bool> > postPredicate = m => m.Specificulture == culture &&
                                                                   (string.IsNullOrEmpty(keyword) ||
                                                                    (EF.Functions.Like(m.Title, $"%{keyword}%")) ||
                                                                    (EF.Functions.Like(m.Excerpt, $"%{keyword}%")) ||
                                                                    (EF.Functions.Like(m.Content, $"%{keyword}%")));
                if (dataIds.Count > 0)
                {
                    var searchPostByDataIds = SearchPostByDataIdsPredicate(dataIds, culture, context);
                    postPredicate = searchPostByDataIds.AndAlso(postPredicate);
                }

                if (pageIds != null && pageIds.Count > 0)
                {
                    var searchPostByPageIds = SearchPostByPageIdsPredicate(pageIds, culture, context);
                    postPredicate = searchPostByPageIds.AndAlso(postPredicate);
                }

                if (!typeof(MixPost).GetProperties().Any(p => p.Name.ToLower() == orderByPropertyName.ToLower()))
                {
                    var postIds        = context.MixPost.Where(postPredicate).Select(p => p.Id);
                    var orderedPostIds = context.MixRelatedAttributeData.Where(
                        m => m.Specificulture == culture && postIds.Any(p => p.ToString() == m.ParentId))
                                         .Join(context.MixAttributeSetValue, r => r.DataId, v => v.DataId, (r, v) => new { r, v })
                                         .OrderBy(rv => rv.v.StringValue)
                                         .Select(rv => rv.r.ParentId);
                    postPredicate = p => orderedPostIds.Distinct().Any(o => o == p.Id.ToString() && p.Specificulture == culture);
                }

                return(await DefaultRepository <MixCmsContext, MixPost, TView> .Instance.GetModelListByAsync(
                           postPredicate
                           , orderByPropertyName, direction
                           , pageSize, pageIndex
                           , _context : context, _transaction : transaction));
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    UnitOfWorkHelper <MixCmsContext> .CloseDbContext(ref context, ref transaction);
                }
            }
        }
Esempio n. 6
0
        public static async Task <RepositoryResponse <PaginationModel <TView> > > FilterByKeywordAsync <TView>(string culture, HttpRequest request, MixCmsContext _context = null, IDbContextTransaction _transaction = null)
            where TView : ViewModelBase <MixCmsContext, MixAttributeSetData, TView>
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                var queryDictionary  = request.Query.ToList();
                var attributeSetName = request.Query["attributeSetName"].ToString();
                var keyword          = request.Query["keyword"].ToString();
                var filterType       = request.Query["filterType"].ToString();
                var orderBy          = request.Query["orderBy"].ToString();
                int.TryParse(request.Query["attributeSetId"], out int attributeSetId);
                bool isDirection = Enum.TryParse(request.Query["direction"], out Heart.Enums.MixHeartEnums.DisplayDirection direction);
                int.TryParse(request.Query["pageIndex"], out int pageIndex);
                int.TryParse(request.Query["pageSize"], out int pageSize);
                bool isFromDate = DateTime.TryParse(request.Query["fromDate"], out DateTime fromDate);
                bool isToDate   = DateTime.TryParse(request.Query["toDate"], out DateTime toDate);
                bool isStatus   = Enum.TryParse(request.Query["status"], out MixEnums.MixContentStatus status);
                var  tasks      = new List <Task <RepositoryResponse <TView> > >();
                var  getfields  = await MixAttributeFields.ReadViewModel.Repository.GetModelListByAsync(
                    m => m.AttributeSetId == attributeSetId || m.AttributeSetName == attributeSetName, context, transaction);

                var    fields       = getfields.IsSucceed ? getfields.Data : new List <MixAttributeFields.ReadViewModel>();
                string strQuery     = !string.IsNullOrEmpty(request.Query["query"]) ? request.Query["query"].ToString() : "{}";
                var    fieldQueries = JObject.Parse(strQuery);

                Expression <Func <MixAttributeSetValue, bool> > attrPredicate = null;
                // val predicate
                Expression <Func <MixAttributeSetValue, bool> > valPredicate = null;
                // Data predicate
                Expression <Func <MixAttributeSetData, bool> > predicate = m => m.Specificulture == culture &&
                                                                           (m.AttributeSetId == attributeSetId || m.AttributeSetName == attributeSetName) &&
                                                                           (!isStatus || (m.Status == status.ToString())) &&
                                                                           (!isFromDate || (m.CreatedDateTime >= fromDate)) &&
                                                                           (!isToDate || (m.CreatedDateTime <= toDate));
                RepositoryResponse <PaginationModel <TView> > result = new RepositoryResponse <PaginationModel <TView> >()
                {
                    IsSucceed = true,
                    Data      = new PaginationModel <TView>()
                };

                // if filter by field name or keyword => filter by attr value
                if (fieldQueries.Count > 0 || !string.IsNullOrEmpty(keyword))
                {
                    // filter by all fields if have keyword
                    if (!string.IsNullOrEmpty(keyword))
                    {
                        foreach (var field in fields)
                        {
                            Expression <Func <MixAttributeSetValue, bool> > pre =
                                m => m.AttributeFieldName == field.Name &&
                                (filterType == "equal" && m.StringValue == keyword) ||
                                (filterType == "contain" && (EF.Functions.Like(m.StringValue, $"%{keyword}%")));
                            if (valPredicate != null)
                            {
                                valPredicate = ReflectionHelper.CombineExpression(valPredicate, pre, Heart.Enums.MixHeartEnums.ExpressionMethod.And);
                            }
                            else
                            {
                                valPredicate = pre;
                            }
                        }
                    }
                    if (fieldQueries != null && fieldQueries.Properties().Count() > 0) // filter by specific field name
                    {
                        foreach (var q in fieldQueries)
                        {
                            if (fields.Any(f => f.Name == q.Key))
                            {
                                string value = q.Value.ToString();
                                if (!string.IsNullOrEmpty(value))
                                {
                                    Expression <Func <MixAttributeSetValue, bool> > pre =
                                        m => m.AttributeFieldName == q.Key &&
                                        (filterType == "equal" && m.StringValue == (q.Value.ToString())) ||
                                        (filterType == "contain" && (EF.Functions.Like(m.StringValue, $"%{q.Value.ToString()}%")));
                                    if (valPredicate != null)
                                    {
                                        valPredicate = ReflectionHelper.CombineExpression(valPredicate, pre, Heart.Enums.MixHeartEnums.ExpressionMethod.Or);
                                    }
                                    else
                                    {
                                        valPredicate = pre;
                                    }
                                }
                            }
                        }
                    }
                    if (valPredicate != null)
                    {
                        attrPredicate = attrPredicate == null ? valPredicate
                                : ReflectionHelper.CombineExpression(valPredicate, attrPredicate, Heart.Enums.MixHeartEnums.ExpressionMethod.And);
                    }

                    if (attrPredicate != null)
                    {
                        var query   = context.MixAttributeSetValue.Where(attrPredicate).Select(m => m.DataId).Distinct();
                        var dataIds = query.ToList();
                        if (query != null)
                        {
                            Expression <Func <MixAttributeSetData, bool> > pre = m => dataIds.Any(id => m.Id == id);
                            predicate = ReflectionHelper.CombineExpression(pre, predicate, Heart.Enums.MixHeartEnums.ExpressionMethod.And);
                        }
                    }
                }
                result = await DefaultRepository <MixCmsContext, MixAttributeSetData, TView> .Instance.GetModelListByAsync(
                    predicate, orderBy, direction, pageSize, pageIndex, null, null, context, transaction);

                return(result);
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    context.Database.CloseConnection(); transaction.Dispose(); context.Dispose();
                }
            }
        }
Esempio n. 7
0
        public void LoadData(int?pageSize             = null, int?pageIndex = null
                             , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                pageSize  = pageSize > 0 ? pageSize : PageSize;
                pageIndex = pageIndex ?? 0;
                Expression <Func <MixPageModule, bool> >  dataExp    = null;
                Expression <Func <MixPageArticle, bool> > articleExp = null;
                Expression <Func <MixPageProduct, bool> > productExp = null;
                foreach (var item in Modules)
                {
                    item.Module.LoadData(pageSize: pageSize, pageIndex: pageIndex, _context: context, _transaction: transaction);
                }
                switch (Type)
                {
                case MixPageType.ListArticle:
                    articleExp = n => n.CategoryId == Id && n.Specificulture == Specificulture;
                    break;

                case MixPageType.ListProduct:
                    productExp = n => n.CategoryId == Id && n.Specificulture == Specificulture;
                    break;

                default:
                    dataExp    = m => m.CategoryId == Id && m.Specificulture == Specificulture;
                    articleExp = n => n.CategoryId == Id && n.Specificulture == Specificulture;
                    productExp = m => m.CategoryId == Id && m.Specificulture == Specificulture;
                    break;
                }

                if (articleExp != null)
                {
                    var getArticles = MixPageArticles.ReadViewModel.Repository
                                      .GetModelListBy(articleExp
                                                      , MixService.GetConfig <string>(MixConstants.ConfigurationKeyword.OrderBy), 0
                                                      , pageSize, pageIndex
                                                      , _context: context, _transaction: transaction);
                    if (getArticles.IsSucceed)
                    {
                        Articles = getArticles.Data;
                    }
                }
                if (productExp != null)
                {
                    var getArticles = MixPageArticles.ReadViewModel.Repository
                                      .GetModelListBy(articleExp
                                                      , MixService.GetConfig <string>(MixConstants.ConfigurationKeyword.OrderBy), 0
                                                      , pageSize, pageIndex
                                                      , _context: context, _transaction: transaction);
                    if (getArticles.IsSucceed)
                    {
                        Articles = getArticles.Data;
                    }
                }
            }
            catch (Exception ex)
            {
                UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <ReadMvcViewModel> >(ex, isRoot, transaction);
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    context.Dispose();
                }
            }
        }
Esempio n. 8
0
        public static async Task <RepositoryResponse <PaginationModel <TView> > > SearchPosts <TView>(
            SearchPostQueryModel searchPostData,
            MixCmsContext _context             = null,
            IDbContextTransaction _transaction = null)
            where TView : ViewModelBase <MixCmsContext, MixPost, TView>
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                Expression <Func <MixDatabaseDataValue, bool> > valPredicate   = null;
                Expression <Func <MixDatabaseDataValue, bool> > catePredicate  = GetCategoryPredicate(searchPostData);
                Expression <Func <MixDatabaseDataValue, bool> > tagPredicate   = GetTagPredicate(searchPostData);
                Expression <Func <MixDatabaseDataValue, bool> > queryPredicate = GetQueryPredicate(searchPostData);

                valPredicate = valPredicate
                               .AndAlsoIf(queryPredicate != null, queryPredicate)
                               .AndAlsoIf(catePredicate != null, catePredicate)
                               .AndAlsoIf(tagPredicate != null, tagPredicate);

                if (valPredicate != null)
                {
                    return(await SearchPostByValue <TView>(valPredicate, searchPostData, context, transaction));
                }
                else
                {
                    Expression <Func <MixPost, bool> > predicate = BuildPostExpression(searchPostData);

                    if (searchPostData.PagingData.OrderBy.StartsWith("additionalData."))
                    {
                        return(GetSortedPostByValue <TView>(predicate, searchPostData, context, transaction));
                    }

                    if (searchPostData.PageId.HasValue)
                    {
                        return(GetSortedPostByPage <TView>(predicate, searchPostData, context, transaction));
                    }

                    return(await DefaultRepository <MixCmsContext, MixPost, TView> .Instance.GetModelListByAsync(
                               predicate,
                               searchPostData.PagingData.OrderBy,
                               searchPostData.PagingData.Direction,
                               searchPostData.PagingData.PageSize,
                               searchPostData.PagingData.PageIndex,
                               null, null,
                               context,
                               transaction));
                }
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    UnitOfWorkHelper <MixCmsContext> .CloseDbContext(ref context, ref transaction);
                }
            }
        }
Esempio n. 9
0
        public static async Task <RepositoryResponse <PaginationModel <TView> > > GetPostListByDataId <TView>(
            string dataId
            , string culture                         = null
            , string orderByPropertyName             = "CreatedDateTime"
            , Heart.Enums.DisplayDirection direction = Heart.Enums.DisplayDirection.Desc
            , int?pageSize           = null, int?pageIndex = null
            , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
            where TView : ViewModelBase <MixCmsContext, MixPost, TView>
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                culture = culture ?? MixService.GetAppSetting <string>("DefaultCulture");
                var getRelatedData = await MixDatabaseDataAssociations.ReadViewModel.Repository.GetModelListByAsync(
                    m => m.Specificulture == culture && m.DataId == dataId &&
                    m.ParentType == MixDatabaseParentType.Post
                    , orderByPropertyName = "CreatedDateTime", direction, pageSize, pageIndex
                    , _context : context, _transaction : transaction
                    );

                var result = new RepositoryResponse <PaginationModel <TView> >()
                {
                    IsSucceed = true,
                    Data      = new PaginationModel <TView>()
                    {
                        Items     = new List <TView>(),
                        PageIndex = pageIndex ?? 0,
                        PageSize  = pageSize
                    }
                };
                if (getRelatedData.IsSucceed)
                {
                    foreach (var item in getRelatedData.Data.Items)
                    {
                        if (int.TryParse(item.ParentId, out int postId))
                        {
                            var getData = await DefaultRepository <MixCmsContext, MixPost, TView> .Instance.GetSingleModelAsync(
                                m => m.Specificulture == item.Specificulture && m.Id == postId
                                , context, transaction);

                            if (getData.IsSucceed)
                            {
                                result.Data.Items.Add(getData.Data);
                            }
                        }
                    }
                    result.Data.TotalItems = getRelatedData.Data.TotalItems;
                    result.Data.TotalPage  = getRelatedData.Data.TotalPage;
                }
                return(result);
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    UnitOfWorkHelper <MixCmsContext> .CloseDbContext(ref context, ref transaction);
                }
            }
        }
Esempio n. 10
0
        public static async Task <RepositoryResponse <JObject> > SaveByModuleName(string culture, string createdBy, string name, string formName, JObject obj
                                                                                  , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                var getModule = await Repository.GetSingleModelAsync(m => m.Specificulture == culture && m.Name == name, context, transaction);

                string dataId = obj["id"]?.Value <string>();
                if (getModule.IsSucceed)
                {
                    // Get Attribute set
                    var getAttrSet = await Lib.ViewModels.MixAttributeSets.ReadViewModel.Repository.GetSingleModelAsync(m => m.Name == formName, context, transaction);

                    if (getAttrSet.IsSucceed)
                    {
                        // Save attr data + navigation
                        MixAttributeSetDatas.UpdateViewModel data = new MixAttributeSetDatas.UpdateViewModel()
                        {
                            Id               = dataId,
                            CreatedBy        = createdBy,
                            AttributeSetId   = getAttrSet.Data.Id,
                            AttributeSetName = getAttrSet.Data.Name,
                            Specificulture   = culture,
                            Data             = obj
                        };

                        // Create navigation module - attr data
                        var getNavigation = await MixRelatedAttributeDatas.ReadViewModel.Repository.GetSingleModelAsync(
                            m => m.ParentId == getModule.Data.Id.ToString() && m.ParentType == MixDatabaseParentType.Module && m.Specificulture == culture
                            , context, transaction);

                        if (!getNavigation.IsSucceed)
                        {
                            data.RelatedData.Add(new MixRelatedAttributeDatas.UpdateViewModel()
                            {
                                ParentId       = getModule.Data.Id.ToString(),
                                Specificulture = culture,
                                ParentType     = MixDatabaseParentType.Module
                            });
                        }
                        var portalResult = await data.SaveModelAsync(true, context, transaction);

                        UnitOfWorkHelper <MixCmsContext> .HandleTransaction(portalResult.IsSucceed, isRoot, transaction);

                        return(new RepositoryResponse <JObject>()
                        {
                            IsSucceed = portalResult.IsSucceed,
                            Data = portalResult.Data?.Data,
                            Exception = portalResult.Exception,
                            Errors = portalResult.Errors
                        });
                    }
                    else
                    {
                        return(new RepositoryResponse <JObject>()
                        {
                            IsSucceed = false,
                            Status = (int)MixResponseStatus.BadRequest
                        });
                    }
                }
                else
                {
                    return(new RepositoryResponse <JObject>()
                    {
                        IsSucceed = false,
                        Status = (int)MixResponseStatus.BadRequest
                    });
                }
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <MixCmsContext> .HandleException <JObject>(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    UnitOfWorkHelper <MixCmsContext> .CloseDbContext(ref context, ref transaction);
                }
            }
        }
Esempio n. 11
0
        private async Task <RepositoryResponse <bool> > ImportPagesAsync(string destCulture,
                                                                         MixCmsContext _context = null, IDbContextTransaction _transaction = null)
        {
            var result = new RepositoryResponse <bool>()
            {
                IsSucceed = true
            };

            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                int startId = MixPages.UpdateViewModel.ModelRepository.Max(m => m.Id, context, transaction).Data + 1;
                //var pages = FileRepository.Instance.GetFile(MixConstants.CONST_FILE_PAGES, "data", true, "{}");
                //var obj = JObject.Parse(pages.Content);
                //var initPages = obj["data"].ToObject<JArray>();
                foreach (var item in Pages)
                {
                    // store old id => update to related data if save success
                    var oldId = item.Id;

                    item.Id = startId;
                    item.CreatedDateTime = DateTime.UtcNow;
                    item.ThemeName       = ThemeName;

                    //if (_context.MixPage.Any(m=>m.Id == startId)) //(item.Id > initPages.Count)
                    //{
                    //    item.Id = _context.MixPage.Max(m => m.Id) + 1;
                    //    item.CreatedDateTime = DateTime.UtcNow;
                    //}
                    if (!string.IsNullOrEmpty(item.Image))
                    {
                        item.Image = item.Image.Replace($"content/templates/{ThemeName}", $"content/templates/{MixService.GetConfig<string>("ThemeFolder", destCulture)}");
                    }
                    if (!string.IsNullOrEmpty(item.Thumbnail))
                    {
                        item.Thumbnail = item.Thumbnail.Replace($"content/templates/{ThemeName}", $"content/templates/{MixService.GetConfig<string>("ThemeFolder", destCulture)}");
                    }
                    item.Specificulture = destCulture;
                    var saveResult = await item.SaveModelAsync(true, context, transaction);

                    if (!saveResult.IsSucceed)
                    {
                        result.IsSucceed = false;
                        result.Exception = saveResult.Exception;
                        result.Errors    = saveResult.Errors;
                        break;
                    }
                    else
                    {
                        // update new id to related attribute data
                        var related = RelatedData.Where(
                            m => m.ParentType == (int)MixEnums.MixAttributeSetDataType.Page && m.ParentId == oldId.ToString());
                        foreach (var r in related)
                        {
                            r.ParentId = item.Id.ToString();
                        }
                        startId++;
                    }
                }
                UnitOfWorkHelper <MixCmsContext> .HandleTransaction(result.IsSucceed, isRoot, transaction);
            }
            catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only
            {
                var error = UnitOfWorkHelper <MixCmsContext> .HandleException <MixPages.ImportViewModel>(ex, isRoot, transaction);

                result.IsSucceed = false;
                result.Errors    = error.Errors;
                result.Exception = error.Exception;
            }
            finally
            {
                //if current Context is Root
                if (isRoot)
                {
                    context?.Dispose();
                }
            }
            return(result);
        }
Esempio n. 12
0
			V_1 = Expression.Parameter(System.Type.GetTypeFromHandle(// 
			// Current member / type: System.Void Mix.Cms.Lib.ViewModels.MixPages.ReadMvcViewModel::LoadAttributes(Mix.Cms.Lib.Models.Cms.MixCmsContext,Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction)
			// Exception in: System.Void LoadAttributes(Mix.Cms.Lib.Models.Cms.MixCmsContext,Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction)
			// Specified method is not supported.
			// 
			// mailto: [email protected]


		public void LoadData(int? pageSize = null, int? pageIndex = null, MixCmsContext _context = null, IDbContextTransaction _transaction = null)
		{
			UnitOfWorkHelper<MixCmsContext>.InitTransaction(_context, _transaction, ref V_0, ref V_1, ref V_2);
			try
			{
				try
				{
					V_4 = pageSize;
					if (V_4.GetValueOrDefault() > 0 & V_4.get_HasValue())
					{
						stackVariable14 = pageSize;
					}
					else
					{
						stackVariable14 = this.get_PageSize();
					}
					pageSize = stackVariable14;
					V_4 = pageIndex;
					if (V_4.GetValueOrDefault() > 0 & V_4.get_HasValue())
					{
						stackVariable24 = pageIndex;
					}
					else
					{
						stackVariable24 = new int?(0);
					}
					pageIndex = stackVariable24;
					V_3 = null;
					V_6 = this.get_Modules().GetEnumerator();
					try
					{
						while (V_6.MoveNext())
						{
							V_4 = null;
							stackVariable35 = V_4;
							V_4 = null;
							stackVariable37 = V_4;
							V_4 = null;
							V_6.get_Current().get_Module().LoadData(stackVariable35, stackVariable37, V_4, pageSize, pageIndex, V_0, V_1);
						}
					}
					finally
					{
						((IDisposable)V_6).Dispose();
					}
					if (this.get_Type() != 2)
					{
						V_7 = Expression.Parameter(System.Type.GetTypeFromHandle(// 
						// Current member / type: System.Void Mix.Cms.Lib.ViewModels.MixPages.ReadMvcViewModel::LoadData(System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,Mix.Cms.Lib.Models.Cms.MixCmsContext,Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction)
						// Exception in: System.Void LoadData(System.Nullable<System.Int32>,System.Nullable<System.Int32>,Mix.Cms.Lib.Models.Cms.MixCmsContext,Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction)
						// Specified method is not supported.
						// 
						// mailto: [email protected]


		public void LoadDataByKeyword(string keyword, string orderBy, int orderDirection, int? pageSize = null, int? pageIndex = null, MixCmsContext _context = null, IDbContextTransaction _transaction = null)
		{
			V_0 = new Mix.Cms.Lib.ViewModels.MixPages.ReadMvcViewModel.u003cu003ec__DisplayClass149_0();
			V_0.keyword = keyword;
			V_0.u003cu003e4__this = this;
			UnitOfWorkHelper<MixCmsContext>.InitTransaction(_context, _transaction, ref V_1, ref V_2, ref V_3);
			try
			{
				try
				{
					V_5 = pageSize;
					if (V_5.GetValueOrDefault() > 0 & V_5.get_HasValue())
					{
						stackVariable19 = pageSize;
					}
					else
					{
						stackVariable19 = this.get_PageSize();
					}
					pageSize = stackVariable19;
					pageIndex = new int?(pageIndex.GetValueOrDefault());
					V_4 = null;
					V_7 = Expression.Parameter(System.Type.GetTypeFromHandle(// 
					// Current member / type: System.Void Mix.Cms.Lib.ViewModels.MixPages.ReadMvcViewModel::LoadDataByKeyword(System.String,System.String,System.Int32,System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,Mix.Cms.Lib.Models.Cms.MixCmsContext,Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction)
					// Exception in: System.Void LoadDataByKeyword(System.String,System.String,System.Int32,System.Nullable<System.Int32>,System.Nullable<System.Int32>,Mix.Cms.Lib.Models.Cms.MixCmsContext,Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction)
					// Specified method is not supported.
					// 
					// mailto: [email protected]


		public void LoadDataByTag(string tagName, string orderBy, int orderDirection, int? pageSize = null, int? pageIndex = null, MixCmsContext _context = null, IDbContextTransaction _transaction = null)
		{
			V_0 = new Mix.Cms.Lib.ViewModels.MixPages.ReadMvcViewModel.u003cu003ec__DisplayClass148_0();
			V_0.u003cu003e4__this = this;
			UnitOfWorkHelper<MixCmsContext>.InitTransaction(_context, _transaction, ref V_1, ref V_2, ref V_3);
			try
			{
				try
				{
					V_5 = pageSize;
					if (V_5.GetValueOrDefault() > 0 & V_5.get_HasValue())
					{
						stackVariable17 = pageSize;
					}
					else
					{
						stackVariable17 = this.get_PageSize();
					}
					pageSize = stackVariable17;
					pageIndex = new int?(pageIndex.GetValueOrDefault());
					V_4 = null;
					V_0.obj = new JObject(new JProperty("text", tagName));
					V_7 = Expression.Parameter(System.Type.GetTypeFromHandle(// 
					// Current member / type: System.Void Mix.Cms.Lib.ViewModels.MixPages.ReadMvcViewModel::LoadDataByTag(System.String,System.String,System.Int32,System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,Mix.Cms.Lib.Models.Cms.MixCmsContext,Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction)
					// Exception in: System.Void LoadDataByTag(System.String,System.String,System.Int32,System.Nullable<System.Int32>,System.Nullable<System.Int32>,Mix.Cms.Lib.Models.Cms.MixCmsContext,Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction)
					// Specified method is not supported.
					// 
					// mailto: [email protected]


		public T Property<T>(string fieldName)
		{
			if (this.get_AttributeData() == null)
			{
				V_1 = default(T);
				return V_1;
			}
			V_0 = this.get_AttributeData().get_Data().get_Data().GetValue(fieldName);
			if (V_0 != null)
			{
				return Newtonsoft.Json.Linq.Extensions.Value<T>(V_0);
			}
			V_1 = default(T);
			return V_1;
		}
	}
}
Esempio n. 13
0
        public static async Task <RepositoryResponse <PaginationModel <TView> > > SearchPost <TView>(
            string keyword
            , List <string> dataIds
            , List <int> pageIds         = null
            , string culture             = null
            , string orderByPropertyName = "CreatedDateTime"
            , Heart.Enums.MixHeartEnums.DisplayDirection direction = Heart.Enums.MixHeartEnums.DisplayDirection.Desc
            , int?pageSize           = null, int?pageIndex = null
            , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
            where TView : ViewModelBase <MixCmsContext, MixPost, TView>
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                culture = culture ?? MixService.GetConfig <string>("DefaultCulture");
                var result = new RepositoryResponse <PaginationModel <TView> >()
                {
                    IsSucceed = true,
                    Data      = new PaginationModel <TView>()
                };
                List <int> postIds = SearchPostByDataIds(dataIds, culture, context);
                if (pageIds != null && pageIds.Count > 0)
                {
                    postIds.AddRange(SearchPostByPageIds(pageIds, culture, context));
                    postIds = postIds.Distinct().ToList();
                }
                // Load Posts

                if (postIds != null && postIds.Count > 0)
                {
                    Expression <Func <MixPost, bool> > postPredicate = m => m.Specificulture == culture &&
                                                                       (string.IsNullOrEmpty(keyword) ||
                                                                        (EF.Functions.Like(m.Title, $"%{keyword}%")) ||
                                                                        (EF.Functions.Like(m.Excerpt, $"%{keyword}%")) ||
                                                                        (EF.Functions.Like(m.Content, $"%{keyword}%"))) &&
                                                                       postIds.Any(n => n == m.Id);

                    var getPosts = await DefaultRepository <MixCmsContext, MixPost, TView> .Instance.GetModelListByAsync(
                        postPredicate
                        , orderByPropertyName, direction
                        , pageSize, pageIndex
                        , _context : context, _transaction : transaction);

                    result = getPosts;
                }
                return(result);
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    UnitOfWorkHelper <MixCmsContext> .CloseDbContext(ref context, ref transaction);
                }
            }
        }
			V_1 = Expression.Parameter(System.Type.GetTypeFromHandle(// 
			// Current member / type: System.Void Mix.Cms.Lib.ViewModels.MixModules.ReadMvcViewModel::LoadAttributes(Mix.Cms.Lib.Models.Cms.MixCmsContext,Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction)
			// Exception in: System.Void LoadAttributes(Mix.Cms.Lib.Models.Cms.MixCmsContext,Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction)
			// Specified method is not supported.
			// 
			// mailto: [email protected]


		public void LoadData(int? postId = null, int? productId = null, int? pageId = null, int? pageSize = null, int? pageIndex = 0, MixCmsContext _context = null, IDbContextTransaction _transaction = null)
		{
			V_0 = new Mix.Cms.Lib.ViewModels.MixModules.ReadMvcViewModel.u003cu003ec__DisplayClass136_0();
			V_0.u003cu003e4__this = this;
			V_0.pageId = pageId;
			V_0.postId = postId;
			UnitOfWorkHelper<MixCmsContext>.InitTransaction(_context, _transaction, ref V_1, ref V_2, ref V_3);
			try
			{
				try
				{
					V_6 = pageSize;
					if (V_6.GetValueOrDefault() > 0 & V_6.get_HasValue())
					{
						stackVariable21 = pageSize;
					}
					else
					{
						stackVariable21 = this.get_PageSize();
					}
					pageSize = stackVariable21;
					V_6 = pageIndex;
					if (V_6.GetValueOrDefault() > 0 & V_6.get_HasValue())
					{
						stackVariable31 = pageIndex;
					}
					else
					{
						stackVariable31 = new int?(0);
					}
					pageIndex = stackVariable31;
					V_4 = null;
					V_5 = null;
					switch (this.get_Type())
					{
						case 0:
						case 1:
						{
							V_9 = Expression.Parameter(System.Type.GetTypeFromHandle(// 
							// Current member / type: System.Void Mix.Cms.Lib.ViewModels.MixModules.ReadMvcViewModel::LoadData(System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,Mix.Cms.Lib.Models.Cms.MixCmsContext,Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction)
							// Exception in: System.Void LoadData(System.Nullable<System.Int32>,System.Nullable<System.Int32>,System.Nullable<System.Int32>,System.Nullable<System.Int32>,System.Nullable<System.Int32>,Mix.Cms.Lib.Models.Cms.MixCmsContext,Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction)
							// Specified method is not supported.
							// 
							// mailto: [email protected]


		public T Property<T>(string fieldName)
		{
			if (this.get_AttributeData() == null)
			{
				V_1 = default(T);
				return V_1;
			}
			V_0 = this.get_AttributeData().get_Data().get_Data().GetValue(fieldName);
			if (V_0 != null)
			{
				return Newtonsoft.Json.Linq.Extensions.Value<T>(V_0);
			}
			V_1 = default(T);
			return V_1;
		}
	}
Esempio n. 15
0
        public static Task <RepositoryResponse <List <TView> > > FilterByValueAsync <TView>(string culture, string attributeSetName
                                                                                            , Dictionary <string, Microsoft.Extensions.Primitives.StringValues> queryDictionary
                                                                                            , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
            where TView : ODataViewModelBase <MixCmsContext, MixAttributeSetData, TView>
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                Expression <Func <MixAttributeSetValue, bool> > valPredicate = m => m.Specificulture == culture && m.AttributeSetName == attributeSetName;
                RepositoryResponse <List <TView> > result = new RepositoryResponse <List <TView> >()
                {
                    IsSucceed = true,
                    Data      = new List <TView>()
                };
                var tasks = new List <Task <RepositoryResponse <TView> > >();

                // Loop queries string => predicate
                foreach (var q in queryDictionary)
                {
                    if (!string.IsNullOrEmpty(q.Key) && !string.IsNullOrEmpty(q.Value))
                    {
                        Expression <Func <MixAttributeSetValue, bool> > pre = m => m.AttributeFieldName == q.Key && m.StringValue.Contains(q.Value);
                        valPredicate = ReflectionHelper.CombineExpression(valPredicate, pre, Heart.Enums.MixHeartEnums.ExpressionMethod.And);
                    }
                }
                var query = context.MixAttributeSetValue.Where(valPredicate).Select(m => m.DataId).Distinct().ToList();
                if (query != null)
                {
                    foreach (var item in query)
                    {
                        tasks.Add(Task.Run(async() =>
                        {
                            var resp = await ODataDefaultRepository <MixCmsContext, MixAttributeSetData, TView> .Instance.GetSingleModelAsync(
                                m => m.Id == item && m.Specificulture == culture);
                            return(resp);
                        }));
                    }
                    var continuation = Task.WhenAll(tasks);
                    continuation.Wait();
                    if (continuation.Status == TaskStatus.RanToCompletion)
                    {
                        foreach (var data in continuation.Result)
                        {
                            if (data.IsSucceed)
                            {
                                result.Data.Add(data.Data);
                            }
                            else
                            {
                                result.Errors.AddRange(data.Errors);
                            }
                        }
                    }
                    // Display information on faulted tasks.
                    else
                    {
                        foreach (var t in tasks)
                        {
                            result.Errors.Add($"Task {t.Id}: {t.Status}");
                        }
                    }
                }
                return(Task.FromResult(result));
            }
            catch (Exception ex)
            {
                return(Task.FromResult(UnitOfWorkHelper <MixCmsContext> .HandleException <List <TView> >(ex, isRoot, transaction)));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    context.Database.CloseConnection(); transaction.Dispose(); context.Dispose();
                }
            }
        }
Esempio n. 16
0
        public static RepositoryResponse <AdditionalViewModel> LoadAdditionalData(
            MixDatabaseParentType parentType,
            string parentId,
            string databaseName,
            string culture         = null,
            MixCmsContext _context = null, IDbContextTransaction _transaction = null)
        {
            culture = culture ?? MixService.GetConfig <string>("DefaultCulture");
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                var dataId = context.MixRelatedAttributeData.FirstOrDefault(
                    m => m.AttributeSetName == databaseName && m.ParentType == parentType && m.ParentId == parentId && m.Specificulture == culture)?.DataId;
                if (!string.IsNullOrEmpty(dataId))
                {
                    return(AdditionalViewModel.Repository.GetSingleModel(
                               m => m.Id == dataId && m.Specificulture == culture
                               , context, transaction));
                }
                else
                {
                    // Init default data
                    var getAttrSet = MixAttributeSets.UpdateViewModel.Repository.GetSingleModel(
                        m => m.Name == databaseName
                        , context, transaction);
                    if (getAttrSet.IsSucceed)
                    {
                        AdditionalViewModel result = new AdditionalViewModel()
                        {
                            Specificulture   = culture,
                            AttributeSetId   = getAttrSet.Data.Id,
                            AttributeSetName = getAttrSet.Data.Name,
                            Status           = MixContentStatus.Published,
                            Fields           = getAttrSet.Data.Fields,
                            ParentType       = parentType,
                            ParentId         = parentId
                        };
                        result.ExpandView(context, transaction);
                        return(new RepositoryResponse <AdditionalViewModel>()
                        {
                            IsSucceed = true,
                            Data = result
                        });
                    }
                    return(new RepositoryResponse <AdditionalViewModel>());
                }
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <MixCmsContext> .HandleException <AdditionalViewModel>(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    UnitOfWorkHelper <MixCmsContext> .CloseDbContext(ref context, ref transaction);
                }
            }
        }
Esempio n. 17
0
        public static async Task <RepositoryResponse <PaginationModel <TView> > > FilterByKeywordAsync <TView>(string culture, string attributeSetName
                                                                                                               , RequestPaging request, string keyword
                                                                                                               , Dictionary <string, Microsoft.Extensions.Primitives.StringValues> queryDictionary = null
                                                                                                               , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
            where TView : ViewModelBase <MixCmsContext, MixAttributeSetData, TView>
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                Expression <Func <MixAttributeSetValue, bool> > attrPredicate =
                    m => m.Specificulture == culture && m.AttributeSetName == attributeSetName &&
                    (!request.FromDate.HasValue ||
                     (m.CreatedDateTime >= request.FromDate.Value)
                    ) &&
                    (!request.ToDate.HasValue ||
                     (m.CreatedDateTime <= request.ToDate.Value)
                    )
                ;
                Expression <Func <MixAttributeSetValue, bool> > valPredicate = null;
                RepositoryResponse <PaginationModel <TView> >   result       = new RepositoryResponse <PaginationModel <TView> >()
                {
                    IsSucceed = true,
                    Data      = new PaginationModel <TView>()
                };
                var filterType = queryDictionary.FirstOrDefault(q => q.Key == "filterType");
                var tasks      = new List <Task <RepositoryResponse <TView> > >();
                if (queryDictionary != null)
                {
                    foreach (var q in queryDictionary)
                    {
                        if (!string.IsNullOrEmpty(q.Key) && q.Key != "attributeSetId" && q.Key != "attributeSetName" && q.Key != "filterType" && !string.IsNullOrEmpty(q.Value))
                        {
                            if (!string.IsNullOrEmpty(filterType.Value) && filterType.Value == "equal")
                            {
                                Expression <Func <MixAttributeSetValue, bool> > pre = m =>
                                                                                      m.AttributeFieldName == q.Key && m.StringValue == (q.Value.ToString());
                                if (valPredicate != null)
                                {
                                    valPredicate = ReflectionHelper.CombineExpression(valPredicate, pre, Heart.Enums.MixHeartEnums.ExpressionMethod.And);
                                }
                                else
                                {
                                    valPredicate = pre;
                                }
                            }
                            else
                            {
                                Expression <Func <MixAttributeSetValue, bool> > pre =
                                    m => m.AttributeFieldName == q.Key &&
                                    (EF.Functions.Like(m.StringValue, $"%{q.Value.ToString()}%"));
                                if (valPredicate != null)
                                {
                                    valPredicate = ReflectionHelper.CombineExpression(valPredicate, pre, Heart.Enums.MixHeartEnums.ExpressionMethod.And);
                                }
                                else
                                {
                                    valPredicate = pre;
                                }
                            }
                        }
                    }
                    if (valPredicate != null)
                    {
                        attrPredicate = ReflectionHelper.CombineExpression(valPredicate, attrPredicate, Heart.Enums.MixHeartEnums.ExpressionMethod.And);
                    }
                }
                // Loop queries string => predicate
                if (!string.IsNullOrEmpty(keyword))
                {
                    Expression <Func <MixAttributeSetValue, bool> > pre = m => m.AttributeSetName == attributeSetName && m.Specificulture == culture && m.StringValue.Contains(keyword);
                    attrPredicate = ReflectionHelper.CombineExpression(attrPredicate, pre, Heart.Enums.MixHeartEnums.ExpressionMethod.And);
                }

                var query   = context.MixAttributeSetValue.Where(attrPredicate).Select(m => m.DataId).Distinct();
                var dataIds = query.ToList();
                if (query != null)
                {
                    Expression <Func <MixAttributeSetData, bool> > predicate = m => dataIds.Any(id => m.Id == id);
                    result = await DefaultRepository <MixCmsContext, MixAttributeSetData, TView> .Instance.GetModelListByAsync(
                        predicate, request.OrderBy, request.Direction, request.PageSize, request.PageIndex, null, null, context, transaction);
                }
                return(result);
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    context.Database.CloseConnection(); transaction.Dispose(); context.Dispose();
                }
            }
        }
Esempio n. 18
0
        public static async Task <RepositoryResponse <PaginationModel <TView> > > FilterByKeywordAsync <TView>(HttpRequest request, string culture = null, string attributeSetName = null, MixCmsContext _context = null, IDbContextTransaction _transaction = null)
            where TView : ViewModelBase <MixCmsContext, MixAttributeSetData, TView>
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                culture = culture ?? MixService.GetConfig <string>("DefaultCulture");
                var queryDictionary = request.Query.ToList();
                attributeSetName = attributeSetName ?? request.Query["attributeSetName"].ToString();
                var keyword    = request.Query["keyword"].ToString();
                var filterType = request.Query["filterType"].ToString();
                var orderBy    = request.Query["orderBy"].ToString();
                int.TryParse(request.Query["attributeSetId"], out int attributeSetId);
                bool isDirection = Enum.TryParse(request.Query["direction"], out Heart.Enums.MixHeartEnums.DisplayDirection direction);
                int.TryParse(request.Query["pageIndex"], out int pageIndex);
                var  isPageSize = int.TryParse(request.Query["pageSize"], out int pageSize);
                bool isFromDate = DateTime.TryParse(request.Query["fromDate"], out DateTime fromDate);
                bool isToDate   = DateTime.TryParse(request.Query["toDate"], out DateTime toDate);
                bool isStatus   = Enum.TryParse(request.Query["status"], out MixContentStatus status);
                var  tasks      = new List <Task <RepositoryResponse <TView> > >();
                var  getfields  = await MixAttributeFields.ReadViewModel.Repository.GetModelListByAsync(
                    m => m.AttributeSetId == attributeSetId || m.AttributeSetName == attributeSetName, context, transaction);

                var fields       = getfields.IsSucceed ? getfields.Data : new List <MixAttributeFields.ReadViewModel>();
                var fieldQueries = !string.IsNullOrEmpty(request.Query["query"]) ? JObject.Parse(request.Query["query"]) : new JObject();

                // Data predicate
                Expression <Func <MixAttributeSetData, bool> > predicate = m => m.Specificulture == culture &&
                                                                           (m.AttributeSetName == attributeSetName);

                // val predicate
                Expression <Func <MixAttributeSetValue, bool> > attrPredicate = m => m.Specificulture == culture &&
                                                                                (m.AttributeSetName == attributeSetName);

                RepositoryResponse <PaginationModel <TView> > result = new RepositoryResponse <PaginationModel <TView> >()
                {
                    IsSucceed = true,
                    Data      = new PaginationModel <TView>()
                };

                // if filter by field name or keyword => filter by attr value
                if (fieldQueries.Count > 0 || !string.IsNullOrEmpty(keyword))
                {
                    // filter by all fields if have keyword
                    if (!string.IsNullOrEmpty(keyword))
                    {
                        Expression <Func <MixAttributeSetValue, bool> > pre = null;
                        foreach (var field in fields)
                        {
                            Expression <Func <MixAttributeSetValue, bool> > keywordPredicate = m => m.AttributeFieldName == field.Name;
                            keywordPredicate = keywordPredicate.AndAlsoIf(filterType == "equal", m => m.StringValue == keyword);
                            keywordPredicate = keywordPredicate.AndAlsoIf(filterType == "contain", m => EF.Functions.Like(m.StringValue, $"%{keyword}%"));

                            pre = pre == null
                                ? keywordPredicate
                                : pre.Or(keywordPredicate);
                        }
                        attrPredicate = attrPredicate.AndAlsoIf(pre != null, pre);
                    }

                    if (fieldQueries != null && fieldQueries.Properties().Count() > 0) // filter by specific field name
                    {
                        var valPredicate = GetFilterValueByFields(fields, fieldQueries, filterType);
                        attrPredicate.AndAlsoIf(valPredicate != null, valPredicate);
                    }

                    var query   = context.MixAttributeSetValue.Where(attrPredicate).Select(m => m.DataId).Distinct();
                    var dataIds = query.ToList();

                    predicate = predicate.AndAlsoIf(query != null, m => dataIds.Any(id => m.Id == id));
                }
                else
                {
                    predicate = m => m.Specificulture == culture &&
                                (m.AttributeSetId == attributeSetId || m.AttributeSetName == attributeSetName) &&
                                (!isStatus || (m.Status == status)) &&
                                (!isFromDate || (m.CreatedDateTime >= fromDate)) &&
                                (!isToDate || (m.CreatedDateTime <= toDate));
                }
                result = await DefaultRepository <MixCmsContext, MixAttributeSetData, TView> .Instance.GetModelListByAsync(
                    predicate, orderBy, direction, isPageSize?pageSize : default, isPageSize?pageIndex : 0, null, null, context, transaction);
Esempio n. 19
0
        public static async Task <RepositoryResponse <List <TView> > > FilterByKeywordAsync <TView>(string culture, string attributeSetName
                                                                                                    , string filterType, string fieldName, string keyword
                                                                                                    , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
            where TView : ViewModelBase <MixCmsContext, MixAttributeSetData, TView>
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                Expression <Func <MixAttributeSetValue, bool> > attrPredicate = m => m.Specificulture == culture && m.AttributeSetName == attributeSetName;
                Expression <Func <MixAttributeSetValue, bool> > valPredicate  = null;
                RepositoryResponse <List <TView> > result = new RepositoryResponse <List <TView> >()
                {
                    IsSucceed = true,
                    Data      = new List <TView>()
                };
                if (filterType == "equal")
                {
                    Expression <Func <MixAttributeSetValue, bool> > pre = m => m.AttributeFieldName == fieldName && m.StringValue == keyword;
                    if (valPredicate != null)
                    {
                        valPredicate = ReflectionHelper.CombineExpression(valPredicate, pre, Heart.Enums.MixHeartEnums.ExpressionMethod.And);
                    }
                    else
                    {
                        valPredicate = pre;
                    }
                }
                else
                {
                    Expression <Func <MixAttributeSetValue, bool> > pre = m => m.AttributeFieldName == fieldName && m.StringValue.Contains(keyword);
                    if (valPredicate != null)
                    {
                        valPredicate = ReflectionHelper.CombineExpression(valPredicate, pre, Heart.Enums.MixHeartEnums.ExpressionMethod.And);
                    }
                    else
                    {
                        valPredicate = pre;
                    }
                }
                if (valPredicate != null)
                {
                    attrPredicate = ReflectionHelper.CombineExpression(valPredicate, attrPredicate, Heart.Enums.MixHeartEnums.ExpressionMethod.And);
                }

                var query   = context.MixAttributeSetValue.Where(attrPredicate).Select(m => m.DataId).Distinct();
                var dataIds = query.ToList();
                if (query != null)
                {
                    Expression <Func <MixAttributeSetData, bool> > predicate = m => dataIds.Any(id => m.Id == id);
                    result = await DefaultRepository <MixCmsContext, MixAttributeSetData, TView> .Instance.GetModelListByAsync(
                        predicate, context, transaction);
                }
                return(result);
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <MixCmsContext> .HandleException <List <TView> >(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    context.Database.CloseConnection(); transaction.Dispose(); context.Dispose();
                }
            }
        }
Esempio n. 20
0
        public void LoadData(int?postId               = null, int?productId = null, int?pageId = null
                             , int?pageSize           = null, int?pageIndex = 0
                             , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                pageSize  = pageSize > 0 ? pageSize : PageSize;
                pageIndex = pageIndex > 0 ? pageIndex : 0;
                Expression <Func <MixModuleData, bool> > dataExp = null;
                Expression <Func <MixModulePost, bool> > postExp = null;
                switch (Type)
                {
                case MixModuleType.Content:
                case MixModuleType.Data:
                    dataExp = m => m.ModuleId == Id && m.Specificulture == Specificulture;
                    //postExp = n => n.ModuleId == Id && n.Specificulture == Specificulture;
                    //productExp = m => m.ModuleId == Id && m.Specificulture == Specificulture;
                    break;

                case MixModuleType.ListPost:
                    postExp = n => n.ModuleId == Id && n.Specificulture == Specificulture;
                    break;

                default:
                    dataExp = m => m.ModuleId == Id && m.Specificulture == Specificulture;
                    postExp = n => n.ModuleId == Id && n.Specificulture == Specificulture;
                    break;
                }

                if (dataExp != null)
                {
                    var getDataResult = MixModuleDatas.ReadViewModel.Repository
                                        .GetModelListBy(
                        dataExp
                        , MixService.GetConfig <string>(MixAppSettingKeywords.OrderBy
                                                        ), 0
                        , pageSize, pageIndex
                        , _context: context, _transaction: transaction);
                    if (getDataResult.IsSucceed)
                    {
                        //getDataResult.Data.JsonItems = new List<JObject>();
                        //getDataResult.Data.Items.ForEach(d => getDataResult.Data.JsonItems.Add(d.JItem));
                        Data = getDataResult.Data;
                    }
                }
                if (postExp != null)
                {
                    var getPosts = MixModulePosts.ReadViewModel.Repository
                                   .GetModelListBy(postExp
                                                   , MixService.GetConfig <string>(MixAppSettingKeywords.OrderBy), 0
                                                   , pageSize, pageIndex
                                                   , _context: context, _transaction: transaction);
                    if (getPosts.IsSucceed)
                    {
                        Posts = getPosts.Data;
                    }
                }
            }
            catch (Exception ex)
            {
                UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <ReadMvcViewModel> >(ex, isRoot, transaction);
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    UnitOfWorkHelper <MixCmsContext> .CloseDbContext(ref context, ref transaction);
                }
            }
        }
Esempio n. 21
0
        public void LoadData(int?articleId            = null, int?productId = null, int?categoryId = null
                             , int?pageSize           = null, int?pageIndex = 0
                             , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                pageSize  = pageSize > 0 ? PageSize : PageSize;
                pageIndex = pageIndex ?? 0;
                Expression <Func <MixModuleData, bool> >    dataExp    = null;
                Expression <Func <MixModuleArticle, bool> > articleExp = null;
                Expression <Func <MixModuleProduct, bool> > productExp = null;
                switch (Type)
                {
                case MixModuleType.Content:
                case MixModuleType.Data:
                    dataExp = m => m.ModuleId == Id && m.Specificulture == Specificulture;
                    //articleExp = n => n.ModuleId == Id && n.Specificulture == Specificulture;
                    //productExp = m => m.ModuleId == Id && m.Specificulture == Specificulture;
                    break;

                case MixModuleType.SubPage:
                    dataExp    = m => m.ModuleId == Id && m.Specificulture == Specificulture && (m.CategoryId == categoryId);
                    articleExp = n => n.ModuleId == Id && n.Specificulture == Specificulture;
                    productExp = m => m.ModuleId == Id && m.Specificulture == Specificulture;
                    break;

                case MixModuleType.SubArticle:
                    dataExp = m => m.ModuleId == Id && m.Specificulture == Specificulture && (m.ArticleId == articleId);
                    break;

                case MixModuleType.SubProduct:
                    dataExp = m => m.ModuleId == Id && m.Specificulture == Specificulture && (m.ProductId == productId);
                    break;

                case MixModuleType.ListArticle:
                    articleExp = n => n.ModuleId == Id && n.Specificulture == Specificulture;
                    break;

                case MixModuleType.ListProduct:
                    productExp = n => n.ModuleId == Id && n.Specificulture == Specificulture;
                    break;

                default:
                    dataExp    = m => m.ModuleId == Id && m.Specificulture == Specificulture;
                    articleExp = n => n.ModuleId == Id && n.Specificulture == Specificulture;
                    productExp = m => m.ModuleId == Id && m.Specificulture == Specificulture;
                    break;
                }

                if (dataExp != null)
                {
                    var getDataResult = MixModuleDatas.ReadViewModel.Repository
                                        .GetModelListBy(
                        dataExp
                        , MixService.GetConfig <string>(MixConstants.ConfigurationKeyword.OrderBy), 0
                        , pageSize, pageIndex
                        , _context: context, _transaction: transaction);
                    if (getDataResult.IsSucceed)
                    {
                        getDataResult.Data.JsonItems = new List <JObject>();
                        getDataResult.Data.Items.ForEach(d => getDataResult.Data.JsonItems.Add(d.JItem));
                        Data = getDataResult.Data;
                    }
                }
                if (articleExp != null)
                {
                    var getArticles = MixModuleArticles.ReadViewModel.Repository
                                      .GetModelListBy(articleExp
                                                      , MixService.GetConfig <string>(MixConstants.ConfigurationKeyword.OrderBy), 0
                                                      , pageSize, pageIndex
                                                      , _context: context, _transaction: transaction);
                    if (getArticles.IsSucceed)
                    {
                        Articles = getArticles.Data;
                    }
                }
                if (productExp != null)
                {
                    var getProducts = MixModuleProducts.ReadViewModel.Repository
                                      .GetModelListBy(productExp
                                                      , MixService.GetConfig <string>(MixConstants.ConfigurationKeyword.OrderBy), 0
                                                      , PageSize, pageIndex
                                                      , _context: context, _transaction: transaction);
                    if (getProducts.IsSucceed)
                    {
                        Products = getProducts.Data;
                    }
                }
            }
            catch (Exception ex)
            {
                UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <ReadMvcViewModel> >(ex, isRoot, transaction);
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    context.Dispose();
                }
            }
        }
Esempio n. 22
0
        /// <summary>
        /// Saves the model asynchronous.
        /// </summary>
        /// <param name="isSaveSubModels">if set to <c>true</c> [is save sub models].</param>
        /// <param name="_context">The context.</param>
        /// <param name="_transaction">The transaction.</param>
        /// <returns></returns>
        public virtual async Task <RepositoryResponse <TView> > SaveModelAsync(bool isSaveSubModels = false, TDbContext _context = null, IDbContextTransaction _transaction = null)
        {
            UnitOfWorkHelper <TDbContext> .InitTransaction(_context, _transaction, out TDbContext context, out IDbContextTransaction transaction, out bool isRoot);

            RepositoryResponse <TView> result = new RepositoryResponse <TView>()
            {
                IsSucceed = true
            };

            Validate(context, transaction);
            if (IsValid)
            {
                try
                {
                    ParseModel(context, transaction);
                    result = await Repository.SaveModelAsync((TView)this, _context : context, _transaction : transaction);

                    // Save sub Models
                    if (result.IsSucceed && isSaveSubModels)
                    {
                        var saveResult = await SaveSubModelsAsync(Model, context, transaction);

                        if (!saveResult.IsSucceed)
                        {
                            result.Errors.AddRange(saveResult.Errors);
                            result.Exception = saveResult.Exception;
                        }
                        result.IsSucceed = result.IsSucceed && saveResult.IsSucceed;
                    }

                    UnitOfWorkHelper <TDbContext> .HandleTransaction(result.IsSucceed, isRoot, transaction);

                    await this.SendNotifyAsync(this, RepositoryAction.Save, result.IsSucceed);

                    return(result);
                }
                catch (Exception ex)
                {
                    return(UnitOfWorkHelper <TDbContext> .HandleException <TView>(ex, isRoot, transaction));
                }
                finally
                {
                    if (isRoot)
                    {
                        if (result.IsSucceed && IsCache)
                        {
                            await RemoveCache(Model, context, transaction);
                        }
                        UnitOfWorkHelper <TDbContext> .CloseDbContext(ref context, ref transaction);
                    }
                }
            }
            else
            {
                if (isRoot)
                {
                    //if current Context is Root
                    UnitOfWorkHelper <TDbContext> .CloseDbContext(ref context, ref transaction);
                }
                return(new RepositoryResponse <TView>()
                {
                    IsSucceed = false,
                    Data = null,
                    Errors = Errors
                });
            }
        }
Esempio n. 23
0
        public static async Task <RepositoryResponse <PaginationModel <TView> > > GetPostListByValueIds <TView>(
            List <string> valueIds
            , string culture             = null
            , string orderByPropertyName = "CreatedDateTime"
            , Heart.Enums.MixHeartEnums.DisplayDirection direction = Heart.Enums.MixHeartEnums.DisplayDirection.Desc
            , int?pageSize           = null, int?pageIndex = null
            , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
            where TView : ViewModelBase <MixCmsContext, MixPost, TView>
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                culture = culture ?? MixService.GetConfig <string>("DefaultCulture");
                var result = new RepositoryResponse <PaginationModel <TView> >()
                {
                    IsSucceed = true,
                    Data      = new PaginationModel <TView>()
                    {
                        PageIndex = pageIndex.HasValue ? pageIndex.Value : 0,
                        PageSize  = pageSize
                    }
                };
                // Get Data
                Expression <Func <MixAttributeSetValue, bool> > predicate = m => m.Specificulture == culture &&
                                                                            m.Status == MixContentStatus.Published;
                foreach (var item in valueIds)
                {
                    Expression <Func <MixAttributeSetValue, bool> > pre = m => m.Id == item;
                    predicate = predicate.AndAlso(pre);
                }
                var getVal = await MixAttributeSetValues.ReadViewModel.Repository.GetModelListByAsync(predicate, context, transaction);

                if (getVal.IsSucceed)
                {
                    var dataIds = getVal.Data.Select(m => m.DataId).Distinct();
                    if (dataIds.Count() == 1)
                    {
                        result = await GetPostListByDataIds <TView>(
                            dataIds : dataIds.ToList(),
                            culture : culture,
                            orderByPropertyName : orderByPropertyName,
                            direction : direction,
                            pageSize : pageSize,
                            pageIndex : pageIndex,
                            _context : context,
                            _transaction : transaction);
                    }
                    //var query = context.MixRelatedAttributeData.Where(m=> m.Specificulture == culture
                    //    && m.Id == getVal.Data.DataId && m.ParentId == parentId && m.ParentType == (int) MixEnums.MixAttributeSetDataType.Post)
                    //    .Select(m => m.ParentId).Distinct().ToList();
                }
                return(result);
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    UnitOfWorkHelper <MixCmsContext> .CloseDbContext(ref context, ref transaction);
                }
            }
        }
Esempio n. 24
0
        /// <summary>
        /// Clones the asynchronous.
        /// </summary>
        /// <param name="model"></param>
        /// <param name="cloneCultures">The clone cultures.</param>
        /// <param name="_context">The context.</param>
        /// <param name="_transaction">The transaction.</param>
        /// <returns></returns>
        public virtual async Task <RepositoryResponse <List <TView> > > CloneAsync(TModel model, List <SupportedCulture> cloneCultures
                                                                                   , TDbContext _context = null, IDbContextTransaction _transaction = null)
        {
            UnitOfWorkHelper <TDbContext> .InitTransaction(_context, _transaction, out TDbContext context, out IDbContextTransaction transaction, out bool isRoot);

            RepositoryResponse <List <TView> > result = new RepositoryResponse <List <TView> >()
            {
                IsSucceed = true,
                Data      = new List <TView>()
            };

            try
            {
                if (cloneCultures != null)
                {
                    foreach (var culture in cloneCultures)
                    {
                        string desSpecificulture = culture.Specificulture;

                        TModel m           = (TModel)context.Entry(model).CurrentValues.ToObject();
                        Type   myType      = typeof(TModel);
                        var    myFieldInfo = myType.GetProperty("Specificulture");
                        myFieldInfo.SetValue(m, desSpecificulture);
                        bool isExist = Repository.CheckIsExists(m, _context: context, _transaction: transaction);

                        if (isExist)
                        {
                            result.IsSucceed = true;
                        }
                        else
                        {
                            context.Entry(m).State = EntityState.Added;
                            await context.SaveChangesAsync();

                            var cloneSubResult = await CloneSubModelsAsync(m, cloneCultures, context, transaction).ConfigureAwait(false);

                            if (!cloneSubResult.IsSucceed)
                            {
                                cloneSubResult.Errors.AddRange(cloneSubResult.Errors);
                                cloneSubResult.Exception = cloneSubResult.Exception;
                            }

                            result.IsSucceed = result.IsSucceed && cloneSubResult.IsSucceed && cloneSubResult.IsSucceed;
                        }
                        _ = this.SendNotifyAsync(this, RepositoryAction.Clone, result.IsSucceed);
                    }
                    UnitOfWorkHelper <TDbContext> .HandleTransaction(result.IsSucceed, isRoot, transaction);

                    return(result);
                }
                else
                {
                    return(result);
                }
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <TDbContext> .HandleException <List <TView> >(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    UnitOfWorkHelper <TDbContext> .CloseDbContext(ref context, ref transaction);
                }
            }
        }
Esempio n. 25
0
        public static async Task <RepositoryResponse <PaginationModel <TView> > > GetPostListByDataIds <TView>(
            List <string> dataIds
            , string culture             = null
            , string orderByPropertyName = "CreatedDateTime"
            , Heart.Enums.MixHeartEnums.DisplayDirection direction = Heart.Enums.MixHeartEnums.DisplayDirection.Desc
            , int?pageSize           = null, int?pageIndex = null
            , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
            where TView : ViewModelBase <MixCmsContext, MixPost, TView>
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                culture = culture ?? MixService.GetConfig <string>("DefaultCulture");
                var result = new RepositoryResponse <PaginationModel <TView> >();
                Expression <Func <MixRelatedAttributeData, bool> > predicate = m => m.Specificulture == culture && dataIds.Contains(m.DataId) &&
                                                                               m.ParentType == MixEnums.MixAttributeSetDataType.Post.ToString();
                foreach (var id in dataIds)
                {
                    Expression <Func <MixRelatedAttributeData, bool> > pre = m => m.DataId == id;

                    predicate = ReflectionHelper.CombineExpression(
                        predicate
                        , pre
                        , Heart.Enums.MixHeartEnums.ExpressionMethod.And);
                }
                var getRelatedData = await MixRelatedAttributeDatas.ReadViewModel.Repository.GetModelListByAsync(
                    predicate
                    , orderByPropertyName = "CreatedDateTime", direction, pageSize, pageIndex
                    , _context : context, _transaction : transaction
                    );

                if (getRelatedData.IsSucceed)
                {
                    foreach (var item in getRelatedData.Data.Items)
                    {
                        if (int.TryParse(item.ParentId, out int postId))
                        {
                            var getData = await DefaultRepository <MixCmsContext, MixPost, TView> .Instance.GetSingleModelAsync(
                                m => m.Specificulture == item.Specificulture && m.Id == postId
                                , context, transaction);

                            if (getData.IsSucceed)
                            {
                                result = new RepositoryResponse <PaginationModel <TView> >()
                                {
                                    IsSucceed = true,
                                    Data      = new PaginationModel <TView>()
                                    {
                                        Items     = new List <TView>(),
                                        PageIndex = pageIndex ?? 0,
                                        PageSize  = pageSize
                                    }
                                };
                                result.Data.Items.Add(getData.Data);
                            }
                        }
                    }
                    result.Data.TotalItems = getRelatedData.Data.TotalItems;
                    result.Data.TotalPage  = getRelatedData.Data.TotalPage;
                }
                return(result);
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    context.Database.CloseConnection(); transaction.Dispose(); context.Dispose();
                }
            }
        }
Esempio n. 26
0
        public async Task <RepositoryResponse <bool> > ImportAsync(string destCulture,
                                                                   MixCmsContext _context = null, IDbContextTransaction _transaction = null)
        {
            var result = new RepositoryResponse <bool>()
            {
                IsSucceed = true
            };

            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                if (Configurations != null && Configurations.Count > 0)
                {
                    result = await ImportConfigurationsAsync(destCulture, context, transaction);
                }
                if (result.IsSucceed && Languages != null && Languages.Count > 0)
                {
                    result = await ImportLanguagesAsync(destCulture, context, transaction);
                }
                if (result.IsSucceed && Pages != null && Pages.Count > 0)
                {
                    result = await ImportPagesAsync(destCulture, context, transaction);
                }
                if (result.IsSucceed && Modules != null && Modules.Count > 0)
                {
                    result = await ImportModulesAsync(destCulture, context, transaction);
                }

                if (result.IsSucceed && ModuleDatas.Count > 0)
                {
                    result = await ImportModuleDatas(destCulture, context, transaction);
                }
                if (result.IsSucceed && Posts != null && Posts.Count > 0)
                {
                    result = await ImportPostsAsync(destCulture, context, transaction);
                }
                if (result.IsSucceed && AttributeSets != null && AttributeSets.Count > 0)
                {
                    result = await ImportAttributeSetsAsync(context, transaction);
                }
                if (result.IsSucceed && AttributeSetDatas.Count > 0)
                {
                    result = await ImportAttributeSetDatas(destCulture, context, transaction);
                }
                if (result.IsSucceed && RelatedData.Count > 0)
                {
                    result = await ImportRelatedDatas(destCulture, context, transaction);
                }

                UnitOfWorkHelper <MixCmsContext> .HandleTransaction(result.IsSucceed, isRoot, transaction);
            }
            catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only
            {
                var error = UnitOfWorkHelper <MixCmsContext> .HandleException <MixPages.ImportViewModel>(ex, isRoot, transaction);

                result.IsSucceed = false;
                result.Errors    = error.Errors;
                result.Exception = error.Exception;
            }
            finally
            {
                //if current Context is Root
                if (isRoot)
                {
                    UnitOfWorkHelper <MixCmsContext> .CloseDbContext(ref context, ref transaction);
                }
            }
            return(result);
        }
Esempio n. 27
0
        public static async Task <RepositoryResponse <PaginationModel <TView> > > GetModelistByAddictionalField <TView>(
            string fieldName, string value, string culture
            , string orderByPropertyName = "CreatedDateTime", Heart.Enums.MixHeartEnums.DisplayDirection direction = Heart.Enums.MixHeartEnums.DisplayDirection.Desc
            , int?pageSize           = null, int?pageIndex = 0
            , MixCmsContext _context = null, IDbContextTransaction _transaction = null)
            where TView : ViewModelBase <MixCmsContext, MixPost, TView>
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                var result = new RepositoryResponse <PaginationModel <TView> >()
                {
                    IsSucceed = true,
                    Data      = new PaginationModel <TView>()
                    {
                        PageIndex = pageIndex.HasValue ? pageIndex.Value : 0,
                        PageSize  = pageSize
                    }
                };
                var tasks = new List <Task <RepositoryResponse <TView> > >();
                // Get Value
                var dataIds = await context.MixAttributeSetValue.Where(
                    m => m.AttributeSetName == MixConstants.AttributeSetName.ADDITIONAL_FIELD_POST && m.Specificulture == culture &&
                    m.StringValue == value && m.AttributeFieldName == fieldName)
                              .Select(m => m.DataId)?.ToListAsync();

                if (dataIds != null && dataIds.Count > 0)
                {
                    var getRelatedData = await MixRelatedAttributeDatas.ReadViewModel.Repository.GetModelListByAsync(
                        m => dataIds.Contains(m.DataId)
                        , orderByPropertyName, direction, pageSize, pageIndex
                        , _context : context, _transaction : transaction
                        );

                    if (getRelatedData.IsSucceed)
                    {
                        foreach (var item in getRelatedData.Data.Items)
                        {
                            if (int.TryParse(item.ParentId, out int postId))
                            {
                                var getData = await DefaultRepository <MixCmsContext, MixPost, TView> .Instance.GetSingleModelAsync(
                                    m => m.Specificulture == item.Specificulture && m.Id == postId
                                    , context, transaction);

                                if (getData.IsSucceed)
                                {
                                    result.Data.Items.Add(getData.Data);
                                }
                            }
                        }
                        result.Data.TotalItems = getRelatedData.Data.TotalItems;
                        result.Data.TotalPage  = getRelatedData.Data.TotalPage;
                    }
                }

                return(result);
            }
            catch (Exception ex)
            {
                return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction));
            }
            finally
            {
                if (isRoot)
                {
                    //if current Context is Root
                    context.Database.CloseConnection(); transaction.Dispose(); context.Dispose();
                }
            }
        }
Esempio n. 28
0
        private async Task <RepositoryResponse <bool> > ImportPagesAsync(string destCulture,
                                                                         MixCmsContext _context = null, IDbContextTransaction _transaction = null)
        {
            var result = new RepositoryResponse <bool>()
            {
                IsSucceed = true
            };

            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                int startId       = MixPages.UpdateViewModel.ModelRepository.Max(m => m.Id, context, transaction).Data;
                int startModuleId = MixModules.UpdateViewModel.ModelRepository.Max(m => m.Id, context, transaction).Data;
                //var pages = FileRepository.Instance.GetFile(MixConstants.CONST_FILE_PAGES, "data", true, "{}");
                //var obj = JObject.Parse(pages.Content);
                //var initPages = obj["data"].ToObject<JArray>();
                foreach (var item in Pages)
                {
                    // store old id => update to related data if save success
                    var oldId = item.Id;
                    // TODO: Id > 7 => not system init page
                    if (!context.MixPage.Any(p => p.SeoName == item.SeoName))
                    {
                        startId++;
                        item.Id = startId;

                        item.CreatedDateTime = DateTime.UtcNow;
                        item.ThemeName       = ThemeName;

                        item.Specificulture = destCulture;
                        var saveResult = await item.SaveModelAsync(false, context, transaction);

                        if (!saveResult.IsSucceed)
                        {
                            result.IsSucceed = false;
                            result.Exception = saveResult.Exception;
                            result.Errors    = saveResult.Errors;
                            break;
                        }
                    }
                    if (!dicPageIds.Any(m => m.Key == item.Id))
                    {
                        dicPageIds.Add(oldId, startId);
                    }
                }
                UnitOfWorkHelper <MixCmsContext> .HandleTransaction(result.IsSucceed, isRoot, transaction);
            }
            catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only
            {
                var error = UnitOfWorkHelper <MixCmsContext> .HandleException <MixPages.ImportViewModel>(ex, isRoot, transaction);

                result.IsSucceed = false;
                result.Errors    = error.Errors;
                result.Exception = error.Exception;
            }
            finally
            {
                //if current Context is Root
                if (isRoot)
                {
                    UnitOfWorkHelper <MixCmsContext> .CloseDbContext(ref context, ref transaction);
                }
            }
            return(result);
        }
Esempio n. 29
0
        private async Task <RepositoryResponse <bool> > ImportPagesAsync(string destCulture,
                                                                         MixCmsContext _context = null, IDbContextTransaction _transaction = null)
        {
            var result = new RepositoryResponse <bool>()
            {
                IsSucceed = true
            };

            UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            try
            {
                int startId       = MixPages.UpdateViewModel.ModelRepository.Max(m => m.Id, context, transaction).Data;
                int startModuleId = MixModules.UpdateViewModel.ModelRepository.Max(m => m.Id, context, transaction).Data;
                //var pages = FileRepository.Instance.GetFile(MixConstants.CONST_FILE_PAGES, "data", true, "{}");
                //var obj = JObject.Parse(pages.Content);
                //var initPages = obj["data"].ToObject<JArray>();
                foreach (var item in Pages)
                {
                    // TODO: Id > 7 => not system init page
                    if (!context.MixPage.Any(p => p.SeoName == item.SeoName))
                    {
                        // store old id => update to related data if save success
                        var oldId = item.Id;

                        startId++;
                        dicPageIds.Add(oldId, startId);

                        item.Id = startId;

                        item.CreatedDateTime = DateTime.UtcNow;
                        item.ThemeName       = ThemeName;

                        if (item.ModuleNavs != null)
                        {
                            foreach (var nav in item.ModuleNavs)
                            {
                                startModuleId++;
                                dicModuleIds.Add(nav.Module.Id, startModuleId);

                                nav.Module.Id = startModuleId;

                                nav.PageId   = startId;
                                nav.ModuleId = startModuleId;
                            }
                        }

                        //if (_context.MixPage.Any(m=>m.Id == startId)) //(item.Id > initPages.Count)
                        //{
                        //    item.Id = _context.MixPage.Max(m => m.Id) + 1;
                        //    item.CreatedDateTime = DateTime.UtcNow;
                        //}
                        if (!string.IsNullOrEmpty(item.Image))
                        {
                            item.Image = item.Image.Replace($"content/templates/{ThemeName}", $"content/templates/{MixService.GetConfig<string>("ThemeFolder", destCulture)}");
                        }
                        if (!string.IsNullOrEmpty(item.Thumbnail))
                        {
                            item.Thumbnail = item.Thumbnail.Replace($"content/templates/{ThemeName}", $"content/templates/{MixService.GetConfig<string>("ThemeFolder", destCulture)}");
                        }
                        item.Specificulture = destCulture;
                        var saveResult = await item.SaveModelAsync(true, context, transaction);

                        if (!saveResult.IsSucceed)
                        {
                            result.IsSucceed = false;
                            result.Exception = saveResult.Exception;
                            result.Errors    = saveResult.Errors;
                            break;
                        }
                    }
                }
                UnitOfWorkHelper <MixCmsContext> .HandleTransaction(result.IsSucceed, isRoot, transaction);
            }
            catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only
            {
                var error = UnitOfWorkHelper <MixCmsContext> .HandleException <MixPages.ImportViewModel>(ex, isRoot, transaction);

                result.IsSucceed = false;
                result.Errors    = error.Errors;
                result.Exception = error.Exception;
            }
            finally
            {
                //if current Context is Root
                if (isRoot)
                {
                    context.Database.CloseConnection(); transaction.Dispose(); context.Dispose();
                }
            }
            return(result);
        }
Esempio n. 30
0
        public static JProperty ToJProperty(
            this MixAttributeSetValue item,
            MixCmsContext _context,
            IDbContextTransaction _transaction)
        {
            UnitOfWorkHelper <MixCmsContext> .InitTransaction(
                _context, _transaction,
                out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot);

            switch (item.DataType)
            {
            case MixDataType.DateTime:
                return(new JProperty(item.AttributeFieldName, item.DateTimeValue));

            case MixDataType.Date:
                if (!item.DateTimeValue.HasValue)
                {
                    if (DateTime.TryParseExact(
                            item.StringValue,
                            "MM/dd/yyyy HH:mm:ss",
                            CultureInfo.InvariantCulture,
                            DateTimeStyles.RoundtripKind,
                            out DateTime date))
                    {
                        item.DateTimeValue = date;
                    }
                }
                return(new JProperty(item.AttributeFieldName, item.DateTimeValue));

            case MixDataType.Time:
                return(new JProperty(item.AttributeFieldName, item.DateTimeValue));

            case MixDataType.Double:
                return(new JProperty(item.AttributeFieldName, item.DoubleValue ?? 0));

            case MixDataType.Boolean:
                return(new JProperty(item.AttributeFieldName, item.BooleanValue));

            case MixDataType.Integer:
                return(new JProperty(item.AttributeFieldName, item.IntegerValue ?? 0));

            case MixDataType.Reference:
                return(new JProperty(item.AttributeFieldName, new JArray()));

            case MixDataType.Custom:
            case MixDataType.Duration:
            case MixDataType.PhoneNumber:
            case MixDataType.Text:
            case MixDataType.Html:
            case MixDataType.MultilineText:
            case MixDataType.EmailAddress:
            case MixDataType.Password:
            case MixDataType.Url:
            case MixDataType.ImageUrl:
            case MixDataType.CreditCard:
            case MixDataType.PostalCode:
            case MixDataType.Upload:
            case MixDataType.Color:
            case MixDataType.Icon:
            case MixDataType.VideoYoutube:
            case MixDataType.TuiEditor:
            default:
                return(new JProperty(item.AttributeFieldName, item.StringValue));
            }
            if (isRoot)
            {
                transaction.Dispose();
                context.Dispose();
            }
        }