Esempio n. 1
0
        public async Task <JsonResult> Get(string filters = "", string sorts = "", int page = 1, int pageSize = 100, string fields = "")
        {
            DotNetCoreSieveModel sieveModel = new DotNetCoreSieveModel
            {
                Filters = filters,
                Sorts   = sorts,
                Fields  = fields
            };

            var properties = (new Customer()).GetType().GetProperties();

            if (!sieveModel.AreFiltersValid())
            {
                throw new DotNetCoreRefDapperException();
            }

            string message = string.Empty;

            if (!sieveModel.AreFieldsValid(properties, out message))
            {
                throw new DotNetCoreRefDapperException();
            }

            var result = await _implementation.GetAsync(filters, sorts, page, pageSize, fields);

            foreach (var res in result.Entities)
            {
                res.SetSerializableProperties(fields);
            }

            return(new JsonResult(
                       result,
                       new Newtonsoft.Json.JsonSerializerSettings()
            {
                ContractResolver = new ShouldSerializeContractResolver()
            }));
        }
        public async Task <AgentResponse> GetAsync(string filters, string sorts, int page, int pageSize, string fields)
        {
            DotNetCoreSieveModel sieveModel = new DotNetCoreSieveModel
            {
                Filters = filters,
                Sorts   = sorts,
                Fields  = fields
            };

            List <string> filterStrings = new List <string>(), sortStrings = new List <string>();
            string        filtering = string.Empty, sorting = string.Empty;

            if (sieveModel.GetFiltersParsed() != null)
            {
                foreach (var filter in sieveModel.GetFiltersParsed())
                {
                    filterStrings.Add(string.Format("{0}{1}{2}{3}",
                                                    filter.Names[0],
                                                    filter.Operator == "==" ? "='" : filter.Operator,
                                                    filter.Value,
                                                    filter.Operator == "==" ? "'" : ""));
                }

                filtering = String.Join(" AND ", filterStrings.ToArray());
            }

            if (sieveModel.GetSortsParsed().Count > 0)
            {
                foreach (var sort in sieveModel.GetSortsParsed())
                {
                    sortStrings.Add(string.Format("{0} {1}",
                                                  sort.Name.Replace("-", ""),
                                                  sort.Descending ? "DESC" : "ASC"));
                }
            }
            else
            {
                sortStrings.Add("id ASC");
            }

            sorting = String.Join(", ", sortStrings.ToArray());

            using (IDbConnection conn = _connection)
            {
                DynamicParameters parameters = new DynamicParameters();
                parameters.Add("@filters", filtering);
                parameters.Add("@sorts", sorting);
                parameters.Add("@page", page);
                parameters.Add("@pageSize", pageSize);
                parameters.Add("@fields", fields);

                conn.Open();

                var reader = await conn.QueryMultipleAsync("AgentsGet", parameters, commandType : CommandType.StoredProcedure);

                int totalRows = (await reader.ReadAsync <int>()).FirstOrDefault();

                var result = (await reader.ReadAsync <Agent>()).ToList();

                var response = new AgentResponse()
                {
                    Page       = page,
                    PageSize   = pageSize,
                    TotalItems = totalRows,
                    Entities   = result
                };

                conn.Close();

                return(await Task.Run(() => response));
            }
        }