public ApiModule() { OnError += (ctx, exp) => { var modelBindingException = exp as ModelBindingException; if (modelBindingException != null) { var errorModel = new { ErrorMessage = modelBindingException.Message, PropertyBindingErrors = modelBindingException.PropertyBindingExceptions?.Select(x => new { ErrorMessage = x.Message, InnerException = x.InnerException?.Message }).ToArray() }; return(Response.AsJson(errorModel, HttpStatusCode.BadRequest)); } return(null); }; Get["/api/v1/rarities"] = x => { sql.Open(WebSettings.Settings.CreateDescription()); ApiDataService dataService = new ApiDataService(sql); var model = dataService.GetRarities(); return(Response.AsJson(model)); }; Get["/api/v1/factions"] = x => { sql.Open(WebSettings.Settings.CreateDescription()); ApiDataService dataService = new ApiDataService(sql); var model = dataService.GetFactions(); return(Response.AsJson(model)); }; Get["/api/v1/types"] = x => { sql.Open(WebSettings.Settings.CreateDescription()); ApiDataService dataService = new ApiDataService(sql); var model = dataService.GetItemTypes(); return(Response.AsJson(model)); }; Get["/api/v1/categories"] = x => { sql.Open(WebSettings.Settings.CreateDescription()); ApiDataService dataService = new ApiDataService(sql); var model = dataService.GetCategories(); return(Response.AsJson(model)); }; Get["/api/v1/items"] = x => { return(RouteSearch(null, 0, null, null, null, null, null, 0)); }; Get["/api/v1/items"] = x => { string rarity = (string)Request.Query.Rarity; string category = (string)Request.Query.Category; string faction = (string)Request.Query.Faction; string showRemovedItems = (string)Request.Query.RemovedItems; string showMetaItems = (string)Request.Query.MetaItems; var query = (string)Request.Query.Query; int id = (int)Request.Query.Id; return(RouteSearch(query, 0, rarity, category, faction, showRemovedItems, showMetaItems, id)); }; Get["/api/v1/item/{item:int}"] = x => { string rarity = (string)Request.Query.Rarity; string category = (string)Request.Query.Category; string faction = (string)Request.Query.Faction; string showRemovedItems = (string)Request.Query.RemovedItems; string showMetaItems = (string)Request.Query.MetaItems; var query = (string)Request.Query.Query; int id = (int)x.item; return(RouteSearch(query, 0, rarity, category, faction, showRemovedItems, showMetaItems, id)); }; Get["/api/v1/recipe/{item:int}"] = x => { var id = (int)x.item; sql.Open(WebSettings.Settings.CreateDescription()); DataService db = new DataService(sql); var itemModel = db.SelectItem(id, true); var recipeModel = db.SelectRecipeModel(itemModel.Item, false); return(Response.AsJson(recipeModel)); }; Get["/api/v1/recipe-deep/{item:int}"] = x => { var id = (int)x.item; sql.Open(WebSettings.Settings.CreateDescription()); DataService db = new DataService(sql); var itemModel = db.SelectItem(id, true); var recipeModel = db.SelectRecipeModel(itemModel.Item, true); itemModel.Recipe = recipeModel; return(Response.AsJson(itemModel)); }; Get["/api/v1/market/{name}/{id:int}"] = x => { sql.Open(WebSettings.Settings.CreateDescription()); string name = x.name; HashSet <string> validMarkets = new HashSet <string>() { "sellprice", "buyprice", "selloffers", "buyorders" }; bool unixTimeStamp = (bool)Request.Query.unixTimestamp; string timestampColumn = "market.datetime"; if (validMarkets.Contains(name)) { if (unixTimeStamp) { timestampColumn = "UNIX_TIMESTAMP(market.datetime)"; } string query = $"(SELECT {timestampColumn},market.{name} FROM market where market.itemnumber = @id ORDER BY market.Datetime desc LIMIT 40000);"; var parmeter = new List <Parameter> { new Parameter { Identifier = "@id", Value = x.id }, }; var ds = sql.SelectDataSet(query, parmeter); return(Response.AsJson(ds)); } else { return(Response.AsJson("Market not found", HttpStatusCode.NotFound)); } }; Get["/api/v1/market-all/{id:int}"] = x => { sql.Open(WebSettings.Settings.CreateDescription()); var request = this.Bind <MarketAllRequest>(); var startTimestamp = request.StartTimestamp; var endTimestamp = request.EndTimestamp; if (startTimestamp.HasValue && startTimestamp < 0) { return(Response.AsJson(new { ErrorMessage = "Parameter startTimestamp should be positive integer less than or equal to " + int.MaxValue }, HttpStatusCode.BadRequest)); } if (endTimestamp.HasValue && endTimestamp < 0) { return(Response.AsJson(new { ErrorMessage = "Parameter endTimestamp should be positive integer less than or equal to " + int.MaxValue }, HttpStatusCode.BadRequest)); } var whereClause = "where market.itemnumber = @id"; if (startTimestamp.HasValue && endTimestamp.HasValue) { whereClause += " AND market.datetime BETWEEN FROM_UNIXTIME(@startTimestamp) AND FROM_UNIXTIME(@endTimestamp)"; } else { if (startTimestamp.HasValue) { whereClause += " AND market.datetime >= FROM_UNIXTIME(@startTimestamp)"; } if (endTimestamp.HasValue) { whereClause += " AND market.datetime <= FROM_UNIXTIME(@endTimestamp)"; } } string query = "(" + "SELECT market.id,market.sellprice,market.buyprice,market.selloffers,market.buyorders,market.datetime,UNIX_TIMESTAMP(market.datetime) as unixdatetime " + "FROM market " + $"{whereClause} " + "ORDER BY market.Datetime desc LIMIT 40000" + ") ORDER BY id ASC;"; var p = new Parameter { Identifier = "@id", Value = request.Id }; var parmeter = new List <Parameter>(); parmeter.Add(p); if (startTimestamp.HasValue) { parmeter.Add(new Parameter("startTimestamp", startTimestamp.Value)); } if (endTimestamp.HasValue) { parmeter.Add(new Parameter("endTimestamp", endTimestamp.Value)); } var ds = sql.SelectDataSet(query, parmeter); return(Response.AsJson(ds)); }; After.AddItemToEndOfPipeline((ctx) => { ctx.Response.WithHeader("Access-Control-Allow-Origin", "*") .WithHeader("Access-Control-Allow-Methods", "POST,GET") .WithHeader("Access-Control-Allow-Headers", "Accept, Origin, Content-type"); }); }
public ApiModule() { Get["/api/v1/rarities"] = x => { sql.Open(WebSettings.Settings.CreateDescription()); ApiDataService dataService = new ApiDataService(sql); var model = dataService.GetRarities(); return(Response.AsJson(model)); }; Get["/api/v1/factions"] = x => { sql.Open(WebSettings.Settings.CreateDescription()); ApiDataService dataService = new ApiDataService(sql); var model = dataService.GetFactions(); return(Response.AsJson(model)); }; Get["/api/v1/types"] = x => { sql.Open(WebSettings.Settings.CreateDescription()); ApiDataService dataService = new ApiDataService(sql); var model = dataService.GetItemTypes(); return(Response.AsJson(model)); }; Get["/api/v1/categories"] = x => { sql.Open(WebSettings.Settings.CreateDescription()); ApiDataService dataService = new ApiDataService(sql); var model = dataService.GetCategories(); return(Response.AsJson(model)); }; Get["/api/v1/items"] = x => { return(RouteSearch(null, 0, null, null, null, null, null, 0)); }; Get["/api/v1/items"] = x => { string rarity = (string)Request.Query.Rarity; string category = (string)Request.Query.Category; string faction = (string)Request.Query.Faction; string showRemovedItems = (string)Request.Query.RemovedItems; string showMetaItems = (string)Request.Query.MetaItems; var query = (string)Request.Query.Query; int id = (int)Request.Query.Id; return(RouteSearch(query, 0, rarity, category, faction, showRemovedItems, showMetaItems, id)); }; Get["/api/v1/item/{item:int}"] = x => { string rarity = (string)Request.Query.Rarity; string category = (string)Request.Query.Category; string faction = (string)Request.Query.Faction; string showRemovedItems = (string)Request.Query.RemovedItems; string showMetaItems = (string)Request.Query.MetaItems; var query = (string)Request.Query.Query; int id = (int)x.item; return(RouteSearch(query, 0, rarity, category, faction, showRemovedItems, showMetaItems, id)); }; Get["/api/v1/recipe/{item:int}"] = x => { var id = (int)x.item; sql.Open(WebSettings.Settings.CreateDescription()); DataService db = new DataService(sql); var itemModel = db.SelectItem(id, true); var recipeModel = db.SelectRecipeModel(itemModel.Item, false); return(Response.AsJson(recipeModel)); }; Get["/api/v1/recipe-deep/{item:int}"] = x => { var id = (int)x.item; sql.Open(WebSettings.Settings.CreateDescription()); DataService db = new DataService(sql); var itemModel = db.SelectItem(id, true); var recipeModel = db.SelectRecipeModel(itemModel.Item, true); itemModel.Recipe = recipeModel; return(Response.AsJson(itemModel)); }; Get["/api/v1/market/{name}/{id:int}"] = x => { sql.Open(WebSettings.Settings.CreateDescription()); string name = x.name; HashSet <string> validMarkets = new HashSet <string>() { "sellprice", "buyprice", "selloffers", "buyorders" }; bool unixTimeStamp = (bool)Request.Query.unixTimestamp; string timestampColumn = "market.datetime"; if (validMarkets.Contains(name)) { if (unixTimeStamp) { timestampColumn = "UNIX_TIMESTAMP(market.datetime)"; } string query = $"(SELECT {timestampColumn},market.{name} FROM market where market.itemnumber = @id ORDER BY market.Datetime desc LIMIT 40000);"; var parmeter = new List <Parameter> { new Parameter { Identifier = "@id", Value = x.id }, }; var ds = sql.SelectDataSet(query, parmeter); return(Response.AsJson(ds)); } else { return(Response.AsJson("Market not found", HttpStatusCode.NotFound)); } }; Get["/api/v1/market-all/{id:int}"] = x => { sql.Open(WebSettings.Settings.CreateDescription()); string query = "(SELECT market.id,market.sellprice,market.buyprice,market.selloffers,market.buyorders,market.datetime,UNIX_TIMESTAMP(market.datetime) as unixdatetime FROM market where market.itemnumber = @id ORDER BY market.Datetime desc LIMIT 40000) ORDER BY id ASC;"; var p = new Parameter { Identifier = "@id", Value = x.id }; var parmeter = new List <Parameter>(); parmeter.Add(p); var ds = sql.SelectDataSet(query, parmeter); return(Response.AsJson(ds)); }; }