@winible/winible-typed 1.0.9 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/migrations/20230206061925-stale.js +13 -0
- package/dist/migrations/20230206061925-stale.js.map +1 -0
- package/dist/migrations/20230313175014-league-user.js +27 -0
- package/dist/migrations/20230313175014-league-user.js.map +1 -0
- package/dist/migrations/20230313175015-league-user.js +29 -0
- package/dist/migrations/20230313175015-league-user.js.map +1 -0
- package/dist/scripts/bet-syncing/checkForPrizePicks.js +85 -0
- package/dist/scripts/bet-syncing/checkForPrizePicks.js.map +1 -0
- package/dist/scripts/bet-syncing/findGoodBets.js +238 -0
- package/dist/scripts/bet-syncing/findGoodBets.js.map +1 -0
- package/dist/scripts/bet-syncing/pullOdds.js +21 -8
- package/dist/scripts/bet-syncing/pullOdds.js.map +1 -1
- package/dist/scripts/bet-syncing/pullPlayerResults.js +47 -21
- package/dist/scripts/bet-syncing/pullPlayerResults.js.map +1 -1
- package/dist/scripts/bet-syncing/pullPlayers.js +1 -1
- package/dist/scripts/bet-syncing/pullPlayers.js.map +1 -1
- package/dist/scripts/bet-syncing/updateStaleOdds.js +34 -0
- package/dist/scripts/bet-syncing/updateStaleOdds.js.map +1 -0
- package/dist/typed-model/league-user.js +36 -0
- package/dist/typed-model/league-user.js.map +1 -0
- package/dist/typed-model/odds.js +5 -0
- package/dist/typed-model/odds.js.map +1 -1
- package/package.json +2 -2
- package/typed-model/league-user.ts +79 -0
- package/typed-model/odds.ts +6 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const sequelize_1 = require("sequelize");
|
4
|
+
exports.default = {
|
5
|
+
async up(queryInterface, sequelize) {
|
6
|
+
queryInterface.addColumn("odds", "stale", {
|
7
|
+
type: sequelize_1.DataTypes.BOOLEAN,
|
8
|
+
defaultValue: false,
|
9
|
+
});
|
10
|
+
},
|
11
|
+
async down(queryInterface, sequelize) { },
|
12
|
+
};
|
13
|
+
//# sourceMappingURL=20230206061925-stale.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"20230206061925-stale.js","sourceRoot":"","sources":["../../migrations/20230206061925-stale.ts"],"names":[],"mappings":";;AAAA,yCAAiE;AAEjE,kBAAe;IACb,KAAK,CAAC,EAAE,CAAC,cAA8B,EAAE,SAAoB;QAC3D,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE;YACxC,IAAI,EAAE,qBAAS,CAAC,OAAO;YACvB,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,cAA8B,EAAE,SAAoB,IAAG,CAAC;CACpE,CAAC"}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const sequelize_1 = require("sequelize");
|
4
|
+
exports.default = {
|
5
|
+
async up(queryInterface, sequelize) {
|
6
|
+
queryInterface.createTable("league_users", {
|
7
|
+
id: {
|
8
|
+
type: sequelize_1.DataTypes.BIGINT,
|
9
|
+
primaryKey: true,
|
10
|
+
allowNull: false,
|
11
|
+
defaultValue: (0, sequelize_1.fn)("next_id"),
|
12
|
+
},
|
13
|
+
leagueId: {
|
14
|
+
type: new sequelize_1.DataTypes.BIGINT(),
|
15
|
+
allowNull: false,
|
16
|
+
},
|
17
|
+
userId: {
|
18
|
+
type: new sequelize_1.DataTypes.BIGINT(),
|
19
|
+
allowNull: false,
|
20
|
+
},
|
21
|
+
createdAt: sequelize_1.DataTypes.DATE,
|
22
|
+
updatedAt: sequelize_1.DataTypes.DATE,
|
23
|
+
});
|
24
|
+
},
|
25
|
+
async down(queryInterface, sequelize) { },
|
26
|
+
};
|
27
|
+
//# sourceMappingURL=20230313175014-league-user.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"20230313175014-league-user.js","sourceRoot":"","sources":["../../migrations/20230313175014-league-user.ts"],"names":[],"mappings":";;AAAA,yCAAqE;AAErE,kBAAe;IACb,KAAK,CAAC,EAAE,CAAC,cAA8B,EAAE,SAAoB;QAC3D,cAAc,CAAC,WAAW,CAAC,cAAc,EAAE;YACzC,EAAE,EAAE;gBACF,IAAI,EAAE,qBAAS,CAAC,MAAM;gBACtB,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,IAAA,cAAE,EAAC,SAAS,CAAC;aAC5B;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,qBAAS,CAAC,MAAM,EAAE;gBAC5B,SAAS,EAAE,KAAK;aACjB;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,IAAI,qBAAS,CAAC,MAAM,EAAE;gBAC5B,SAAS,EAAE,KAAK;aACjB;YACD,SAAS,EAAE,qBAAS,CAAC,IAAI;YACzB,SAAS,EAAE,qBAAS,CAAC,IAAI;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,cAA8B,EAAE,SAAoB,IAAG,CAAC;CACpE,CAAC"}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const sequelize_1 = require("sequelize");
|
4
|
+
exports.default = {
|
5
|
+
async up(queryInterface, sequelize) {
|
6
|
+
queryInterface.createTable("league_users", {
|
7
|
+
id: {
|
8
|
+
type: sequelize_1.DataTypes.BIGINT,
|
9
|
+
primaryKey: true,
|
10
|
+
allowNull: false,
|
11
|
+
defaultValue: (0, sequelize_1.fn)("next_id"),
|
12
|
+
},
|
13
|
+
leagueId: {
|
14
|
+
type: new sequelize_1.DataTypes.BIGINT(),
|
15
|
+
field: "league_id",
|
16
|
+
allowNull: false,
|
17
|
+
},
|
18
|
+
userId: {
|
19
|
+
type: new sequelize_1.DataTypes.BIGINT(),
|
20
|
+
field: "user_id",
|
21
|
+
allowNull: false,
|
22
|
+
},
|
23
|
+
createdAt: sequelize_1.DataTypes.DATE,
|
24
|
+
updatedAt: sequelize_1.DataTypes.DATE,
|
25
|
+
});
|
26
|
+
},
|
27
|
+
async down(queryInterface, sequelize) { },
|
28
|
+
};
|
29
|
+
//# sourceMappingURL=20230313175015-league-user.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"20230313175015-league-user.js","sourceRoot":"","sources":["../../migrations/20230313175015-league-user.ts"],"names":[],"mappings":";;AAAA,yCAAqE;AAErE,kBAAe;IACb,KAAK,CAAC,EAAE,CAAC,cAA8B,EAAE,SAAoB;QAC3D,cAAc,CAAC,WAAW,CAAC,cAAc,EAAE;YACzC,EAAE,EAAE;gBACF,IAAI,EAAE,qBAAS,CAAC,MAAM;gBACtB,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,IAAA,cAAE,EAAC,SAAS,CAAC;aAC5B;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,qBAAS,CAAC,MAAM,EAAE;gBAC5B,KAAK,EAAE,WAAW;gBAClB,SAAS,EAAE,KAAK;aACjB;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,IAAI,qBAAS,CAAC,MAAM,EAAE;gBAC5B,KAAK,EAAE,SAAS;gBAChB,SAAS,EAAE,KAAK;aACjB;YACD,SAAS,EAAE,qBAAS,CAAC,IAAI;YACzB,SAAS,EAAE,qBAAS,CAAC,IAAI;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,cAA8B,EAAE,SAAoB,IAAG,CAAC;CACpE,CAAC"}
|
@@ -0,0 +1,85 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const dotenv = require("dotenv");
|
7
|
+
const oddsjam_js_wrapper_1 = __importDefault(require("@winible/oddsjam-js-wrapper"));
|
8
|
+
const sequelize = require("../../typed-model/pb-sequelize");
|
9
|
+
dotenv.config();
|
10
|
+
const OddsJamClient = (0, oddsjam_js_wrapper_1.default)(process.env.ODDS_JAM_API_KEY);
|
11
|
+
function timeout(ms) {
|
12
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
13
|
+
}
|
14
|
+
const run = async () => {
|
15
|
+
sequelize.default.query(`
|
16
|
+
WITH normalized_odds AS (SELECT
|
17
|
+
*,
|
18
|
+
CASE WHEN price > 0 THEN price - 100 WHEN price < 0 THEN price + 100 END as normalized_price
|
19
|
+
FROM odds
|
20
|
+
WHERE NOW() - odds."createdAt" <= interval '24 hours' and sports_book_name != 'PrizePicks'
|
21
|
+
)
|
22
|
+
SELECT
|
23
|
+
market_id,
|
24
|
+
game_id,
|
25
|
+
player_id,
|
26
|
+
team_id,
|
27
|
+
label,
|
28
|
+
bet_points,
|
29
|
+
sub.name,
|
30
|
+
sports_book_name,
|
31
|
+
rnum,
|
32
|
+
normalized_price,
|
33
|
+
max_price,
|
34
|
+
min_price,
|
35
|
+
avg_price,
|
36
|
+
total_books,
|
37
|
+
normalized_price - min_price as ev_diff,
|
38
|
+
normalized_price - avg_price as ev_avg_diff
|
39
|
+
FROM
|
40
|
+
(
|
41
|
+
select
|
42
|
+
market_id,
|
43
|
+
game_id,
|
44
|
+
player_id,
|
45
|
+
team_id,
|
46
|
+
markets.label,
|
47
|
+
sportsbooks.name as sports_book_name,
|
48
|
+
price,
|
49
|
+
odds_jam_id,
|
50
|
+
bet_points,
|
51
|
+
normalized_odds.name,
|
52
|
+
normalized_price,
|
53
|
+
best_price.max_price,
|
54
|
+
best_price.min_price,
|
55
|
+
best_price.avg_price,
|
56
|
+
total_books,
|
57
|
+
row_number() OVER (PARTITION BY market_id, game_id, player_id, team_id, markets.label, bet_points, normalized_odds.name ORDER BY price DESC) AS rnum
|
58
|
+
-- json_agg(json_build_object('sportsbook',sportsbook_id,'price',price, 'book_name', sportsbooks.name))
|
59
|
+
from normalized_odds
|
60
|
+
LEFT join
|
61
|
+
(
|
62
|
+
select
|
63
|
+
market_id,
|
64
|
+
game_id,
|
65
|
+
name,
|
66
|
+
max(normalized_price) as max_price,
|
67
|
+
min(normalized_price) as min_price,
|
68
|
+
avg(normalized_price) as avg_price,
|
69
|
+
count(*) as total_books
|
70
|
+
from normalized_odds group by 1, 2, 3)
|
71
|
+
best_price USING (market_id, game_id, name)
|
72
|
+
join sportsbooks on sportsbook_id = sportsbooks.id
|
73
|
+
join markets on markets.id = normalized_odds.market_id
|
74
|
+
--group by 1, 2, 3, 4, 5;
|
75
|
+
) sub where sports_book_name like 'PrizePicks%' and total_books > 3 order by ev_diff desc
|
76
|
+
`);
|
77
|
+
};
|
78
|
+
if (require.main === module) {
|
79
|
+
if (require.main === module) {
|
80
|
+
run().then(async () => {
|
81
|
+
console.log("Finished");
|
82
|
+
});
|
83
|
+
}
|
84
|
+
}
|
85
|
+
//# sourceMappingURL=checkForPrizePicks.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"checkForPrizePicks.js","sourceRoot":"","sources":["../../../scripts/bet-syncing/checkForPrizePicks.ts"],"names":[],"mappings":";;;;;AAAA,iCAAkC;AAClC,qFAAkD;AAOlD,4DAA6D;AAE7D,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,aAAa,GAAG,IAAA,4BAAO,EAAC,OAAO,CAAC,GAAG,CAAC,gBAAiB,CAAC,CAAC;AAE7D,SAAS,OAAO,CAAC,EAAE;IACjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;IACrB,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6DrB,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;QAC3B,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;KACJ;CACF"}
|
@@ -0,0 +1,238 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const dotenv = require("dotenv");
|
7
|
+
const oddsjam_js_wrapper_1 = __importDefault(require("@winible/oddsjam-js-wrapper"));
|
8
|
+
const typed_model_1 = require("../../typed-model");
|
9
|
+
const sequelize_1 = require("sequelize");
|
10
|
+
const axios_1 = __importDefault(require("axios"));
|
11
|
+
dotenv.config();
|
12
|
+
const OddsJamClient = (0, oddsjam_js_wrapper_1.default)(process.env.ODDS_JAM_API_KEY);
|
13
|
+
const postSlackNotification = async (webhook, body) => {
|
14
|
+
try {
|
15
|
+
await axios_1.default.post(webhook, body);
|
16
|
+
}
|
17
|
+
catch (err) {
|
18
|
+
console.log(err);
|
19
|
+
}
|
20
|
+
};
|
21
|
+
const oddToSlack = (type, odd) => {
|
22
|
+
return {
|
23
|
+
blocks: [
|
24
|
+
{
|
25
|
+
type: "header",
|
26
|
+
text: {
|
27
|
+
type: "plain_text",
|
28
|
+
text: `${type}: ${odd.market_name} - ${odd.name} - ${(odd.pos_ev * 100.0).toFixed(2)}`,
|
29
|
+
emoji: true,
|
30
|
+
},
|
31
|
+
},
|
32
|
+
{
|
33
|
+
type: "divider",
|
34
|
+
},
|
35
|
+
{
|
36
|
+
type: "section",
|
37
|
+
fields: [
|
38
|
+
{
|
39
|
+
text: `pos_ev: ${odd.pos_ev}`,
|
40
|
+
emoji: true,
|
41
|
+
type: "plain_text",
|
42
|
+
},
|
43
|
+
{
|
44
|
+
text: `no_vig_odds: ${odd.no_vig_odds}`,
|
45
|
+
type: "plain_text",
|
46
|
+
emoji: true,
|
47
|
+
},
|
48
|
+
{
|
49
|
+
text: `pinnacle_juice: ${odd.pinnacle_juice}`,
|
50
|
+
type: "plain_text",
|
51
|
+
emoji: true,
|
52
|
+
},
|
53
|
+
{
|
54
|
+
text: `pp_bet_points: ${odd.pp_bet_points}`,
|
55
|
+
type: "plain_text",
|
56
|
+
emoji: true,
|
57
|
+
},
|
58
|
+
{
|
59
|
+
text: `pin_bet_points: ${odd.pin_bet_points}`,
|
60
|
+
type: "plain_text",
|
61
|
+
emoji: true,
|
62
|
+
},
|
63
|
+
{
|
64
|
+
text: `pp_price: ${odd.pp_price}`,
|
65
|
+
type: "plain_text",
|
66
|
+
emoji: true,
|
67
|
+
},
|
68
|
+
],
|
69
|
+
},
|
70
|
+
{
|
71
|
+
type: "section",
|
72
|
+
fields: [
|
73
|
+
{
|
74
|
+
text: `pin_price_over: ${odd.pin_price_over}`,
|
75
|
+
type: "plain_text",
|
76
|
+
emoji: true,
|
77
|
+
},
|
78
|
+
{
|
79
|
+
text: `pin_price_under: ${odd.pin_price_under}`,
|
80
|
+
type: "plain_text",
|
81
|
+
emoji: true,
|
82
|
+
},
|
83
|
+
{
|
84
|
+
text: `pp_implied_odds: ${odd.pp_implied_odds}`,
|
85
|
+
type: "plain_text",
|
86
|
+
emoji: true,
|
87
|
+
},
|
88
|
+
{
|
89
|
+
text: `over_implied_odds: ${odd.over_implied_odds}`,
|
90
|
+
type: "plain_text",
|
91
|
+
emoji: true,
|
92
|
+
},
|
93
|
+
{
|
94
|
+
text: `under_implied_odds: ${odd.under_implied_odds}`,
|
95
|
+
type: "plain_text",
|
96
|
+
emoji: true,
|
97
|
+
},
|
98
|
+
{
|
99
|
+
text: `ppupdate: ${odd.ppupdate.hours} hr, ${odd.ppupdate.minutes} min ago`,
|
100
|
+
type: "plain_text",
|
101
|
+
emoji: true,
|
102
|
+
},
|
103
|
+
{
|
104
|
+
text: `pinnacleupdate: ${odd.pinnacleupdate.hours} hr, ${odd.pinnacleupdate.minutes} min ago`,
|
105
|
+
type: "plain_text",
|
106
|
+
emoji: true,
|
107
|
+
},
|
108
|
+
{
|
109
|
+
text: `away_team: ${odd.away_team}`,
|
110
|
+
type: "plain_text",
|
111
|
+
emoji: true,
|
112
|
+
},
|
113
|
+
{
|
114
|
+
text: `home_team: ${odd.home_team}`,
|
115
|
+
type: "plain_text",
|
116
|
+
emoji: true,
|
117
|
+
},
|
118
|
+
{
|
119
|
+
text: `start_date: ${odd.start_date}`,
|
120
|
+
type: "plain_text",
|
121
|
+
emoji: true,
|
122
|
+
},
|
123
|
+
],
|
124
|
+
},
|
125
|
+
{
|
126
|
+
type: "divider",
|
127
|
+
},
|
128
|
+
],
|
129
|
+
};
|
130
|
+
};
|
131
|
+
const postSlackText = async (book, odd, type) => {
|
132
|
+
let bookUrl = {
|
133
|
+
"PrizePicks (5 or 6 Pick Flex)": "https://hooks.slack.com/services/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",
|
134
|
+
"Underdog Fantasy (3 or 5 Pick)": "https://hooks.slack.com/services/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",
|
135
|
+
}[book];
|
136
|
+
await postSlackNotification(bookUrl, oddToSlack(type, odd));
|
137
|
+
};
|
138
|
+
const run = async (book) => {
|
139
|
+
let results = await typed_model_1.pbSequelize.query(`WITH pinnacle_odds as (
|
140
|
+
SELECT *, case when name like '%Over%' then true else false end as is_over
|
141
|
+
FROM
|
142
|
+
odds where (name like '%Over%' OR name like '%Under%')
|
143
|
+
and sports_book_name = 'Pinnacle' AND NOT stale
|
144
|
+
|
145
|
+
),
|
146
|
+
pp_odds as (
|
147
|
+
SELECT *, case when name like '%Over%' then true else false end as is_over
|
148
|
+
FROM
|
149
|
+
odds where (name like '%Over%' OR name like '%Under%')
|
150
|
+
and sports_book_name = '${book}' AND NOT stale
|
151
|
+
)
|
152
|
+
SELECT
|
153
|
+
no_vig_odds - pp_implied_odds as pos_ev,
|
154
|
+
*
|
155
|
+
FROM (
|
156
|
+
SELECT
|
157
|
+
CASE WHEN sub.is_over
|
158
|
+
THEN over_implied_odds / (over_implied_odds + under_implied_odds)
|
159
|
+
ELSE
|
160
|
+
under_implied_odds / (over_implied_odds + under_implied_odds)
|
161
|
+
END
|
162
|
+
as no_vig_odds,
|
163
|
+
(over_implied_odds + under_implied_odds) - 1.0 as pinnacle_juice,
|
164
|
+
*
|
165
|
+
FROM
|
166
|
+
(
|
167
|
+
SELECT
|
168
|
+
NOW() - pp."updatedAt" as pp_update,
|
169
|
+
pp.bet_points as pp_bet_points,
|
170
|
+
pin_over.bet_points as pin_bet_points,
|
171
|
+
pp.market_name,
|
172
|
+
pp.name,
|
173
|
+
pp.price as pp_price,
|
174
|
+
pin_over.price as pin_price_over,
|
175
|
+
pin_under.price as pin_price_under,
|
176
|
+
CASE
|
177
|
+
WHEN pp.price > 0
|
178
|
+
THEN 100.0 / (pp.price + 100.0)
|
179
|
+
WHEN pp.price < 0
|
180
|
+
THEN ABS(pp.price) / (ABS(pp.price) + 100.0)
|
181
|
+
END as pp_implied_odds,
|
182
|
+
CASE
|
183
|
+
WHEN pin_over.price > 0
|
184
|
+
THEN 100.0 / (pin_over.price + 100.0)
|
185
|
+
WHEN pin_over.price < 0
|
186
|
+
THEN ABS(pin_over.price) / (ABS(pin_over.price) + 100.0)
|
187
|
+
END as over_implied_odds,
|
188
|
+
CASE
|
189
|
+
WHEN pin_under.price > 0
|
190
|
+
THEN 100.0 / (pin_under.price + 100.0)
|
191
|
+
WHEN pin_under.price < 0
|
192
|
+
THEN ABS(pin_under.price) / (ABS(pin_under.price) + 100.0)
|
193
|
+
END as under_implied_odds,
|
194
|
+
NOW() - pp."updatedAt" as ppUpdate,
|
195
|
+
NOW() - pin_over."updatedAt" as pinnacleUpdate,
|
196
|
+
pp.is_over,
|
197
|
+
games.away_team,
|
198
|
+
games.home_team,
|
199
|
+
games.start_date,
|
200
|
+
pp.bet_result
|
201
|
+
FROM pp_odds pp
|
202
|
+
JOIN games on games.id = pp.game_id
|
203
|
+
JOIN pinnacle_odds pin_over
|
204
|
+
ON pp.odds_jam_game_id = pin_over.odds_jam_game_id AND pp.market_id = pin_over.market_id AND pp.odds_jam_player_id = pin_over.odds_jam_player_id AND pin_over.is_over
|
205
|
+
JOIN pinnacle_odds pin_under
|
206
|
+
ON pp.odds_jam_game_id = pin_under.odds_jam_game_id AND pp.market_id = pin_under.market_id AND pp.odds_jam_player_id = pin_under.odds_jam_player_id AND NOT pin_under.is_over
|
207
|
+
-- WHERE NOW() - pin_under."updatedAt" <= interval '3 hours'
|
208
|
+
) as sub
|
209
|
+
) sub2 WHERE
|
210
|
+
-- no_vig_odds - pp_implied_odds > 0.0 AND
|
211
|
+
start_date > now() AND
|
212
|
+
(pin_bet_points = pp_bet_points OR (NOT is_over AND pin_bet_points < pp_bet_points) OR (is_over AND pin_bet_points > pp_bet_points))
|
213
|
+
order by no_vig_odds - pp_implied_odds desc`, { type: sequelize_1.QueryTypes.SELECT });
|
214
|
+
for (let odd of results) {
|
215
|
+
let recentBet = !odd.pp_update.days &&
|
216
|
+
(!odd.pp_update.hours || odd.pp_update.hours == 0) &&
|
217
|
+
odd.pp_update.minutes < 10;
|
218
|
+
if (odd.pos_ev > -0.02 &&
|
219
|
+
odd.pp_bet_points != odd.pin_bet_points &&
|
220
|
+
recentBet) {
|
221
|
+
console.log("Mismatch found");
|
222
|
+
postSlackText(book, odd, "Point mismatch");
|
223
|
+
}
|
224
|
+
if (odd.pos_ev > 0.03 && recentBet) {
|
225
|
+
console.log("Pos EV found");
|
226
|
+
postSlackText(book, odd, "Positive EV");
|
227
|
+
}
|
228
|
+
}
|
229
|
+
};
|
230
|
+
if (require.main === module) {
|
231
|
+
if (require.main === module) {
|
232
|
+
var book = process.argv[2] || "PrizePicks (5 or 6 Pick Flex)";
|
233
|
+
run(book).then(async () => {
|
234
|
+
console.log("Finished");
|
235
|
+
});
|
236
|
+
}
|
237
|
+
}
|
238
|
+
//# sourceMappingURL=findGoodBets.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"findGoodBets.js","sourceRoot":"","sources":["../../../scripts/bet-syncing/findGoodBets.ts"],"names":[],"mappings":"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"}
|
@@ -21,6 +21,9 @@ const PULL_FOR_BOOKS = [
|
|
21
21
|
"FanDuel",
|
22
22
|
"Pinnacle",
|
23
23
|
"PrizePicks",
|
24
|
+
"PrizePicks (5 or 6 Pick Flex)",
|
25
|
+
"Bovada",
|
26
|
+
"Underdog Fantasy (3 or 5 Pick)",
|
24
27
|
];
|
25
28
|
const PULL_FOR_MARKETS = [
|
26
29
|
"1st 3 Innings Moneyline",
|
@@ -74,6 +77,7 @@ const PULL_FOR_MARKETS = [
|
|
74
77
|
"Player Interceptions",
|
75
78
|
"Player Kicking Points",
|
76
79
|
"Player Longest Reception",
|
80
|
+
"Player Made Threes",
|
77
81
|
"Player Longest Rush",
|
78
82
|
"Player Passing Attempts",
|
79
83
|
"Player Passing Completions",
|
@@ -114,6 +118,13 @@ const PULL_FOR_MARKETS = [
|
|
114
118
|
"Total Points",
|
115
119
|
"Total Rounds",
|
116
120
|
"Total Runs",
|
121
|
+
"Total Touchdowns",
|
122
|
+
"1st 2 Maps Player Kills",
|
123
|
+
"Player Blocked Shots",
|
124
|
+
"Player Fantasy Score",
|
125
|
+
"Player Passing + Rushing Yards",
|
126
|
+
"Player Power Play Points",
|
127
|
+
"Player Shots",
|
117
128
|
];
|
118
129
|
dotenv.config();
|
119
130
|
const mapOJOddsToOdds = (odds, market, sportsbook, game, player) => {
|
@@ -140,7 +151,7 @@ const mapOJOddsToOdds = (odds, market, sportsbook, game, player) => {
|
|
140
151
|
awayRotationNumber: odds.away_rotation_number,
|
141
152
|
deepLinkUrl: odds.deep_link_url,
|
142
153
|
oddsJamPlayerId: odds.player_id,
|
143
|
-
marketId: market.id,
|
154
|
+
marketId: market && market.id,
|
144
155
|
sportsbookId: sportsbook.id,
|
145
156
|
gameId: game.id,
|
146
157
|
oddsJamGameId: game.oddsJamId,
|
@@ -187,7 +198,9 @@ const run = async () => {
|
|
187
198
|
},
|
188
199
|
],
|
189
200
|
});
|
190
|
-
let gameMarkets = await OddsJamClient.getMarkets({
|
201
|
+
let gameMarkets = await OddsJamClient.getMarkets({
|
202
|
+
gameId: "13602-17233-23-06",
|
203
|
+
});
|
191
204
|
let marketsToCreate = [
|
192
205
|
...new Set(gameMarkets.filter((s) => !allMarkets.find((m) => m.oddsJamId == s.id))),
|
193
206
|
];
|
@@ -231,7 +244,6 @@ const run = async () => {
|
|
231
244
|
"price",
|
232
245
|
"checkedDate",
|
233
246
|
"betPoints",
|
234
|
-
"isMain",
|
235
247
|
"isLive",
|
236
248
|
"teamId",
|
237
249
|
"playerId",
|
@@ -239,11 +251,12 @@ const run = async () => {
|
|
239
251
|
});
|
240
252
|
console.log(`Inserted ${upsertBodies.length} odds for games ${gameIds.join(",")}`);
|
241
253
|
};
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
254
|
+
await updateOddsForGamePromise(["13602-17233-23-06"]);
|
255
|
+
// let a = upcomingGames.map((g) => g.oddsJamId);
|
256
|
+
// while (a.length) {
|
257
|
+
// let gameIds = a.splice(0, 5);
|
258
|
+
// await updateOddsForGamePromise(gameIds);
|
259
|
+
// }
|
247
260
|
};
|
248
261
|
if (require.main === module) {
|
249
262
|
if (require.main === module) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pullOdds.js","sourceRoot":"","sources":["../../../scripts/bet-syncing/pullOdds.ts"],"names":[],"mappings":";;;;;AAAA,iCAAkC;AAClC,qFAAkD;AAQlD,mDAAqE;AACrE,yCAA+B;AAC/B,sEAA8C;AAC9C,8EAAsD;AACtD,oDAA4B;AAE5B,MAAM,cAAc,GAAU;IAC5B,UAAU;IACV,QAAQ;IACR,qBAAqB;IACrB,YAAY;IACZ,mBAAmB;IACnB,YAAY;IACZ,wBAAwB;IACxB,SAAS;IACT,UAAU;IACV,YAAY;
|
1
|
+
{"version":3,"file":"pullOdds.js","sourceRoot":"","sources":["../../../scripts/bet-syncing/pullOdds.ts"],"names":[],"mappings":";;;;;AAAA,iCAAkC;AAClC,qFAAkD;AAQlD,mDAAqE;AACrE,yCAA+B;AAC/B,sEAA8C;AAC9C,8EAAsD;AACtD,oDAA4B;AAE5B,MAAM,cAAc,GAAU;IAC5B,UAAU;IACV,QAAQ;IACR,qBAAqB;IACrB,YAAY;IACZ,mBAAmB;IACnB,YAAY;IACZ,wBAAwB;IACxB,SAAS;IACT,UAAU;IACV,YAAY;IACZ,+BAA+B;IAC/B,QAAQ;IACR,gCAAgC;CACjC,CAAC;AAEF,MAAM,gBAAgB,GAAa;IACjC,yBAAyB;IACzB,wBAAwB;IACxB,0BAA0B;IAC1B,yBAAyB;IACzB,wBAAwB;IACxB,0BAA0B;IAC1B,oBAAoB;IACpB,0BAA0B;IAC1B,uBAAuB;IACvB,mBAAmB;IACnB,qBAAqB;IACrB,uBAAuB;IACvB,qBAAqB;IACrB,sBAAsB;IACtB,4BAA4B;IAC5B,qBAAqB;IACrB,uBAAuB;IACvB,gCAAgC;IAChC,sBAAsB;IACtB,sBAAsB;IACtB,wBAAwB;IACxB,uBAAuB;IACvB,0BAA0B;IAC1B,wBAAwB;IACxB,0BAA0B;IAC1B,sBAAsB;IACtB,qBAAqB;IACrB,uBAAuB;IACvB,sBAAsB;IACtB,sBAAsB;IACtB,wBAAwB;IACxB,uBAAuB;IACvB,0BAA0B;IAC1B,wBAAwB;IACxB,0BAA0B;IAC1B,qBAAqB;IACrB,WAAW;IACX,iBAAiB;IACjB,gBAAgB;IAChB,eAAe;IACf,oBAAoB;IACpB,0BAA0B;IAC1B,yBAAyB;IACzB,cAAc;IACd,sBAAsB;IACtB,aAAa;IACb,qBAAqB;IACrB,kBAAkB;IAClB,sBAAsB;IACtB,uBAAuB;IACvB,0BAA0B;IAC1B,oBAAoB;IACpB,qBAAqB;IACrB,yBAAyB;IACzB,4BAA4B;IAC5B,2BAA2B;IAC3B,sBAAsB;IACtB,eAAe;IACf,yBAAyB;IACzB,0BAA0B;IAC1B,oCAAoC;IACpC,aAAa;IACb,iBAAiB;IACjB,2BAA2B;IAC3B,6BAA6B;IAC7B,wBAAwB;IACxB,mBAAmB;IACnB,aAAa;IACb,yBAAyB;IACzB,2BAA2B;IAC3B,sBAAsB;IACtB,cAAc;IACd,cAAc;IACd,sBAAsB;IACtB,eAAe;IACf,wBAAwB;IACxB,mBAAmB;IACnB,gBAAgB;IAChB,0BAA0B;IAC1B,kBAAkB;IAClB,cAAc;IACd,cAAc;IACd,WAAW;IACX,oBAAoB;IACpB,UAAU;IACV,YAAY;IACZ,qBAAqB;IACrB,aAAa;IACb,sBAAsB;IACtB,cAAc;IACd,cAAc;IACd,YAAY;IACZ,kBAAkB;IAElB,yBAAyB;IACzB,sBAAsB;IACtB,sBAAsB;IACtB,gCAAgC;IAChC,0BAA0B;IAC1B,cAAc;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,eAAe,GAAG,CACtB,IAAc,EACd,MAAc,EACd,UAAsB,EACtB,IAAU,EACV,MAAe,EACf,EAAE;IACF,IAAI,IAAI,CAAC;IACT,IACE,IAAI,CAAC,gBAAgB;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAClD;QACA,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC;KAC9B;SAAM,IACL,IAAI,CAAC,gBAAgB;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAClD;QACA,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC;KAC9B;IACD,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,EAAE;QAClB,cAAc,EAAE,IAAI,CAAC,gBAAgB;QACrC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,IAAI,CAAC,YAAY;QAC9B,SAAS,EAAE,IAAI,CAAC,UAAU;QAC1B,MAAM,EAAE,IAAI,CAAC,OAAO;QACpB,MAAM,EAAE,IAAI,CAAC,OAAO;QACpB,UAAU,EAAE,IAAI,CAAC,WAAW;QAC5B,kBAAkB,EAAE,IAAI,CAAC,oBAAoB;QAC7C,kBAAkB,EAAE,IAAI,CAAC,oBAAoB;QAC7C,WAAW,EAAE,IAAI,CAAC,aAAa;QAC/B,eAAe,EAAE,IAAI,CAAC,SAAS;QAC/B,QAAQ,EAAE,MAAM,IAAI,MAAM,CAAC,EAAE;QAC7B,YAAY,EAAE,UAAU,CAAC,EAAE;QAC3B,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,aAAa,EAAE,IAAI,CAAC,SAAS;QAC7B,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,EAAE;QACvB,QAAQ,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,EAAE;QACpB,cAAc,EAAE,IAAI,CAAC,SAAS;KAC/B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,IAAA,4BAAO,EAAC,OAAO,CAAC,GAAG,CAAC,gBAAiB,CAAC,CAAC;AAE7D,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;IACrB,MAAM,aAAa,GAAG,MAAM,kBAAI,CAAC,OAAO,CAAC;QACvC,KAAK,EAAE;YACL,SAAS,EAAE;gBACT,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,EAAE;gBACpB,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE,IAAA,gBAAM,GAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;aAC/B;SACF;QACD,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;KAC9B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,eAAe,aAAa,CAAC,MAAM,QAAQ,CAAC,CAAC;IAEzD,IAAI,UAAU,GAAG,MAAM,gBAAM,CAAC,OAAO,EAAE,CAAC;IACxC,IAAI,cAAc,GAAG,MAAM,oBAAU,CAAC,OAAO,EAAE,CAAC;IAChD,IAAI,iBAAiB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAE1D,MAAM,wBAAwB,GAAG,KAAK,EAAE,OAAiB,EAAE,EAAE;QAC3D,IAAI,gBAAgB,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC;YACrD,MAAM,EAAE,OAAO;YACf,UAAU,EAAE,cAAc;YAC1B,UAAU,EAAE,gBAAgB;SAC7B,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,EAAE;YACrB,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrD,OAAO;SACR;QAED,IAAI,KAAK,GAAG,MAAM,kBAAI,CAAC,OAAO,CAAC;YAC7B,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE;YAC1C,OAAO,EAAE;gBACP;oBACE,KAAK,EAAE,kBAAI;oBACX,EAAE,EAAE,kBAAkB;iBACvB;gBACD;oBACE,KAAK,EAAE,kBAAI;oBACX,EAAE,EAAE,kBAAkB;iBACvB;aACF;SACF,CAAC,CAAC;QAEH,IAAI,WAAW,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC;YAC/C,MAAM,EAAE,mBAAmB;SAC5B,CAAC,CAAC;QAEH,IAAI,eAAe,GAAU;YAC3B,GAAG,IAAI,GAAG,CACR,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CACxE;SACF,CAAC;QAEF,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YACjD,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAChC,MAAM,gBAAM,CAAC,UAAU,CACrB,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACxB,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC7C,CAAC,CAAC,EACF,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAC3B,CAAC;YACF,UAAU,GAAG,MAAM,gBAAM,CAAC,OAAO,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;SACjC;QAED,IAAI,YAAY,GAAU,EAAE,CAAC;QAE7B,KAAK,IAAI,QAAQ,IAAI,gBAAgB,EAAE;YACrC,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YACzB,IAAI,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC;YAEzB,IAAI,uBAAuB,GAAG,IAAI;iBAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;iBAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjD,IAAI,uBAAuB,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjE,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;gBACpC,MAAM,oBAAU,CAAC,UAAU,CACzB,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBAChC,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBACrB,CAAC,CAAC,EACF,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAC3B,CAAC;gBACF,cAAc,GAAG,MAAM,oBAAU,CAAC,OAAO,EAAE,CAAC;aAC7C;YAED,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;YAEpD,IAAI,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACvB,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;gBACpB,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACjC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAEnB,IAAI,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,WAAW,CAAE,CAAC;gBAClE,IAAI,UAAU,GAAG,cAAc,CAAC,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,gBAAgB,CACtC,CAAC;gBACH,IAAI,cAAc,GAAG,eAAe,CAClC,GAAG,EACH,MAAM,EACN,UAAU,EACV,IAAK,EACL,SAAS,CACV,CAAC;gBACF,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aACnC;SACF;QAED,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAEnC,MAAM,kBAAI,CAAC,UAAU,CAAC,YAAY,EAAE;YAClC,iBAAiB,EAAE;gBACjB,OAAO;gBACP,aAAa;gBACb,WAAW;gBACX,QAAQ;gBACR,QAAQ;gBACR,UAAU;aACX;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CACT,YAAY,YAAY,CAAC,MAAM,mBAAmB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACtE,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,wBAAwB,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAEtD,iDAAiD;IACjD,qBAAqB;IACrB,kCAAkC;IAClC,6CAA6C;IAC7C,IAAI;AACN,CAAC,CAAC;AAEF,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;QAC3B,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;KACJ;CACF"}
|
@@ -7,9 +7,13 @@ const dotenv = require("dotenv");
|
|
7
7
|
const oddsjam_js_wrapper_1 = __importDefault(require("@winible/oddsjam-js-wrapper"));
|
8
8
|
const typed_model_1 = require("../../typed-model");
|
9
9
|
const player_result_1 = __importDefault(require("../../typed-model/player-result"));
|
10
|
+
const sequelize_1 = require("sequelize");
|
10
11
|
dotenv.config();
|
11
12
|
const OddsJamClient = (0, oddsjam_js_wrapper_1.default)(process.env.ODDS_JAM_API_KEY);
|
12
13
|
const mapOJPlayerResultToPlayerResults = (p, player, game) => {
|
14
|
+
if (!game) {
|
15
|
+
return undefined;
|
16
|
+
}
|
13
17
|
return {
|
14
18
|
oddsJamId: p.id,
|
15
19
|
oddsJamPlayerId: p.player_id,
|
@@ -29,29 +33,51 @@ const mapOJPlayerResultToPlayerResults = (p, player, game) => {
|
|
29
33
|
};
|
30
34
|
};
|
31
35
|
const run = async () => {
|
32
|
-
const
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
const res = await typed_model_1.pbSequelize.query(`
|
37
|
+
SELECT odds_jam_game_id, start_date, count(*) FROM odds
|
38
|
+
join games on games.odds_jam_id = odds_jam_game_id
|
39
|
+
where games.start_date < now() - interval '10 hours'
|
40
|
+
AND bet_result is null
|
41
|
+
AND games.league = 'NBA'
|
42
|
+
group by odds_jam_game_id, start_date order by start_date desc
|
43
|
+
`, { type: sequelize_1.QueryTypes.SELECT });
|
44
|
+
let oddsJamGameIds = res.map((t) => t.odds_jam_game_id);
|
45
|
+
console.log(oddsJamGameIds);
|
46
|
+
let playerResults = [];
|
47
|
+
for (let gameId of oddsJamGameIds) {
|
48
|
+
let playerResultsResponse = await OddsJamClient.getPlayerResults({
|
49
|
+
gameId: gameId,
|
50
|
+
});
|
51
|
+
playerResults.concat(playerResultsResponse.data);
|
52
|
+
if (gameId) {
|
53
|
+
let playerResults = playerResultsResponse.data;
|
54
|
+
console.log(`Migrate all players results: ${gameId}`);
|
55
|
+
const players = await typed_model_1.Player.findAll();
|
56
|
+
const leagues = await typed_model_1.League.findAll();
|
57
|
+
const games = await typed_model_1.Game.findAll();
|
58
|
+
for (let result of playerResults) {
|
59
|
+
if (players.find((p) => p.oddsJamId == result.player_id)) {
|
60
|
+
continue;
|
61
|
+
}
|
62
|
+
let league = leagues.find((l) => l.leagueName == result.league);
|
63
|
+
players.push(await typed_model_1.Player.create({
|
64
|
+
oddsJamId: result.player_id,
|
65
|
+
playerName: result.player_name,
|
66
|
+
sport: result.sport,
|
67
|
+
league: result.league,
|
68
|
+
leagueId: league.id,
|
69
|
+
}));
|
70
|
+
}
|
71
|
+
let resSet = new Set();
|
72
|
+
const playerResultData = playerResults
|
73
|
+
.map((p) => mapOJPlayerResultToPlayerResults(p, players.find((pl) => pl.oddsJamId == p.player_id), games.find((g) => g.oddsJamId == p.game_id)))
|
74
|
+
.filter((p) => !!p);
|
75
|
+
await player_result_1.default.bulkCreate(playerResultData, {
|
76
|
+
updateOnDuplicate: ["stats", "playerId"],
|
77
|
+
});
|
78
|
+
playerResults = [];
|
40
79
|
}
|
41
|
-
let league = leagues.find((l) => l.leagueName == result.league);
|
42
|
-
players.push(await typed_model_1.Player.create({
|
43
|
-
oddsJamId: result.player_id,
|
44
|
-
playerName: result.player_name,
|
45
|
-
sport: result.sport,
|
46
|
-
league: result.league,
|
47
|
-
leagueId: league.id,
|
48
|
-
}));
|
49
80
|
}
|
50
|
-
let resSet = new Set();
|
51
|
-
const playerResultData = playerResults.map((p) => mapOJPlayerResultToPlayerResults(p, players.find((pl) => pl.oddsJamId == p.player_id), games.find((g) => g.oddsJamId == p.game_id)));
|
52
|
-
await player_result_1.default.bulkCreate(playerResultData, {
|
53
|
-
updateOnDuplicate: ["stats", "playerId"],
|
54
|
-
});
|
55
81
|
};
|
56
82
|
if (require.main === module) {
|
57
83
|
if (require.main === module) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pullPlayerResults.js","sourceRoot":"","sources":["../../../scripts/bet-syncing/pullPlayerResults.ts"],"names":[],"mappings":";;;;;AAAA,iCAAkC;AAClC,qFAAkD;AASlD,
|
1
|
+
{"version":3,"file":"pullPlayerResults.js","sourceRoot":"","sources":["../../../scripts/bet-syncing/pullPlayerResults.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pullPlayers.js","sourceRoot":"","sources":["../../../scripts/bet-syncing/pullPlayers.ts"],"names":[],"mappings":";;;;;AAAA,iCAAkC;AAClC,qFAAkD;AAQlD,mDAAyD;AAEzD,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,aAAa,GAAG,IAAA,4BAAO,EAAC,OAAO,CAAC,GAAG,CAAC,gBAAiB,CAAC,CAAC;AAE7D,MAAM,mBAAmB,GAAG,CAAC,CAAW,EAAE,MAAc,EAAE,IAAU,EAAE,EAAE;IACtE,OAAO;QACL,SAAS,EAAE,CAAC,CAAC,EAAE;QACf,UAAU,EAAE,CAAC,CAAC,WAAW;QACzB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,SAAS,EAAE,CAAC,CAAC,UAAU;QACvB,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,aAAa,EAAE,CAAC,CAAC,OAAO;QACxB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,IAAI,CAAC,EAAE;
|
1
|
+
{"version":3,"file":"pullPlayers.js","sourceRoot":"","sources":["../../../scripts/bet-syncing/pullPlayers.ts"],"names":[],"mappings":";;;;;AAAA,iCAAkC;AAClC,qFAAkD;AAQlD,mDAAyD;AAEzD,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,aAAa,GAAG,IAAA,4BAAO,EAAC,OAAO,CAAC,GAAG,CAAC,gBAAiB,CAAC,CAAC;AAE7D,MAAM,mBAAmB,GAAG,CAAC,CAAW,EAAE,MAAc,EAAE,IAAU,EAAE,EAAE;IACtE,OAAO;QACL,SAAS,EAAE,CAAC,CAAC,EAAE;QACf,UAAU,EAAE,CAAC,CAAC,WAAW;QACzB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,SAAS,EAAE,CAAC,CAAC,UAAU;QACvB,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,aAAa,EAAE,CAAC,CAAC,OAAO;QACxB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,EAAE;QACvB,QAAQ,EAAE,MAAM,CAAC,EAAE;KACpB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;IACrB,MAAM,OAAO,GAAG,MAAM,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC;IAEvD,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAa,MAAM,oBAAM,CAAC,OAAO,EAAE,CAAC;IAEjD,MAAM,KAAK,GAAW,MAAM,kBAAI,CAAC,OAAO,EAAE,CAAC;IAE3C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACnC,mBAAmB,CACjB,CAAC,EACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,CAAE,EAC9C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,OAAO,CAAE,CACjD,CACF,CAAC;IAEF,MAAM,oBAAM,CAAC,UAAU,CAAC,UAAU,EAAE;QAClC,iBAAiB,EAAE;YACjB,OAAO;YACP,QAAQ;YACR,WAAW;YACX,UAAU;YACV,UAAU;YACV,eAAe;YACf,QAAQ;YACR,UAAU;YACV,KAAK;YACL,QAAQ;YACR,QAAQ;SACT;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;QAC3B,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;KACJ;CACF"}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const dotenv = require("dotenv");
|
4
|
+
const typed_model_1 = require("../../typed-model");
|
5
|
+
const sequelize_1 = require("sequelize");
|
6
|
+
dotenv.config();
|
7
|
+
const run = async () => {
|
8
|
+
console.log("Updating stale odds");
|
9
|
+
await typed_model_1.pbSequelize.query(`UPDATE odds set stale = true where id in
|
10
|
+
(select id FROM (
|
11
|
+
SELECT
|
12
|
+
id,
|
13
|
+
name,
|
14
|
+
market_name,
|
15
|
+
odds_jam_game_id,
|
16
|
+
sports_book_name,
|
17
|
+
is_main,
|
18
|
+
market_id,
|
19
|
+
odds_jam_player_id,
|
20
|
+
checked_date,
|
21
|
+
name like '%Over%' as is_over,
|
22
|
+
ROW_NUMBER() over (partition by odds_jam_game_id, sports_book_name, is_main, market_name, odds_jam_player_id, name like '%Over%' order by checked_date DESC) as row
|
23
|
+
FROM odds
|
24
|
+
WHERE odds_jam_player_id IS NOT NULL AND bet_result IS NULL AND is_main
|
25
|
+
) sub where row > 1)`, { type: sequelize_1.QueryTypes.UPDATE });
|
26
|
+
};
|
27
|
+
if (require.main === module) {
|
28
|
+
if (require.main === module) {
|
29
|
+
run().then(async () => {
|
30
|
+
console.log("Finished");
|
31
|
+
});
|
32
|
+
}
|
33
|
+
}
|
34
|
+
//# sourceMappingURL=updateStaleOdds.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"updateStaleOdds.js","sourceRoot":"","sources":["../../../scripts/bet-syncing/updateStaleOdds.ts"],"names":[],"mappings":";;AAAA,iCAAkC;AAElC,mDAAgD;AAChD,yCAAuC;AAEvC,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;IACrB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,MAAM,yBAAW,CAAC,KAAK,CACrB;;;;;;;;;;;;;;;;yBAgBqB,EACrB,EAAE,IAAI,EAAE,sBAAU,CAAC,MAAM,EAAE,CAC5B,CAAC;AACJ,CAAC,CAAC;AAEF,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;QAC3B,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;KACJ;CACF"}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const sequelize_1 = require("sequelize");
|
7
|
+
const pb_sequelize_1 = __importDefault(require("./pb-sequelize"));
|
8
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
9
|
+
class League extends sequelize_1.Model {
|
10
|
+
}
|
11
|
+
League.init({
|
12
|
+
id: {
|
13
|
+
type: sequelize_1.DataTypes.BIGINT,
|
14
|
+
primaryKey: true,
|
15
|
+
allowNull: false,
|
16
|
+
defaultValue: pb_sequelize_1.default.fn("next_id"),
|
17
|
+
},
|
18
|
+
leagueId: {
|
19
|
+
type: sequelize_1.DataTypes.BIGINT,
|
20
|
+
field: "league_id",
|
21
|
+
allowNull: false,
|
22
|
+
},
|
23
|
+
userId: {
|
24
|
+
type: sequelize_1.DataTypes.BIGINT,
|
25
|
+
field: "user_id",
|
26
|
+
allowNull: false,
|
27
|
+
},
|
28
|
+
createdAt: sequelize_1.DataTypes.DATE,
|
29
|
+
updatedAt: sequelize_1.DataTypes.DATE,
|
30
|
+
}, {
|
31
|
+
// Other model options go here
|
32
|
+
tableName: "leagues",
|
33
|
+
sequelize: pb_sequelize_1.default,
|
34
|
+
});
|
35
|
+
exports.default = League;
|
36
|
+
//# sourceMappingURL=league-user.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"league-user.js","sourceRoot":"","sources":["../../typed-model/league-user.ts"],"names":[],"mappings":";;;;;AAAA,yCAOmB;AAEnB,kEAAuC;AAEvC,mEAAmE;AACnE,MAAM,MAAO,SAAQ,iBAGpB;CAQA;AAED,MAAM,CAAC,IAAI,CACT;IACE,EAAE,EAAE;QACF,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,sBAAS,CAAC,EAAE,CAAC,SAAS,CAAC;KACtC;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,WAAW;QAClB,SAAS,EAAE,KAAK;KACjB;IACD,MAAM,EAAE;QACN,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,KAAK;KACjB;IACD,SAAS,EAAE,qBAAS,CAAC,IAAI;IACzB,SAAS,EAAE,qBAAS,CAAC,IAAI;CAC1B,EACD;IACE,8BAA8B;IAC9B,SAAS,EAAE,SAAS;IACpB,SAAS,EAAT,sBAAS;CACV,CACF,CAAC;AAEF,kBAAe,MAAM,CAAC"}
|
package/dist/typed-model/odds.js
CHANGED
@@ -112,6 +112,11 @@ Odds.init({
|
|
112
112
|
type: sequelize_1.DataTypes.INTEGER,
|
113
113
|
field: "player_score",
|
114
114
|
},
|
115
|
+
isStale: {
|
116
|
+
type: sequelize_1.DataTypes.BOOLEAN,
|
117
|
+
field: "stale",
|
118
|
+
defaultValue: false,
|
119
|
+
},
|
115
120
|
createdAt: sequelize_1.DataTypes.DATE,
|
116
121
|
updatedAt: sequelize_1.DataTypes.DATE,
|
117
122
|
}, {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"odds.js","sourceRoot":"","sources":["../../typed-model/odds.ts"],"names":[],"mappings":";;;;;AAAA,yCAOmB;AACnB,gDAAwB;AACxB,kDAA0B;AAE1B,kEAAuC;AACvC,sDAA8B;AAC9B,kDAA0B;AAE1B,mEAAmE;AACnE,MAAM,IAAK,SAAQ,iBAA2D;
|
1
|
+
{"version":3,"file":"odds.js","sourceRoot":"","sources":["../../typed-model/odds.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@winible/winible-typed",
|
3
|
-
"version": "1.0.
|
3
|
+
"version": "1.0.10",
|
4
4
|
"description": "",
|
5
5
|
"main": "./dist/index.js",
|
6
6
|
"types": "./dist/index.d.ts",
|
@@ -20,7 +20,7 @@
|
|
20
20
|
"@slack/bolt": "^3.12.1",
|
21
21
|
"@types/express": "^4.17.13",
|
22
22
|
"@types/uploadcare": "^0.4.1",
|
23
|
-
"@winible/oddsjam-js-wrapper": "1.0.
|
23
|
+
"@winible/oddsjam-js-wrapper": "^1.0.4",
|
24
24
|
"authorizenet": "^1.0.8",
|
25
25
|
"aws-sdk": "^2.824.0",
|
26
26
|
"axios": "^0.21.4",
|
@@ -0,0 +1,79 @@
|
|
1
|
+
import {
|
2
|
+
Model,
|
3
|
+
InferAttributes,
|
4
|
+
InferCreationAttributes,
|
5
|
+
CreationOptional,
|
6
|
+
DataTypes,
|
7
|
+
} from "sequelize";
|
8
|
+
import League from "./league";
|
9
|
+
|
10
|
+
import sequelize from "./pb-sequelize";
|
11
|
+
import PhoneUser from "./phone-user";
|
12
|
+
|
13
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
14
|
+
class LeagueUser extends Model<
|
15
|
+
InferAttributes<LeagueUser>,
|
16
|
+
InferCreationAttributes<LeagueUser>
|
17
|
+
> {
|
18
|
+
// 'CreationOptional' is a special type that marks the field as optional
|
19
|
+
// when creating an instance of the model (such as using Model.create()).
|
20
|
+
declare id: CreationOptional<string>;
|
21
|
+
declare leagueId: string;
|
22
|
+
declare userId: string;
|
23
|
+
declare createdAt: CreationOptional<Date>;
|
24
|
+
declare updatedAt: CreationOptional<Date>;
|
25
|
+
}
|
26
|
+
|
27
|
+
LeagueUser.init(
|
28
|
+
{
|
29
|
+
id: {
|
30
|
+
type: DataTypes.BIGINT,
|
31
|
+
primaryKey: true,
|
32
|
+
allowNull: false,
|
33
|
+
defaultValue: sequelize.fn("next_id"),
|
34
|
+
},
|
35
|
+
leagueId: {
|
36
|
+
type: DataTypes.BIGINT,
|
37
|
+
field: "league_id",
|
38
|
+
allowNull: false,
|
39
|
+
},
|
40
|
+
userId: {
|
41
|
+
type: DataTypes.BIGINT,
|
42
|
+
field: "user_id",
|
43
|
+
allowNull: false,
|
44
|
+
},
|
45
|
+
createdAt: DataTypes.DATE,
|
46
|
+
updatedAt: DataTypes.DATE,
|
47
|
+
},
|
48
|
+
{
|
49
|
+
// Other model options go here
|
50
|
+
tableName: "league_users",
|
51
|
+
sequelize,
|
52
|
+
}
|
53
|
+
);
|
54
|
+
|
55
|
+
LeagueUser.hasOne(League, {
|
56
|
+
foreignKey: "id",
|
57
|
+
sourceKey: "leagueId",
|
58
|
+
onDelete: "NO ACTION",
|
59
|
+
constraints: false,
|
60
|
+
});
|
61
|
+
League.hasMany(LeagueUser, {
|
62
|
+
foreignKey: "leagueId",
|
63
|
+
onDelete: "NO ACTION",
|
64
|
+
constraints: false,
|
65
|
+
});
|
66
|
+
|
67
|
+
LeagueUser.hasOne(PhoneUser, {
|
68
|
+
foreignKey: "id",
|
69
|
+
sourceKey: "userId",
|
70
|
+
onDelete: "NO ACTION",
|
71
|
+
constraints: false,
|
72
|
+
});
|
73
|
+
PhoneUser.hasMany(LeagueUser, {
|
74
|
+
foreignKey: "userId",
|
75
|
+
onDelete: "NO ACTION",
|
76
|
+
constraints: false,
|
77
|
+
});
|
78
|
+
|
79
|
+
export default LeagueUser;
|
package/typed-model/odds.ts
CHANGED
@@ -76,6 +76,7 @@ class Odds extends Model<InferAttributes<Odds>, InferCreationAttributes<Odds>> {
|
|
76
76
|
declare homeScore?: number;
|
77
77
|
declare awayScore?: number;
|
78
78
|
declare playerScore?: number;
|
79
|
+
declare isStale?: boolean;
|
79
80
|
declare createdAt: CreationOptional<Date>;
|
80
81
|
declare updatedAt: CreationOptional<Date>;
|
81
82
|
|
@@ -183,6 +184,11 @@ Odds.init(
|
|
183
184
|
type: DataTypes.INTEGER,
|
184
185
|
field: "player_score",
|
185
186
|
},
|
187
|
+
isStale: {
|
188
|
+
type: DataTypes.BOOLEAN,
|
189
|
+
field: "stale",
|
190
|
+
defaultValue: false,
|
191
|
+
},
|
186
192
|
createdAt: DataTypes.DATE,
|
187
193
|
updatedAt: DataTypes.DATE,
|
188
194
|
},
|