private IQueryCollection AppendPriceQueryIfNeeded(IQueryCollection query) { var key = "price-range"; if (query[key].Count == 1) { var value = query[key][0].Replace(" ", ""); if (value.Contains("-")) { var values = value.Split("-"); if (values.Count() != 2) { return(query); } var minPrice = new KeyValuePair <String, StringValues>("minprice", values[0].ToString()); var maxPrice = new KeyValuePair <String, StringValues>("maxprice", values[1].ToString()); query = query.AppendQueryItem(minPrice); query = query.AppendQueryItem(maxPrice); } else if (value.Contains("<")) { var maxValue = value.Replace("<", ""); var maxPrice = new KeyValuePair <String, StringValues>("maxprice", maxValue); query = query.AppendQueryItem(maxPrice); } else if (value.Contains(">")) { var minValue = value.Replace(">", ""); var minPrice = new KeyValuePair <String, StringValues>("minprice", minValue); query = query.AppendQueryItem(minPrice); } } return(query); }
/* * Summary: * - Modify query from the request. * - If derived class override the method for further modifying, it should call base method. */ protected virtual Task <IQueryCollection> TransformQuery(IQueryCollection query, RequestContext requestContext) { // Dictionary<string, StringValues> dict = query.ToDictionary(c => c.Key, c => c); switch (requestContext.APIRoute) { case APIRoute.AdminGetAll: case APIRoute.ClientGetAll: // Detect if need include items with delete flag var includeDeletedKey = "includeDeleted"; var defaultDeleteFlag = "false"; if (query.ContainsKey(includeDeletedKey)) { if (query[includeDeletedKey].Count != 1) { throw new InvalidQueryParamsException(); } if (query[includeDeletedKey][0] == "true") { defaultDeleteFlag = "true"; } } var queryItem = new KeyValuePair <string, StringValues>("DeleteFlag", defaultDeleteFlag); query = query.AppendQueryItem(queryItem); break; default: break; } return(Task.FromResult(query)); }
public static IQueryCollection AppendQueryItem( this IQueryCollection queryCollection, string key, StringValues values) { var queryItem = new KeyValuePair <string, StringValues>(key, values); return(queryCollection.AppendQueryItem(queryItem)); }
private async Task <IQueryCollection> AppendNewQueryIfNeeded(IQueryCollection query) { var isNewKey = "new"; if (query[isNewKey].Count == 1) { var queryParam = query[isNewKey]; var queryItem = new KeyValuePair <String, StringValues>("isNew", queryParam[0]); query = query.AppendQueryItem(queryItem); } return(await Task.FromResult(query)); }
public IQueryCollection AppendQueryByMappKeysIfNeeded(IQueryCollection query) { var plainMaps = new Dictionary <String, String>() { { "new", "isNew" }, { "sale", "isOnSale" }, }; foreach (var kv in plainMaps) { if (query[kv.Key].Count == 1) { var queryParam = query[kv.Key]; var queryItem = new KeyValuePair <String, StringValues>(kv.Value, queryParam[0]); query = query.AppendQueryItem(queryItem); } } return(query); }
private IQueryCollection AppendQueryByNameIfNeeded(IQueryCollection query) { var queryKeyInfos = new List <(string queryKey, string internalKey, Type type)>() { (queryKey : "brand", internalKey : "brandId", type : typeof(ShoesBrand)), (queryKey : "size", internalKey : "sizeId", type : typeof(Size)), (queryKey : "style", internalKey : "styleId", type : typeof(ShoesType)), (queryKey : "gender", internalKey : "genderId", type : typeof(Gender)) }; foreach (var info in queryKeyInfos) { if (query[info.queryKey].Count == 1) { var paramValue = query[info.queryKey][0]; // var entity = await _context.Genders.FirstOrDefaultAsync(g => g.Name.ToLower() == paramValue.ToString().ToLower()); // var type = typeof(Gender); //dynamic entity = _context.Query(info.type).Where("o => o.Name == @0", paramValue); dynamic entity = _context.Query(info.type).FirstOrDefault("c => c.Name == @0", paramValue); var id = 0; if (entity != null) { id = entity.Id; } else if (info.queryKey == "gender") { if (paramValue.ToLower() == "nam") { id = 6; } else { id = 7; } } var queryItem = new KeyValuePair <String, StringValues>(info.internalKey, id.ToString()); query = query.AppendQueryItem(queryItem); } } return(query); }