Пример #1
0
        public virtual async Task <ActionResult <IEnumerable <dynamic> > > GetAllAsync([FromQuery] string fields, [FromQuery] string asc, [FromQuery] string desc, [FromQuery] string type, [FromQuery] string rating, [FromQuery] string date, [FromQuery] string range)
        {
            var query = _context.Set <TModel>().AsQueryable();

            if (!string.IsNullOrWhiteSpace(asc) || !string.IsNullOrWhiteSpace(desc))
            {
                query = query.OrderByAscOrDesc(asc, desc);
            }
            if (!string.IsNullOrWhiteSpace(type) || !string.IsNullOrWhiteSpace(rating) || !string.IsNullOrWhiteSpace(date))
            {
                string[] fieldNames = { "Type", "Rating", "Date" };
                query = query.FilterCustomized(fieldNames, type, rating, date);
            }
            if (!string.IsNullOrWhiteSpace(range))
            {
                var tab   = range.Split('-');
                var start = int.Parse(tab[0]);
                var end   = int.Parse(tab[1]);
                //query = query.RangePagination(tab[0], tab[1]);
                query = query.Where(x => x.ID >= start && x.ID <= end);
            }
            if (!string.IsNullOrWhiteSpace(fields))
            {
                var tab = fields.Split(',');
                // var results = await IQueryableExtensions.SelectDynamic<TModel>(query, tab).ToListAsync();
                var results = await query.SelectDynamic(tab).ToListAsync();

                return(results.Select((x) => IQueryableExtensions.SelectObject(x, tab)).ToList());
            }
            else
            {
                return(Ok(ToJsonList(await query.ToListAsync())));
            }
        }
Пример #2
0
        public virtual async Task <ActionResult <IEnumerable <dynamic> > > Sort([FromQuery] string fields, [FromQuery] string asc, [FromQuery] string desc)
        {
            var query = _context.Set <T>().AsQueryable();

            if (!string.IsNullOrWhiteSpace(asc))
            {
                var tab2 = asc.Split(',');
                //on verifie si on a deux éléments dans le tableau pour savoir si on va faire le thenBy()

                if (tab2.Length == 1)
                {
                    query = IQueryableExtensions.SelectColonnesAscOne(query, tab2[0]);
                }
                else
                {
                    query = IQueryableExtensions.SelectColonnesAsc(query, tab2);
                }
            }


            if (!string.IsNullOrWhiteSpace(desc))
            {
                var tab3 = desc.Split(',');
                //on verifie si on a deux éléments dans le tableau pour savoir si on va faire le thenBy()

                if (tab3.Length == 1)
                {
                    query = IQueryableExtensions.SelectColonnesDescOne(query, tab3[0]);
                }
                else
                {
                    query = IQueryableExtensions.SelectColonnesDesc(query, tab3);
                }
            }



            if (!string.IsNullOrWhiteSpace(fields))
            {
                var tab1 = fields.Split(',');

                // var results = await IQueryableExtensions.SelectDynamic<TModel>(query, tab).ToListAsync();
                var results = await query.SelectModel(tab1).ToListAsync();

                return(results.Select((x) => IQueryableExtensions.SelectObject(x, tab1)).ToList());

                // toujours penser a faire le select a la fin
                return(await query.ToListAsync());
            }
            else
            {
                return(Ok(ToJsonList(await query.ToListAsync())));
            }
        }
Пример #3
0
        public virtual async Task <ActionResult <IEnumerable <dynamic> > > GetAllAsync([FromQuery] string fields)
        {
            var query = _context.Set <TModel>().AsQueryable();

            if (!string.IsNullOrWhiteSpace(fields))
            {
                var tab = fields.Split(',');

                // var results = await IQueryableExtensions.SelectDynamic<TModel>(query, tab).ToListAsync();
                var results = await query.SelectDynamic(tab).ToListAsync();

                return(results.Select((x) => IQueryableExtensions.SelectObject(x, tab)).ToList());
            }
            else
            {
                return(Ok(ToJsonList(await query.ToListAsync())));
            }
        }
