Пример #1
0
        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");
            });
        }
Пример #2
0
        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));
            };
        }