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(); } } }
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(); } } }
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(); } } }
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); } } }
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); } } }
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(); } } }
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(); } } }
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); } } }
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); } } }
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); } } }
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); }
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; } } }
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; } }
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(); } } }
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); } } }
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(); } } }
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);
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(); } } }
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); } } }
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(); } } }
/// <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 }); } }
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); } } }
/// <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); } } }
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(); } } }
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); }
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(); } } }
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); }
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); }
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(); } }