Beispiel #1
0
        public void ShouldNotBeNullPagingOperatorInstance()
        {
            ODataUriParser parser = GetParser("/Enterprises");

            ISqlBinder binder = new SqlPagingBinder(parser.ParseTop(), parser.ParseSkip());

            binder.Query.Should().NotBeNull();
        }
Beispiel #2
0
        public void ShouldBePagingOperatorResolverInstance()
        {
            ODataUriParser parser = GetParser("/Enterprises?$top=1&$skip=2");

            ISqlBinder binder = new SqlPagingBinder(parser.ParseTop(), parser.ParseSkip());

            binder.Query.Should().BeOfType <PagingOperatorResolver>();
        }
Beispiel #3
0
        /// <summary>
        /// Esse Controller está implementando a lógica para converter parametros OData para parametros de StoredProcedure.
        /// Não dá pra usar [EnableQuery], senão os parametros da query serão aplicados na SP e posteriormente no retorno dela.
        /// </summary>
        /// <param name="queryOptions"></param>
        /// <returns></returns>
        // GET: odata/Enterprises
        public IQueryable <EnterprisesModel> GetEnterprises(ODataQueryOptions queryOptions)
        {
            //TODO: O código abaixo deve ser posteriormente movido para um Filter do Controller,
            // por ser genérico irá se repetir em cada GET do Controller.
            Uri            fullUri = new Uri(ControllerContext.Request.RequestUri.PathAndQuery.Replace("odata/", ""), UriKind.Relative);
            ODataUriParser parser  = new ODataUriParser(_model, fullUri);                //Poderia ser via ODataQueryOptionParser, mas achei mais complicado

            FilterClause  filterClause  = parser.ParseFilter();                          // parse $filter
            OrderByClause orderByClause = parser.ParseOrderBy();                         // parse $orderby
            long?         topClause     = parser.ParseTop();                             // parse $top
            long?         skipClause    = parser.ParseSkip();                            // parse $skip
            bool          count         = parser.ParseCount() ?? false;                  // parse $count

            SqlFilterBinder  filterBinder  = new SqlFilterBinder(filterClause);          //Binder para resolver o filtro; TODO: Melhorar para componente e UNIT TESTE
            SqlOrderByBinder orderByBinder = new SqlOrderByBinder(orderByClause);        //Binder para resolver o ordenação; TODO: Melhorar para componente e UNIT TESTE
            SqlPagingBinder  pagingBinder  = new SqlPagingBinder(topClause, skipClause); //Binder para resolver o paginação; TODO: Melhorar para componente e UNIT TESTE

            //Agora é só aplicar os parametros encontrados na Stored Procedure
            return(db.ProcPgdEnterprisesRetrieveAllMonitoredFromUserPartner(7, filterBinder.Resolve(), orderByBinder.Resolve(), pagingBinder.Resolve(), count).AsQueryable());
        }