Пример #4
0
        public virtual async Task <ActionResult <IEnumerable <dynamic> > > SearchAsync([FromQuery] string fields, [FromQuery] string range, [FromQuery] string asc, [FromQuery] string desc)
        {
            IQueryCollection requestQuery = Request.Query;

            var query = _context.Set <TModel>().AsQueryable();

            // TRIS
            if (!string.IsNullOrWhiteSpace(asc) || !string.IsNullOrWhiteSpace(desc))
            {
                query = query.OrderByDynamic(asc, desc);
            }

            // FILTRES
            if (requestQuery != null && requestQuery.Count() > 0)
            {
                query = query.WhereDynamic(requestQuery, true);
            }

            // PAGINATION
            if (!string.IsNullOrWhiteSpace(range))
            {
                var tab = range.Split('-');
                query = query.TakePageResult(Int32.Parse(tab[0]), Int32.Parse(tab[1]));
            }

            // RENDU PARTIEL
            if (!string.IsNullOrWhiteSpace(fields))
            {
                var tab = fields.Split(',');
                query = query.SelectModel(tab);
                var results = await query.ToListAsync();

                return(Ok(results.Select((x) => IQueryableExtensions.SelectObject(x, tab)).ToList()));
            }
            else
            {
                return(Ok(ToJsonList(await query.ToListAsync())));
            }
        }
Пример #5
0
        public virtual async Task <ActionResult <TModel> > GetById([FromRoute] int id, [FromQuery] string fields)
        {
            var query = _context.Set <TModel>().AsQueryable();

            //solution 2: optimisation de la requete SQL

            if (!string.IsNullOrWhiteSpace(fields))
            {
                var tab = new List <string>(fields.Split(','));
                if (!tab.Contains("id"))
                {
                    tab.Add("id");
                }
                var result = query.SelectModel(tab.ToArray()).SingleOrDefault(x => x.ID == id);
                if (result != null)
                {
                    var tabFields = fields.Split(',');
                    return(Ok(IQueryableExtensions.SelectObject(result, tabFields)));
                }
                else
                {
                    return(NotFound(new { Message = $"ID {id} not found" }));
                }
            }
            else
            {
                var result = query.SingleOrDefault(x => x.ID == id);
                if (result != null)
                {
                    return(Ok(ToJson(result)));
                }
                else
                {
                    return(NotFound(new { Message = $"ID {id} not found" }));
                }
            }
        }
Пример #6
0
        public virtual async Task <ActionResult <IEnumerable <dynamic> > > GetAllAsync([FromQuery] string fields, [FromQuery] string range, [FromQuery] string asc, [FromQuery] string desc)
        {
            IQueryCollection requestQuery = Request.Query;

            var query = _context.Set <TModel>().AsQueryable();

            // TRIS
            if (!string.IsNullOrWhiteSpace(asc) || !string.IsNullOrWhiteSpace(desc))
            {
                query = query.OrderByDynamic(asc, desc);
            }

            // FILTRES
            if (requestQuery != null && requestQuery.Count() > 0)
            {
                query = query.WhereDynamic(requestQuery);
            }

            // PAGINATION
            if (!string.IsNullOrWhiteSpace(range))
            {
                var tab = range.Split('-');

                int total = query.Count();

                query = query.TakePageResult(Int32.Parse(tab[0]), Int32.Parse(tab[1]));

                var linkBuilder = new PageLinkBuilder(Url, "", null, Int32.Parse(tab[0]), Int32.Parse(tab[1]), total);

                List <string> links = new List <string>();
                if (linkBuilder.FirstPage != null)
                {
                    links.Add(string.Format(LinkHeaderTemplate, linkBuilder.FirstPage, "first"));
                }
                if (linkBuilder.PreviousPage != null)
                {
                    links.Add(string.Format(LinkHeaderTemplate, linkBuilder.PreviousPage, "prev"));
                }
                if (linkBuilder.NextPage != null)
                {
                    links.Add(string.Format(LinkHeaderTemplate, linkBuilder.NextPage, "next"));
                }
                if (linkBuilder.LastPage != null)
                {
                    links.Add(string.Format(LinkHeaderTemplate, linkBuilder.LastPage, "last"));
                }
                Response.Headers.Add("Link", string.Join(", ", links));

                Response.Headers.Add("Content-Range", linkBuilder.GetContentRange());
                Response.Headers.Add("Accept-Ranges", typeof(TModel).Name + " " + total);
            }

            // RENDU PARTIEL
            if (!string.IsNullOrWhiteSpace(fields))
            {
                var tab = fields.Split(',');
                query = query.SelectModel(tab);
                var results = await query.ToListAsync();

                return(Ok(results.Select((x) => IQueryableExtensions.SelectObject(x, tab)).ToList()));
            }
            else
            {
                return(Ok(ToJsonList(await query.ToListAsync())));
            }
        }