Ejemplo n.º 1
0
        public static async Task <RepositoryResponse <PaginationModel <TView> > > GetListPostByAdditionalField <TView>(
            string fieldName, object fieldValue, string culture, MixDataType dataType
            , MixCompareOperatorKind filterType = MixCompareOperatorKind.Equal
            , string orderByPropertyName        = null, Heart.Enums.MixHeartEnums.DisplayDirection direction = Heart.Enums.MixHeartEnums.DisplayDirection.Asc, 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
            {
                var result = new RepositoryResponse <PaginationModel <TView> >()
                {
                    IsSucceed = true,
                    Data      = new PaginationModel <TView>()
                    {
                        PageIndex = pageIndex.HasValue ? pageIndex.Value : 0,
                        PageSize  = pageSize
                    }
                };
                // Get Value Predicate By Type
                Expression <Func <MixAttributeSetValue, bool> > valPredicate = m => m.AttributeSetName == MixConstants.AttributeSetName.ADDITIONAL_FIELD_POST &&
                                                                               m.AttributeFieldName == fieldName;

                var pre = GetValuePredicate(fieldValue.ToString(), filterType, dataType);
                if (pre != null)
                {
                    valPredicate = valPredicate.AndAlso(pre);
                }

                var query        = context.MixAttributeSetValue.Where(valPredicate).Select(m => m.DataId).Distinct();
                var dataIds      = query.ToList();
                var relatedQuery = context.MixRelatedAttributeData.Where(
                    m => m.ParentType == MixDatabaseParentType.Post && m.Specificulture == culture &&
                    dataIds.Any(d => d == m.DataId));
                var postIds = relatedQuery.Select(m => int.Parse(m.ParentId)).Distinct().AsEnumerable().ToList();
                result = await DefaultRepository <MixCmsContext, MixPost, TView> .Instance.GetModelListByAsync(
                    m => m.Specificulture == culture && postIds.Any(p => p == m.Id)
                    , orderByPropertyName, direction
                    , pageSize ?? 100, pageIndex ?? 0
                    , 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.Dispose();
                }
            }
        }
Ejemplo n.º 2
0
        private static string GetColumnType(MixDataType dataType, int?maxLength = null)
        {
            var provider = MixService.GetEnumConfig <MixDatabaseProvider>(MixConstants.CONST_SETTING_DATABASE_PROVIDER);

            switch (dataType)
            {
            case MixDataType.DateTime:
            case MixDataType.Date:
            case MixDataType.Time:
                return(provider switch
                {
                    MixDatabaseProvider.PostgreSQL => "timestamp without time zone",
                    _ => "datetime"
                });
Ejemplo n.º 3
0
        private static string GetColumn(MixDataType colType)
        {
            switch (colType)
            {
            case MixDataType.DateTime:
            case MixDataType.Date:
            case MixDataType.Time:
                return("DateTimeValue");

            case MixDataType.Double:
                return("DoubleValue");

            case MixDataType.Boolean:
                return("BooleanValue");

            case MixDataType.Integer:
                return("IntegerValue");

            case MixDataType.Reference:
            case MixDataType.Upload:
            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.Color:
            case MixDataType.Icon:
            case MixDataType.VideoYoutube:
            case MixDataType.TuiEditor:
            default:
                return("StringValue");
            }
        }
Ejemplo n.º 4
0
        private static Expression <Func <MixAttributeSetValue, bool> > GetValuePredicate(string fieldValue
                                                                                         , MixCompareOperatorKind filterType, MixDataType dataType)
        {
            Expression <Func <MixAttributeSetValue, bool> > valPredicate = null;

            switch (dataType)
            {
            case MixDataType.Date:
            case MixDataType.Time:
                if (DateTime.TryParse(fieldValue, out DateTime dtValue))
                {
                    valPredicate = FilterObjectSet <MixAttributeSetValue, DateTime>("DateTimeValue", dtValue, filterType);
                }
                break;

            case MixDataType.Double:
                if (double.TryParse(fieldValue, out double dbValue))
                {
                    valPredicate = FilterObjectSet <MixAttributeSetValue, double>("DoubleValue", dbValue, filterType);
                }
                break;

            case MixDataType.Boolean:
                if (bool.TryParse(fieldValue, out bool boolValue))
                {
                    valPredicate = FilterObjectSet <MixAttributeSetValue, bool>("BooleanValue", boolValue, filterType);
                }
                break;

            case MixDataType.Integer:
                if (int.TryParse(fieldValue, out int intValue))
                {
                    valPredicate = FilterObjectSet <MixAttributeSetValue, int>("IntegerValue", intValue, filterType);
                }
                break;

            case MixDataType.Reference:
                break;

            case MixDataType.Duration:
            case MixDataType.Custom:
            case MixDataType.DateTime:
            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:
            case MixDataType.QRCode:
            default:
                valPredicate = FilterObjectSet <MixAttributeSetValue, string>("StringValue", fieldValue, filterType);
                break;
            }

            return(valPredicate);
        }