示例#1
0
        private string GetBooleanFilterAsString(APISearchTerm term)
        {
            string filter = "";
            string not    = "";
            string value  = "";

            switch (term.op)
            {
            case APISearch.SearchComparer.eq:
                foreach (string v in term.values)
                {
                    if (filter != "")
                    {
                        filter += " OR ";
                    }

                    value   = (v.ToLower() == "true") ? "1" : "0";
                    not     = term.not ? "<>" : "=";
                    filter += $" ({term.field} {not} {value}) ";
                }
                break;
            }

            return(filter);
        }
示例#2
0
        private string GetDecimalNumberFilterAsString(APISearchTerm term)
        {
            string filter = "";
            string not    = "";

            switch (term.op)
            {
            case APISearch.SearchComparer.between:
                if (term.values.Count == 2)
                {
                    not     = term.not ? "not" : "";
                    filter += $" ({term.field} {not} between {term.values[0]} and  {term.values[1]} ) ";
                }
                break;

            case APISearch.SearchComparer.eq:
                not     = term.not ? "<>" : "=";
                filter += $" ({term.field} {not} {term.values[0]}) ";
                break;

            case APISearch.SearchComparer.gt:
                not     = term.not ? "<=" : ">";
                filter += $" ({term.field} {not} {term.values[0]}) ";
                break;

            case APISearch.SearchComparer.gte:
                not     = term.not ? "<" : ">=";
                filter += $" ({term.field} {not} {term.values[0]}) ";
                break;


            case APISearch.SearchComparer.lt:
                not     = term.not ? ">=" : "<";
                filter += $" ({term.field} {not} {term.values[0]}) ";
                break;

            case APISearch.SearchComparer.lte:
                not     = term.not ? ">" : "<=";
                filter += $" ({term.field} {not} {term.values[0]}) ";
                break;
            }

            return(filter);
        }
示例#3
0
        private string GetFilterAsString(APISearchTerm term, int offset, bool datetimeasdate)
        {
            string filter = "";

            switch (term.type)
            {
            case DataType.date:
                filter = GetDateFilterAsString(term, offset);
                break;

            case DataType.datetime:
                filter = GetDatetimeFilterAsString(term, offset, datetimeasdate);
                break;


            case DataType.time:
                filter = GetTimeFilterAsString(term);
                break;

            case DataType.decimal_number:
                filter = GetDecimalNumberFilterAsString(term);
                break;

            case DataType.integer_number:
                filter = GetIntegerNumberFilterAsString(term);
                break;

            case DataType.boolean:
                filter = GetBooleanFilterAsString(term);
                break;

            case DataType.text:
                filter = GetTextFilterAsString(term);
                break;
            }
            return(filter);
        }
示例#4
0
        private string GetDateFilterAsString(APISearchTerm term, int offset)
        {
            string   filter = "";
            string   not    = "";
            DateTime d1     = DateTime.UtcNow;
            DateTime d2     = DateTime.UtcNow;

            if (term.values.Count == 2)
            {
                d1 = DateTime.Parse(term.values[0], null, System.Globalization.DateTimeStyles.RoundtripKind);
                d2 = DateTime.Parse(term.values[1], null, System.Globalization.DateTimeStyles.RoundtripKind);
            }
            else
            {
                d1 = DateTime.Parse(term.values[0], null, System.Globalization.DateTimeStyles.RoundtripKind);
            }


            DateTimeOffset do1 = new DateTimeOffset(d1, new TimeSpan(offset, 0, 0));
            DateTimeOffset do2 = new DateTimeOffset(d2, new TimeSpan(offset, 0, 0));


            switch (term.op)
            {
            case APISearch.SearchComparer.between:
                if (term.values.Count == 2)
                {
                    not     = term.not ? "not" : "";
                    filter += $" ({term.field} {not} between '{do1.ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss")}' and  '{do2.ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss")}' ) ";
                }
                break;

            case APISearch.SearchComparer.eq:

                not     = term.not ? "<>" : "=";
                filter += $" ({term.field} {not} '{do1.ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss")}') ";

                break;

            case APISearch.SearchComparer.gt:

                not     = term.not ? "<=" : ">";
                filter += $" ({term.field} {not} '{do1.ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss")}') ";

                break;

            case APISearch.SearchComparer.gte:

                not     = term.not ? "<" : ">=";
                filter += $" ({term.field} {not} '{do1.ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss")}') ";

                break;



            case APISearch.SearchComparer.lt:

                not     = term.not ? ">=" : "<";
                filter += $" ({term.field} {not} '{do1.ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss")}') ";

                break;

            case APISearch.SearchComparer.lte:
                not     = term.not ? ">" : "<=";
                filter += $" ({term.field} {not} '{do1.ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss")}') ";

                break;
            }

            return(filter);
        }
