From a628f581303fc556ad2bae23dbe22e86bcdd2e6b Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Sun, 19 Jun 2016 01:06:27 +0000 Subject: [PATCH] add leagues endpoint --- routes/api.js | 11 +++++++++++ sql/create_tables.sql | 4 ++-- store/queries.js | 8 +++++--- svc/worker.js | 33 ++++++++++++++++++++------------- 4 files changed, 38 insertions(+), 18 deletions(-) diff --git a/routes/api.js b/routes/api.js index 475d2eb85..d13e75341 100644 --- a/routes/api.js +++ b/routes/api.js @@ -145,6 +145,17 @@ module.exports = function(db, redis, cassandra) res.json(result.rows); }); }); + api.get('/leagues', function(req, res, cb) + { + db.raw(`SELECT * FROM leagues ORDER BY leagueid`).asCallback(function(err, result) + { + if (err) + { + return cb(err); + } + res.json(result.rows); + }); + }); api.get('/distributions', function(req, res, cb) { queries.getDistributions(redis, function(err, result) diff --git a/sql/create_tables.sql b/sql/create_tables.sql index 8d1564d77..7eaa7571a 100644 --- a/sql/create_tables.sql +++ b/sql/create_tables.sql @@ -227,8 +227,8 @@ CREATE TABLE picks_bans( is_pick boolean, hero_id int, team smallint, - order smallint, - PRIMARY KEY (match_id, order) + ord smallint, + PRIMARY KEY (match_id, ord) ); CREATE TABLE leagues( diff --git a/store/queries.js b/store/queries.js index f082aac51..50544476f 100644 --- a/store/queries.js +++ b/store/queries.js @@ -209,9 +209,11 @@ function insertMatch(db, redis, match, options, cb) function isProMatch(cb) { - //TODO check redis/postgres for professional/premium league - match.isProMatch = match.leagueid >= 0; - cb(); + redis.sismember('pro_leagueids', match.league_id, function(err, result) + { + match.isProMatch = Boolean(Number(result)); + cb(err); + }); } function upsertMatch(cb) diff --git a/svc/worker.js b/svc/worker.js index ee1cd62f4..4e3df510e 100644 --- a/svc/worker.js +++ b/svc/worker.js @@ -126,31 +126,38 @@ invokeInterval(function notablePlayers(cb) }, 10 * 60 * 1000); invokeInterval(function leagues(cb) { - utility.getData('https://raw.githubusercontent.com/dotabuff/d2vpkr/master/dota/scripts/items/leagues.json', function(err, leagues) + var container = utility.generateJob("api_leagues", + {}); + utility.getData(container.url, function(err, api_leagues) { if (err) { return cb(err); } - utility.getData('https://raw.githubusercontent.com/dotabuff/d2vpkr/master/dota/scripts/items/items_game.json', function(err, items) + utility.getData('https://raw.githubusercontent.com/dotabuff/d2vpkr/master/dota/scripts/items/leagues.json', function(err, leagues) { if (err) { return cb(err); } - var arr = []; - for (var key in leagues) + async.each(api_leagues.result.leagues, function(l, cb) { - arr.push( + if (leagues[l.leagueid]) { - leagueid: key, - ticket: leagues[key].ticket, - banner: leagues[key].banner, - tier: leagues[key].tier, - name: items.items_game.items[key].name - }); - } - db('leagues').insert(arr).asCallback(cb); + l.tier = leagues[l.leagueid].tier; + l.ticket = leagues[l.leagueid].ticket; + l.banner = leagues[l.leagueid].banner; + } + l.name = l.description.substring("#DOTA_Item_Desc_".length).split('_').join(' '); + if (l.tier === "professional" || l.tier === "premium") + { + redis.sadd('pro_leagueids', l.leagueid); + } + queries.upsert(db, 'leagues', l, + { + leagueid: l.league_id + }, cb); + }, cb); }); }); }, 10 * 60 * 1000);