示例#5
0
        private string GetTimeFilterAsString(APISearchTerm term)
        {
            string   filter = "";
            string   not    = "";
            DateTime d1     = DateTime.UtcNow;
            DateTime d2     = DateTime.UtcNow;

            if (term.values.Count == 2)
            {
                d1 = DateTime.Parse(term.values[0], null, System.Globalization.DateTimeStyles.RoundtripKind);
                d2 = DateTime.Parse(term.values[1], null, System.Globalization.DateTimeStyles.RoundtripKind);
                d1 = new DateTime(2001, 1, 1, d1.Hour, d1.Minute, d1.Second);
                d2 = new DateTime(2001, 1, 1, d1.Hour, d1.Minute, d1.Second);
            }
            else
            {
                d1 = DateTime.Parse(term.values[0], null, System.Globalization.DateTimeStyles.RoundtripKind);
                d1 = new DateTime(2001, 1, 1, d1.Hour, d1.Minute, d1.Second);
            }

            switch (term.op)
            {
            case APISearch.SearchComparer.between:
                if (term.values.Count == 2)
                {
                    not     = term.not ? "not" : "";
                    filter += $" ({term.field} {not} between '{d1.ToString("yyyy/MM/dd HH:mm:ss")}' and  '{d2.ToString("yyyy/MM/dd HH:mm:ss")}' ) ";
                }
                break;

            case APISearch.SearchComparer.eq:

                not     = term.not ? "<>" : "=";
                filter += $" ({term.field} {not} '{d1.ToString("yyyy/MM/dd HH:mm:ss")}') ";

                break;

            case APISearch.SearchComparer.gt:

                not     = term.not ? "<=" : ">";
                filter += $" ({term.field} {not} '{d1.ToString("yyyy/MM/dd HH:mm:ss")}') ";

                break;

            case APISearch.SearchComparer.gte:

                not     = term.not ? "<" : ">=";
                filter += $" ({term.field} {not} '{d1.ToString("yyyy/MM/dd HH:mm:ss")}') ";

                break;



            case APISearch.SearchComparer.lt:

                not     = term.not ? ">=" : "<";
                filter += $" ({term.field} {not} '{d1.ToString("yyyy/MM/dd HH:mm:ss")}') ";

                break;

            case APISearch.SearchComparer.lte:
                not     = term.not ? ">" : "<=";
                filter += $" ({term.field} {not} '{d1.ToString("yyyy/MM/dd HH:mm:ss")}') ";

                break;
            }

            return(filter);
        }
示例#6
0
        private string GetTextFilterAsString(APISearchTerm term)
        {
            string filter = "";
            string not    = "";

            switch (term.op)
            {
            case APISearch.SearchComparer.contains:
                foreach (string v in term.values)
                {
                    if (filter != "")
                    {
                        filter += " OR ";
                    }

                    not     = term.not ? "not" : "";
                    filter += $" ({term.field} {not} like '%{v}%') ";
                }
                break;

            case APISearch.SearchComparer.ends:
                foreach (string v in term.values)
                {
                    if (filter != "")
                    {
                        filter += " OR ";
                    }

                    not     = term.not ? "not" : "";
                    filter += $" ({term.field} {not} like '%{v}') ";
                }
                break;

            case APISearch.SearchComparer.eq:
                foreach (string v in term.values)
                {
                    if (filter != "")
                    {
                        filter += " OR ";
                    }
                    not     = term.not ? "<>" : "=";
                    filter += $" ({term.field} {not} '{v}') ";
                }
                break;

            case APISearch.SearchComparer.@in:
                string inf = "";
                foreach (string v in term.values)
                {
                    inf += $"'{inf}',";
                }
                inf     = inf.TrimEnd(',');
                not     = term.not ? "not" : "=";
                filter += $" ({term.field} {not} in '{inf}') ";
                break;

            case APISearch.SearchComparer.starts:
                foreach (string v in term.values)
                {
                    if (filter != "")
                    {
                        filter += " OR ";
                    }
                    not     = term.not ? "not" : "=";
                    filter += $" ({term.field} {not} like '{v}%') ";
                }
                break;
            }

            return(filter);
        }
        public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
        {
            List <string> ConditionFields = new List <string>()
            {
                "n", "o", "v", "t"
            };
            APISearch search = new APISearch();

            bindingContext.Model = search;

            string        ct         = actionContext.Request.Content.ReadAsStringAsync().Result;
            List <string> parameters = actionContext.Request.RequestUri.Query.TrimStart('?').Split('&').ToList();

            foreach (string p in parameters)
            {
                List <string> par = p.Split('=').ToList();
                switch (par[0].ToLower())
                {
                case "p":
                    search.page = int.Parse(par[1]);
                    break;

                case "g":
                    search.gmt = par[1];
                    break;

                case "l":
                    search.lang = par[1];
                    break;

                case "ps":
                    search.pagesize = int.Parse(par[1]);
                    break;

                case "s":
                    search.sortby = par[1];
                    break;

                case "d":
                    search.sortdirection = par[1];
                    break;

                case "dd":
                    search.datetimeasdate = (par[1].ToLower() == "true") ? true : false;
                    break;

                case "gd":
                    search.ShowDeleted = (par[1].ToLower() == "true") ? true : false;
                    break;

                default:
                    if (par[0].StartsWith("f"))
                    {
                        string        idx      = par[0].Replace("f", "");
                        bool          complete = true;
                        APISearchTerm term     = new APISearchTerm();
                        term.field = par[1];

                        foreach (string c in ConditionFields)
                        {
                            string param = parameters.Where(x => x.StartsWith(c + idx)).Take(1).SingleOrDefault();
                            if (param != null)
                            {
                                List <string> condpar = param.Split('=').ToList();

                                switch (c)
                                {
                                case "n":
                                    term.not = condpar[1].ToLower() == "true" ? true: false;
                                    break;

                                case "o":
                                    term.op = (APISearch.SearchComparer) int.Parse(condpar[1]);
                                    break;

                                case "v":
                                    term.values = condpar[1].Split(',').ToList();
                                    break;


                                case "t":
                                    term.type = (Domain.Shared.DataType) int.Parse(condpar[1]);
                                    break;
                                }
                            }
                            else
                            {
                                complete = false;
                                break;
                            }
                        }

                        if (complete)
                        {
                            search.filters.Add(term);
                        }
                    }

                    break;
                }
            }

            return(true);
        }