@levrbet/shared 0.2.79 → 0.2.80
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/core/utils/game.utils.d.ts +0 -2
- package/dist/core/utils/game.utils.js +1 -69
- package/dist/core/utils/game.utils.js.map +1 -1
- package/dist/server/oracle/config/game-periods/providers/lsports.periods.js +3 -3
- package/dist/server/oracle/config/game-periods/providers/lsports.periods.js.map +1 -1
- package/dist/server/oracle/config/game-periods/providers/optic-odds.periods.d.ts +27 -4
- package/dist/server/oracle/config/game-periods/providers/optic-odds.periods.js +27 -4
- package/dist/server/oracle/config/game-periods/providers/optic-odds.periods.js.map +1 -1
- package/dist/server/oracle/config/game-periods/sports.config.js +65 -8
- package/dist/server/oracle/config/game-periods/sports.config.js.map +1 -1
- package/dist/server/oracle/config/game-periods/types.d.ts +5 -2
- package/dist/server/oracle/config/game-periods/types.js +1 -0
- package/dist/server/oracle/config/game-periods/types.js.map +1 -1
- package/dist/server/oracle/redis-cache-manager/game.progress.d.ts +4 -0
- package/dist/server/oracle/redis-cache-manager/game.progress.js +27 -0
- package/dist/server/oracle/redis-cache-manager/game.progress.js.map +1 -0
- package/dist/server/oracle/types/providers/game-clock/index.d.ts +1 -1
- package/dist/server/oracle/types/providers/game-clock/index.js +1 -1
- package/dist/server/oracle/types/providers/game-clock/index.js.map +1 -1
- package/dist/server/utils/game_progress/caclulate.game.progress.d.ts +6 -0
- package/dist/server/utils/game_progress/caclulate.game.progress.js +96 -0
- package/dist/server/utils/game_progress/caclulate.game.progress.js.map +1 -0
- package/dist/server/utils/game_progress/game.utils.d.ts +2 -0
- package/dist/server/utils/game_progress/game.utils.js +65 -0
- package/dist/server/utils/game_progress/game.utils.js.map +1 -0
- package/dist/server/utils/game_progress/index.d.ts +5 -0
- package/dist/server/utils/game_progress/index.js +84 -0
- package/dist/server/utils/game_progress/index.js.map +1 -0
- package/dist/server/{oracle/types/providers/game-clock → utils/game_progress}/parser.d.ts +1 -7
- package/dist/server/{oracle/types/providers/game-clock → utils/game_progress}/parser.js +2 -13
- package/dist/server/utils/game_progress/parser.js.map +1 -0
- package/dist/server/utils/index.d.ts +1 -0
- package/dist/server/utils/index.js +1 -0
- package/dist/server/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/server/oracle/types/providers/game-clock/parser.js.map +0 -1
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
import { SportGroup } from "@prisma/client";
|
|
2
1
|
export declare const calculatePrice: (americanOdds: number, normalizationFactor: number) => number;
|
|
3
2
|
export declare const calculateAmericanOdds: (price: number, normalizationFactor?: number) => string;
|
|
4
|
-
export declare const getGameProgressBPS: (gameClock: string, totalPeriodDurationInSeconds: number, period: number, totalPeriods: number, sportGroup: SportGroup) => number | null;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const client_1 = require("@prisma/client");
|
|
3
|
+
exports.calculateAmericanOdds = exports.calculatePrice = void 0;
|
|
5
4
|
const calculatePrice = (americanOdds, normalizationFactor) => {
|
|
6
5
|
const decimalOdds = americanOdds > 0 ? americanOdds / 100 + 1 : 100 / Math.abs(americanOdds) + 1;
|
|
7
6
|
return Number((normalizationFactor / decimalOdds).toFixed(4));
|
|
@@ -22,71 +21,4 @@ const calculateAmericanOdds = (price, normalizationFactor = 1) => {
|
|
|
22
21
|
}
|
|
23
22
|
};
|
|
24
23
|
exports.calculateAmericanOdds = calculateAmericanOdds;
|
|
25
|
-
// Game progress calculation utilities
|
|
26
|
-
const parseGameClockToSeconds = (gameClock) => {
|
|
27
|
-
const [rawMinutes, rawSeconds] = gameClock.split(":");
|
|
28
|
-
const minutes = Number(rawMinutes);
|
|
29
|
-
const seconds = Number(rawSeconds);
|
|
30
|
-
if (isNaN(minutes) || isNaN(seconds))
|
|
31
|
-
return null;
|
|
32
|
-
return minutes * 60 + seconds;
|
|
33
|
-
};
|
|
34
|
-
const calculateGameProgressBPSWithPeriodsOnly = (period, totalPeriods) => {
|
|
35
|
-
if (period > totalPeriods)
|
|
36
|
-
return 1e4;
|
|
37
|
-
const progress = period / totalPeriods;
|
|
38
|
-
return Math.round(progress * 1e4);
|
|
39
|
-
};
|
|
40
|
-
//{ totalPeriods: 2, totalPeriodDurationInSeconds: 45 * 60 },
|
|
41
|
-
// gameClock: '57:20',
|
|
42
|
-
//levr-v1-dev-oracle-core | gamePeriod: 20,
|
|
43
|
-
const calculateGameProgressBPS = (elapsedSeconds, totalPeriodDurationInSeconds, totalPeriods, period) => {
|
|
44
|
-
if (totalPeriodDurationInSeconds === 0)
|
|
45
|
-
return 0;
|
|
46
|
-
if (elapsedSeconds > totalPeriodDurationInSeconds)
|
|
47
|
-
elapsedSeconds = totalPeriodDurationInSeconds;
|
|
48
|
-
const progress = elapsedSeconds / totalPeriodDurationInSeconds;
|
|
49
|
-
const periodsPassed = period - 1;
|
|
50
|
-
const pastProgress = calculateGameProgressBPSWithPeriodsOnly(periodsPassed, totalPeriods);
|
|
51
|
-
const currentPeriodProgress = (progress * 1e4) / totalPeriods;
|
|
52
|
-
const value = Math.round(pastProgress + currentPeriodProgress);
|
|
53
|
-
//TODO: revise time tracking
|
|
54
|
-
if (value > 1e4 || value < 0)
|
|
55
|
-
return 5e3;
|
|
56
|
-
return value;
|
|
57
|
-
};
|
|
58
|
-
// Example: { totalPeriods: 2, totalPeriodDurationInSeconds: 45 * 60 }, gameClock: '57:20', period: 2
|
|
59
|
-
// gameClock is cumulative (57:20 = 57 mins into game, which is 12:20 into period 2)
|
|
60
|
-
// Expected: elapsedInPeriod = 3440 - 2700 = 740 seconds → ~63.7% game progress
|
|
61
|
-
const calculateGameProgressBPSWithGameClockCountUp = (gameClock, totalPeriodDurationInSeconds, totalPeriods, period) => {
|
|
62
|
-
const cumulativeElapsedSeconds = parseGameClockToSeconds(gameClock);
|
|
63
|
-
if (cumulativeElapsedSeconds === null)
|
|
64
|
-
return null;
|
|
65
|
-
// Subtract time from previous periods since gameClock is cumulative
|
|
66
|
-
const previousPeriodsSeconds = (period - 1) * totalPeriodDurationInSeconds;
|
|
67
|
-
const elapsedSecondsInCurrentPeriod = cumulativeElapsedSeconds - previousPeriodsSeconds;
|
|
68
|
-
return calculateGameProgressBPS(elapsedSecondsInCurrentPeriod, totalPeriodDurationInSeconds, totalPeriods, period);
|
|
69
|
-
};
|
|
70
|
-
const calculateGameProgressBPSWithGameClockCountDown = (gameClock, totalPeriodDurationInSeconds, totalPeriods, period) => {
|
|
71
|
-
const remainingSeconds = parseGameClockToSeconds(gameClock);
|
|
72
|
-
if (remainingSeconds === null)
|
|
73
|
-
return null;
|
|
74
|
-
const elapsedSeconds = totalPeriodDurationInSeconds - remainingSeconds;
|
|
75
|
-
return calculateGameProgressBPS(elapsedSeconds, totalPeriodDurationInSeconds, totalPeriods, period);
|
|
76
|
-
};
|
|
77
|
-
const getGameProgressBPS = (gameClock, totalPeriodDurationInSeconds, period, totalPeriods, sportGroup) => {
|
|
78
|
-
switch (sportGroup) {
|
|
79
|
-
case client_1.SportGroup.Soccer:
|
|
80
|
-
return calculateGameProgressBPSWithGameClockCountUp(gameClock, totalPeriodDurationInSeconds, totalPeriods, period);
|
|
81
|
-
case client_1.SportGroup.Basketball:
|
|
82
|
-
return calculateGameProgressBPSWithGameClockCountDown(gameClock, totalPeriodDurationInSeconds, totalPeriods, period);
|
|
83
|
-
case client_1.SportGroup.Football:
|
|
84
|
-
return calculateGameProgressBPSWithGameClockCountDown(gameClock, totalPeriodDurationInSeconds, totalPeriods, period);
|
|
85
|
-
case client_1.SportGroup.Baseball:
|
|
86
|
-
return calculateGameProgressBPSWithPeriodsOnly(period, totalPeriods);
|
|
87
|
-
default:
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
exports.getGameProgressBPS = getGameProgressBPS;
|
|
92
24
|
//# sourceMappingURL=game.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game.utils.js","sourceRoot":"","sources":["../../../src/core/utils/game.utils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"game.utils.js","sourceRoot":"","sources":["../../../src/core/utils/game.utils.ts"],"names":[],"mappings":";;;AAAO,MAAM,cAAc,GAAG,CAAC,YAAoB,EAAE,mBAA2B,EAAU,EAAE;IACxF,MAAM,WAAW,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IAChG,OAAO,MAAM,CAAC,CAAC,mBAAmB,GAAG,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AACjE,CAAC,CAAA;AAHY,QAAA,cAAc,kBAG1B;AAEM,MAAM,qBAAqB,GAAG,CAAC,KAAa,EAAE,mBAAmB,GAAG,CAAC,EAAU,EAAE;IACpF,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAC5B,IAAI,CAAC;QACD,MAAM,WAAW,GAAG,mBAAmB,GAAG,KAAK,CAAA;QAC/C,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,KAAK,CAAA;QAEhE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAA;QAE5G,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;IAC7D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,CAAC,CAAC,CAAA;QACrD,OAAO,IAAI,CAAA;IACf,CAAC;AACL,CAAC,CAAA;AAbY,QAAA,qBAAqB,yBAajC"}
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.LSPORTS_NCAA_PERIODS = exports.LSPORTS_AMERICAN_FOOTBALL_PERIODS = exports.LSPORTS_BASEBALL_PERIODS = exports.LSPORTS_BASKETBALL_PERIODS = exports.LSPORTS_SOCCER_PERIODS = void 0;
|
|
7
7
|
exports.LSPORTS_SOCCER_PERIODS = {
|
|
8
|
-
FIRST_HALF: 10, // regular
|
|
9
|
-
SECOND_HALF: 20, // regular
|
|
10
|
-
THIRD_HALF: 25, // extra time // how is this treated?
|
|
8
|
+
FIRST_HALF: 10, // regular 1, = 44 minutes // maximum
|
|
9
|
+
SECOND_HALF: 20, // regular 2, = 45 minutes
|
|
10
|
+
THIRD_HALF: 25, // extra time // how is this treated? // 15 minutes?
|
|
11
11
|
OVERTIME_FIRST_HALF: 30, // extra time is it a full cycle period?
|
|
12
12
|
OVERTIME_SECOND_HALF: 35, // extra time is it a full cycle period?
|
|
13
13
|
PENALTIES: 50, // full cycle, considered 100% or almost 100% game progress
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lsports.periods.js","sourceRoot":"","sources":["../../../../../../src/server/oracle/config/game-periods/providers/lsports.periods.ts"],"names":[],"mappings":";AAAA;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"lsports.periods.js","sourceRoot":"","sources":["../../../../../../src/server/oracle/config/game-periods/providers/lsports.periods.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGU,QAAA,sBAAsB,GAAG;IAClC,UAAU,EAAE,EAAE,EAAE,wCAAwC;IACxD,WAAW,EAAE,EAAE,EAAE,2BAA2B;IAE5C,UAAU,EAAE,EAAE,EAAE,oDAAoD;IACpE,mBAAmB,EAAE,EAAE,EAAE,wCAAwC;IACjE,oBAAoB,EAAE,EAAE,EAAE,wCAAwC;IAClE,SAAS,EAAE,EAAE,EAAE,2DAA2D;IAC1E,IAAI,EAAE,EAAE,EAAE,wBAAwB;IAClC,SAAS,EAAE,GAAG,EAAE,2CAA2C;IAC3D,wBAAwB,EAAE,GAAG,EAAE,2CAA2C;IAC1E,yBAAyB,EAAE,GAAG,EAAE,2CAA2C;CACrE,CAAA;AAGG,QAAA,0BAA0B,GAAG;IACtC,aAAa,EAAE,CAAC,EAAE,UAAU;IAC5B,cAAc,EAAE,CAAC,EAAE,UAAU;IAC7B,aAAa,EAAE,CAAC,EAAE,UAAU;IAC5B,cAAc,EAAE,CAAC,EAAE,UAAU;IAC7B,QAAQ,EAAE,EAAE,EAAE,2DAA2D;IACzE,SAAS,EAAE,GAAG,EAAE,2CAA2C;IAC3D,wBAAwB,EAAE,GAAG,EAAE,2CAA2C;CACpE,CAAA;AAEG,QAAA,wBAAwB,GAAG;IACpC,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,CAAC;IACf,cAAc,EAAE,CAAC;IACjB,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,EAAE;IACjB,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,SAAS,EAAE,GAAG,EAAE,2CAA2C;IAC3D,0BAA0B,EAAE,GAAG,EAAE,2CAA2C;CACtE,CAAA;AAEG,QAAA,iCAAiC,GAAG;IAC7C,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;IACjB,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;IACjB,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,GAAG;IACd,wBAAwB,EAAE,GAAG;CACvB,CAAA;AAEV,sDAAsD;AACzC,QAAA,oBAAoB,GAAG;IAChC,UAAU,EAAE,EAAE;IACd,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,GAAG;IACd,wBAAwB,EAAE,GAAG;IAC7B,QAAQ,EAAE,EAAE;CACN,CAAA"}
|
|
@@ -2,7 +2,30 @@
|
|
|
2
2
|
* OpticOdds provider period constants by sport
|
|
3
3
|
* TODO: Add period mappings when OpticOdds integration is complete
|
|
4
4
|
*/
|
|
5
|
-
export declare const OPTIC_ODDS_SOCCER_PERIODS: {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
export declare const OPTIC_ODDS_SOCCER_PERIODS: {
|
|
6
|
+
readonly FIRST_HALF: 1;
|
|
7
|
+
readonly SECOND_HALF: 2;
|
|
8
|
+
};
|
|
9
|
+
export declare const OPTIC_ODDS_BASKETBALL_PERIODS: {
|
|
10
|
+
readonly FIRST_QUARTER: 1;
|
|
11
|
+
readonly SECOND_QUARTER: 2;
|
|
12
|
+
readonly THIRD_QUARTER: 3;
|
|
13
|
+
readonly FOURTH_QUARTER: 4;
|
|
14
|
+
};
|
|
15
|
+
export declare const OPTIC_ODDS_BASEBALL_PERIODS: {
|
|
16
|
+
readonly FIRST_INNING: 1;
|
|
17
|
+
readonly SECOND_INNING: 2;
|
|
18
|
+
readonly THIRD_INNING: 3;
|
|
19
|
+
readonly FOURTH_INNING: 4;
|
|
20
|
+
readonly FIFTH_INNING: 5;
|
|
21
|
+
readonly SIXTH_INNING: 6;
|
|
22
|
+
readonly SEVENTH_INNING: 7;
|
|
23
|
+
readonly EIGHTH_INNING: 8;
|
|
24
|
+
readonly NINTH_INNING: 9;
|
|
25
|
+
};
|
|
26
|
+
export declare const OPTIC_ODDS_AMERICAN_FOOTBALL_PERIODS: {
|
|
27
|
+
readonly FIRST_QUARTER: 1;
|
|
28
|
+
readonly SECOND_QUARTER: 2;
|
|
29
|
+
readonly THIRD_QUARTER: 3;
|
|
30
|
+
readonly FOURTH_QUARTER: 4;
|
|
31
|
+
};
|
|
@@ -5,8 +5,31 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.OPTIC_ODDS_AMERICAN_FOOTBALL_PERIODS = exports.OPTIC_ODDS_BASEBALL_PERIODS = exports.OPTIC_ODDS_BASKETBALL_PERIODS = exports.OPTIC_ODDS_SOCCER_PERIODS = void 0;
|
|
8
|
-
exports.OPTIC_ODDS_SOCCER_PERIODS = {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
exports.OPTIC_ODDS_SOCCER_PERIODS = {
|
|
9
|
+
FIRST_HALF: 1,
|
|
10
|
+
SECOND_HALF: 2,
|
|
11
|
+
};
|
|
12
|
+
exports.OPTIC_ODDS_BASKETBALL_PERIODS = {
|
|
13
|
+
FIRST_QUARTER: 1,
|
|
14
|
+
SECOND_QUARTER: 2,
|
|
15
|
+
THIRD_QUARTER: 3,
|
|
16
|
+
FOURTH_QUARTER: 4,
|
|
17
|
+
};
|
|
18
|
+
exports.OPTIC_ODDS_BASEBALL_PERIODS = {
|
|
19
|
+
FIRST_INNING: 1,
|
|
20
|
+
SECOND_INNING: 2,
|
|
21
|
+
THIRD_INNING: 3,
|
|
22
|
+
FOURTH_INNING: 4,
|
|
23
|
+
FIFTH_INNING: 5,
|
|
24
|
+
SIXTH_INNING: 6,
|
|
25
|
+
SEVENTH_INNING: 7,
|
|
26
|
+
EIGHTH_INNING: 8,
|
|
27
|
+
NINTH_INNING: 9,
|
|
28
|
+
};
|
|
29
|
+
exports.OPTIC_ODDS_AMERICAN_FOOTBALL_PERIODS = {
|
|
30
|
+
FIRST_QUARTER: 1,
|
|
31
|
+
SECOND_QUARTER: 2,
|
|
32
|
+
THIRD_QUARTER: 3,
|
|
33
|
+
FOURTH_QUARTER: 4,
|
|
34
|
+
};
|
|
12
35
|
//# sourceMappingURL=optic-odds.periods.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optic-odds.periods.js","sourceRoot":"","sources":["../../../../../../src/server/oracle/config/game-periods/providers/optic-odds.periods.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEU,QAAA,yBAAyB,GAAG,
|
|
1
|
+
{"version":3,"file":"optic-odds.periods.js","sourceRoot":"","sources":["../../../../../../src/server/oracle/config/game-periods/providers/optic-odds.periods.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEU,QAAA,yBAAyB,GAAG;IACrC,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,CAAC;CACR,CAAA;AAEG,QAAA,6BAA6B,GAAG;IACzC,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;IACjB,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;CACX,CAAA;AAEG,QAAA,2BAA2B,GAAG;IACvC,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,CAAC;IACf,cAAc,EAAE,CAAC;IACjB,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,CAAC;CACT,CAAA;AAEG,QAAA,oCAAoC,GAAG;IAChD,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;IACjB,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;CACX,CAAA"}
|
|
@@ -3,12 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SportsGamePeriodClockConfig = void 0;
|
|
4
4
|
const client_1 = require("@prisma/client");
|
|
5
5
|
const providers_1 = require("./providers");
|
|
6
|
+
const core_1 = require("../../../../core");
|
|
6
7
|
/**
|
|
7
8
|
* Main configuration for game periods and clock behavior by sport and provider
|
|
8
9
|
*/
|
|
9
10
|
exports.SportsGamePeriodClockConfig = {
|
|
10
11
|
[client_1.SportGroup.Basketball]: {
|
|
11
|
-
|
|
12
|
+
totalPeriodDurationInSeconds: 720, // 12 minutes per quarter
|
|
13
|
+
totalPeriods: 4,
|
|
14
|
+
[core_1.OddsServices.LSPORTS]: {
|
|
12
15
|
sportPeriods: {
|
|
13
16
|
regular: [
|
|
14
17
|
providers_1.LSPORTS_BASKETBALL_PERIODS.FIRST_QUARTER,
|
|
@@ -25,10 +28,24 @@ exports.SportsGamePeriodClockConfig = {
|
|
|
25
28
|
},
|
|
26
29
|
leaguePeriods: null,
|
|
27
30
|
},
|
|
28
|
-
|
|
31
|
+
[core_1.OddsServices.OPTIC_ODDS]: {
|
|
32
|
+
sportPeriods: {
|
|
33
|
+
regular: [
|
|
34
|
+
providers_1.OPTIC_ODDS_BASKETBALL_PERIODS.FIRST_QUARTER,
|
|
35
|
+
providers_1.OPTIC_ODDS_BASKETBALL_PERIODS.SECOND_QUARTER,
|
|
36
|
+
providers_1.OPTIC_ODDS_BASKETBALL_PERIODS.THIRD_QUARTER,
|
|
37
|
+
providers_1.OPTIC_ODDS_BASKETBALL_PERIODS.FOURTH_QUARTER,
|
|
38
|
+
],
|
|
39
|
+
fullCycle: [],
|
|
40
|
+
extraTime: [],
|
|
41
|
+
},
|
|
42
|
+
leaguePeriods: null,
|
|
43
|
+
},
|
|
29
44
|
},
|
|
30
45
|
[client_1.SportGroup.Soccer]: {
|
|
31
|
-
|
|
46
|
+
totalPeriodDurationInSeconds: 2700, // 45 minutes per half
|
|
47
|
+
totalPeriods: 2,
|
|
48
|
+
[core_1.OddsServices.LSPORTS]: {
|
|
32
49
|
sportPeriods: {
|
|
33
50
|
regular: [providers_1.LSPORTS_SOCCER_PERIODS.FIRST_HALF, providers_1.LSPORTS_SOCCER_PERIODS.SECOND_HALF],
|
|
34
51
|
fullCycle: [
|
|
@@ -45,10 +62,19 @@ exports.SportsGamePeriodClockConfig = {
|
|
|
45
62
|
},
|
|
46
63
|
leaguePeriods: null,
|
|
47
64
|
},
|
|
48
|
-
|
|
65
|
+
[core_1.OddsServices.OPTIC_ODDS]: {
|
|
66
|
+
sportPeriods: {
|
|
67
|
+
regular: [providers_1.OPTIC_ODDS_SOCCER_PERIODS.FIRST_HALF, providers_1.OPTIC_ODDS_SOCCER_PERIODS.SECOND_HALF],
|
|
68
|
+
fullCycle: [],
|
|
69
|
+
extraTime: [],
|
|
70
|
+
},
|
|
71
|
+
leaguePeriods: null,
|
|
72
|
+
},
|
|
49
73
|
},
|
|
50
74
|
[client_1.SportGroup.Baseball]: {
|
|
51
|
-
|
|
75
|
+
totalPeriodDurationInSeconds: 1200, // Approximate 20 minutes per inning
|
|
76
|
+
totalPeriods: 9,
|
|
77
|
+
[core_1.OddsServices.LSPORTS]: {
|
|
52
78
|
sportPeriods: {
|
|
53
79
|
regular: [
|
|
54
80
|
providers_1.LSPORTS_BASEBALL_PERIODS.FIRST_INNING,
|
|
@@ -66,10 +92,29 @@ exports.SportsGamePeriodClockConfig = {
|
|
|
66
92
|
},
|
|
67
93
|
leaguePeriods: null,
|
|
68
94
|
},
|
|
69
|
-
|
|
95
|
+
[core_1.OddsServices.OPTIC_ODDS]: {
|
|
96
|
+
sportPeriods: {
|
|
97
|
+
regular: [
|
|
98
|
+
providers_1.OPTIC_ODDS_BASEBALL_PERIODS.FIRST_INNING,
|
|
99
|
+
providers_1.OPTIC_ODDS_BASEBALL_PERIODS.SECOND_INNING,
|
|
100
|
+
providers_1.OPTIC_ODDS_BASEBALL_PERIODS.THIRD_INNING,
|
|
101
|
+
providers_1.OPTIC_ODDS_BASEBALL_PERIODS.FOURTH_INNING,
|
|
102
|
+
providers_1.OPTIC_ODDS_BASEBALL_PERIODS.FIFTH_INNING,
|
|
103
|
+
providers_1.OPTIC_ODDS_BASEBALL_PERIODS.SIXTH_INNING,
|
|
104
|
+
providers_1.OPTIC_ODDS_BASEBALL_PERIODS.SEVENTH_INNING,
|
|
105
|
+
providers_1.OPTIC_ODDS_BASEBALL_PERIODS.EIGHTH_INNING,
|
|
106
|
+
providers_1.OPTIC_ODDS_BASEBALL_PERIODS.NINTH_INNING,
|
|
107
|
+
],
|
|
108
|
+
fullCycle: [],
|
|
109
|
+
extraTime: [],
|
|
110
|
+
},
|
|
111
|
+
leaguePeriods: null,
|
|
112
|
+
},
|
|
70
113
|
},
|
|
71
114
|
[client_1.SportGroup.Football]: {
|
|
72
|
-
|
|
115
|
+
totalPeriodDurationInSeconds: 900, // 15 minutes per quarter
|
|
116
|
+
totalPeriods: 4,
|
|
117
|
+
[core_1.OddsServices.LSPORTS]: {
|
|
73
118
|
sportPeriods: {
|
|
74
119
|
regular: [
|
|
75
120
|
providers_1.LSPORTS_AMERICAN_FOOTBALL_PERIODS.FIRST_QUARTER,
|
|
@@ -85,7 +130,19 @@ exports.SportsGamePeriodClockConfig = {
|
|
|
85
130
|
},
|
|
86
131
|
leaguePeriods: null,
|
|
87
132
|
},
|
|
88
|
-
|
|
133
|
+
[core_1.OddsServices.OPTIC_ODDS]: {
|
|
134
|
+
sportPeriods: {
|
|
135
|
+
regular: [
|
|
136
|
+
providers_1.OPTIC_ODDS_AMERICAN_FOOTBALL_PERIODS.FIRST_QUARTER,
|
|
137
|
+
providers_1.OPTIC_ODDS_AMERICAN_FOOTBALL_PERIODS.SECOND_QUARTER,
|
|
138
|
+
providers_1.OPTIC_ODDS_AMERICAN_FOOTBALL_PERIODS.THIRD_QUARTER,
|
|
139
|
+
providers_1.OPTIC_ODDS_AMERICAN_FOOTBALL_PERIODS.FOURTH_QUARTER,
|
|
140
|
+
],
|
|
141
|
+
fullCycle: [],
|
|
142
|
+
extraTime: [],
|
|
143
|
+
},
|
|
144
|
+
leaguePeriods: null,
|
|
145
|
+
},
|
|
89
146
|
},
|
|
90
147
|
};
|
|
91
148
|
//# sourceMappingURL=sports.config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sports.config.js","sourceRoot":"","sources":["../../../../../src/server/oracle/config/game-periods/sports.config.ts"],"names":[],"mappings":";;;AAAA,2CAA2C;AAE3C,
|
|
1
|
+
{"version":3,"file":"sports.config.js","sourceRoot":"","sources":["../../../../../src/server/oracle/config/game-periods/sports.config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SportGroup } from "@prisma/client";
|
|
2
|
+
import { OddsServices } from "../../../../core";
|
|
2
3
|
/**
|
|
3
4
|
* Period configuration for a specific sport or league
|
|
4
5
|
*/
|
|
@@ -25,8 +26,10 @@ export interface ProviderPeriodConfig {
|
|
|
25
26
|
* Complete period configuration for all providers
|
|
26
27
|
*/
|
|
27
28
|
export interface SportPeriodClockConfig {
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
totalPeriods: number;
|
|
30
|
+
totalPeriodDurationInSeconds: number;
|
|
31
|
+
[OddsServices.LSPORTS]: ProviderPeriodConfig;
|
|
32
|
+
[OddsServices.OPTIC_ODDS]: ProviderPeriodConfig;
|
|
30
33
|
}
|
|
31
34
|
/**
|
|
32
35
|
* Main configuration type mapping sport groups to their period configs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/server/oracle/config/game-periods/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/server/oracle/config/game-periods/types.ts"],"names":[],"mappings":";;AACA,2CAA+C"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import Redis from "ioredis";
|
|
2
|
+
export declare const saveGameProgressToCache: (gameObjectId: string, progressBPS: number, redisClient: Redis) => Promise<void>;
|
|
3
|
+
export declare const getAllGameProgressFromCache: (gameObjectId: string, redisClient: Redis) => Promise<number[]>;
|
|
4
|
+
export declare const getLatestGameProgressFromCache: (gameObjectId: string, redisClient: Redis) => Promise<number | null>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLatestGameProgressFromCache = exports.getAllGameProgressFromCache = exports.saveGameProgressToCache = void 0;
|
|
4
|
+
const cacheKey = `game-progress:test:`;
|
|
5
|
+
const getCacheKey = (gameObjectId) => {
|
|
6
|
+
return `${cacheKey}${gameObjectId}`;
|
|
7
|
+
};
|
|
8
|
+
const saveGameProgressToCache = async (gameObjectId, progressBPS, redisClient) => {
|
|
9
|
+
const cacheKey = getCacheKey(gameObjectId);
|
|
10
|
+
await redisClient.lpush(cacheKey, progressBPS.toString());
|
|
11
|
+
};
|
|
12
|
+
exports.saveGameProgressToCache = saveGameProgressToCache;
|
|
13
|
+
const getAllGameProgressFromCache = async (gameObjectId, redisClient) => {
|
|
14
|
+
const cacheKey = getCacheKey(gameObjectId);
|
|
15
|
+
const results = await redisClient.lrange(cacheKey, 0, -1);
|
|
16
|
+
return results.map((val) => parseInt(val, 10));
|
|
17
|
+
};
|
|
18
|
+
exports.getAllGameProgressFromCache = getAllGameProgressFromCache;
|
|
19
|
+
const getLatestGameProgressFromCache = async (gameObjectId, redisClient) => {
|
|
20
|
+
const cacheKey = getCacheKey(gameObjectId);
|
|
21
|
+
const result = await redisClient.lindex(cacheKey, 0);
|
|
22
|
+
if (result === null)
|
|
23
|
+
return null;
|
|
24
|
+
return parseInt(result, 10);
|
|
25
|
+
};
|
|
26
|
+
exports.getLatestGameProgressFromCache = getLatestGameProgressFromCache;
|
|
27
|
+
//# sourceMappingURL=game.progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game.progress.js","sourceRoot":"","sources":["../../../../src/server/oracle/redis-cache-manager/game.progress.ts"],"names":[],"mappings":";;;AAIA,MAAM,QAAQ,GAAG,qBAAqB,CAAA;AAEtC,MAAM,WAAW,GAAG,CAAC,YAAoB,EAAU,EAAE;IACjD,OAAO,GAAG,QAAQ,GAAG,YAAY,EAAE,CAAA;AACvC,CAAC,CAAA;AAEM,MAAM,uBAAuB,GAAG,KAAK,EAAE,YAAoB,EAAE,WAAmB,EAAE,WAAkB,EAAE,EAAE;IAC3G,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAA;IAC1C,MAAM,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAA;AAC7D,CAAC,CAAA;AAHY,QAAA,uBAAuB,2BAGnC;AAEM,MAAM,2BAA2B,GAAG,KAAK,EAAE,YAAoB,EAAE,WAAkB,EAAqB,EAAE;IAC7G,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAA;IAC1C,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACzD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;AAClD,CAAC,CAAA;AAJY,QAAA,2BAA2B,+BAIvC;AAEM,MAAM,8BAA8B,GAAG,KAAK,EAAE,YAAoB,EAAE,WAAkB,EAA0B,EAAE;IACrH,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;IACpD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAChC,OAAO,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AAC/B,CAAC,CAAA;AALY,QAAA,8BAA8B,kCAK1C"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from "./types";
|
|
2
|
-
export * from "
|
|
2
|
+
export * from "../../../../utils/game_progress/parser";
|
|
@@ -15,5 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./types"), exports);
|
|
18
|
-
__exportStar(require("
|
|
18
|
+
__exportStar(require("../../../../utils/game_progress/parser"), exports);
|
|
19
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/server/oracle/types/providers/game-clock/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAuB;AACvB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/server/oracle/types/providers/game-clock/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAuB;AACvB,yEAAsD"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SportGroup } from "@prisma/client";
|
|
2
|
+
import { OddsServices } from "../../../core";
|
|
3
|
+
export declare const calculateSoccerProgress: (currentPeriod: number, gameClock: string, sportGroup: SportGroup, provider: OddsServices) => number | null;
|
|
4
|
+
export declare const calculateBasketballProgress: (currentPeriod: number, gameClock: string, sportGroup: SportGroup, provider: OddsServices) => number | null;
|
|
5
|
+
export declare const calculateFootballProgress: (currentPeriod: number, gameClock: string, sportGroup: SportGroup, provider: OddsServices) => number | null;
|
|
6
|
+
export declare const calculateBaseballProgress: (currentPeriod: number, gameClock: string, sportGroup: SportGroup, provider: OddsServices) => number | null;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateBaseballProgress = exports.calculateFootballProgress = exports.calculateBasketballProgress = exports.calculateSoccerProgress = void 0;
|
|
4
|
+
const client_1 = require("@prisma/client");
|
|
5
|
+
const game_utils_1 = require("../game_progress/game.utils");
|
|
6
|
+
const parser_1 = require("./parser");
|
|
7
|
+
const oracle_1 = require("../../oracle");
|
|
8
|
+
const core_1 = require("../../../core");
|
|
9
|
+
const PERIOD_MAPPERS = {
|
|
10
|
+
[core_1.OddsServices.LSPORTS]: {
|
|
11
|
+
[client_1.SportGroup.Soccer]: (currentPeriod) => {
|
|
12
|
+
if (currentPeriod === 10)
|
|
13
|
+
return 1;
|
|
14
|
+
if (currentPeriod === 20)
|
|
15
|
+
return 2;
|
|
16
|
+
return null;
|
|
17
|
+
},
|
|
18
|
+
[client_1.SportGroup.Basketball]: (currentPeriod, totalPeriods) => {
|
|
19
|
+
if (currentPeriod >= 1 && currentPeriod <= totalPeriods)
|
|
20
|
+
return currentPeriod;
|
|
21
|
+
return null;
|
|
22
|
+
},
|
|
23
|
+
[client_1.SportGroup.Football]: (currentPeriod, totalPeriods) => {
|
|
24
|
+
if (currentPeriod >= 1 && currentPeriod <= totalPeriods)
|
|
25
|
+
return currentPeriod;
|
|
26
|
+
return null;
|
|
27
|
+
},
|
|
28
|
+
[client_1.SportGroup.Baseball]: (currentPeriod, totalPeriods) => {
|
|
29
|
+
if (currentPeriod >= 1 && currentPeriod <= totalPeriods)
|
|
30
|
+
return currentPeriod;
|
|
31
|
+
return null;
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
[core_1.OddsServices.OPTIC_ODDS]: {
|
|
35
|
+
[client_1.SportGroup.Soccer]: (currentPeriod, totalPeriods) => {
|
|
36
|
+
if (currentPeriod >= 1 && currentPeriod <= totalPeriods)
|
|
37
|
+
return currentPeriod;
|
|
38
|
+
return null;
|
|
39
|
+
},
|
|
40
|
+
[client_1.SportGroup.Basketball]: (currentPeriod, totalPeriods) => {
|
|
41
|
+
if (currentPeriod >= 1 && currentPeriod <= totalPeriods)
|
|
42
|
+
return currentPeriod;
|
|
43
|
+
return null;
|
|
44
|
+
},
|
|
45
|
+
[client_1.SportGroup.Football]: (currentPeriod, totalPeriods) => {
|
|
46
|
+
if (currentPeriod >= 1 && currentPeriod <= totalPeriods)
|
|
47
|
+
return currentPeriod;
|
|
48
|
+
return null;
|
|
49
|
+
},
|
|
50
|
+
[client_1.SportGroup.Baseball]: (currentPeriod, totalPeriods) => {
|
|
51
|
+
if (currentPeriod >= 1 && currentPeriod <= totalPeriods)
|
|
52
|
+
return currentPeriod;
|
|
53
|
+
return null;
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
const calculateGameProgress = (currentPeriod, gameClock, sportGroup, provider) => {
|
|
58
|
+
const config = oracle_1.SportsGamePeriodClockConfig[sportGroup];
|
|
59
|
+
if (!config?.[provider].sportPeriods.regular.includes(currentPeriod))
|
|
60
|
+
return null;
|
|
61
|
+
const periodMapper = PERIOD_MAPPERS[provider]?.[sportGroup];
|
|
62
|
+
if (!periodMapper)
|
|
63
|
+
return null;
|
|
64
|
+
const period = periodMapper(currentPeriod, config.totalPeriods);
|
|
65
|
+
if (period === null)
|
|
66
|
+
return null;
|
|
67
|
+
const gameClockInSeconds = (0, parser_1.parseGameClockToSeconds)(gameClock);
|
|
68
|
+
if (gameClockInSeconds === null)
|
|
69
|
+
return null;
|
|
70
|
+
return (0, game_utils_1.getGameProgressBPS)(gameClockInSeconds, config.totalPeriodDurationInSeconds, config.totalPeriods, period, sportGroup);
|
|
71
|
+
};
|
|
72
|
+
const calculateSoccerProgress = (currentPeriod, gameClock, sportGroup, provider) => {
|
|
73
|
+
if (sportGroup !== client_1.SportGroup.Soccer)
|
|
74
|
+
throw new Error("Sport group is not soccer");
|
|
75
|
+
return calculateGameProgress(currentPeriod, gameClock, sportGroup, provider);
|
|
76
|
+
};
|
|
77
|
+
exports.calculateSoccerProgress = calculateSoccerProgress;
|
|
78
|
+
const calculateBasketballProgress = (currentPeriod, gameClock, sportGroup, provider) => {
|
|
79
|
+
if (sportGroup !== client_1.SportGroup.Basketball)
|
|
80
|
+
throw new Error("Sport group is not basketball");
|
|
81
|
+
return calculateGameProgress(currentPeriod, gameClock, sportGroup, provider);
|
|
82
|
+
};
|
|
83
|
+
exports.calculateBasketballProgress = calculateBasketballProgress;
|
|
84
|
+
const calculateFootballProgress = (currentPeriod, gameClock, sportGroup, provider) => {
|
|
85
|
+
if (sportGroup !== client_1.SportGroup.Football)
|
|
86
|
+
throw new Error("Sport group is not football");
|
|
87
|
+
return calculateGameProgress(currentPeriod, gameClock, sportGroup, provider);
|
|
88
|
+
};
|
|
89
|
+
exports.calculateFootballProgress = calculateFootballProgress;
|
|
90
|
+
const calculateBaseballProgress = (currentPeriod, gameClock, sportGroup, provider) => {
|
|
91
|
+
if (sportGroup !== client_1.SportGroup.Baseball)
|
|
92
|
+
throw new Error("Sport group is not baseball");
|
|
93
|
+
return calculateGameProgress(currentPeriod, gameClock, sportGroup, provider);
|
|
94
|
+
};
|
|
95
|
+
exports.calculateBaseballProgress = calculateBaseballProgress;
|
|
96
|
+
//# sourceMappingURL=caclulate.game.progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caclulate.game.progress.js","sourceRoot":"","sources":["../../../../src/server/utils/game_progress/caclulate.game.progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getGameProgressBPS = void 0;
|
|
4
|
+
const client_1 = require("@prisma/client");
|
|
5
|
+
const calculateGameProgressBPSWithPeriodsOnly = (period, totalPeriods) => {
|
|
6
|
+
if (period > totalPeriods)
|
|
7
|
+
return 1e4;
|
|
8
|
+
const progress = period / totalPeriods;
|
|
9
|
+
return Math.round(progress * 1e4);
|
|
10
|
+
};
|
|
11
|
+
//{ totalPeriods: 2, totalPeriodDurationInSeconds: 45 * 60 },
|
|
12
|
+
// gameClock: '57:20',
|
|
13
|
+
//levr-v1-dev-oracle-core | gamePeriod: 20,
|
|
14
|
+
const calculateGameProgressBPS = (elapsedSeconds, totalPeriodDurationInSeconds, totalPeriods, period) => {
|
|
15
|
+
if (totalPeriodDurationInSeconds === 0)
|
|
16
|
+
return 0;
|
|
17
|
+
if (elapsedSeconds > totalPeriodDurationInSeconds)
|
|
18
|
+
elapsedSeconds = totalPeriodDurationInSeconds;
|
|
19
|
+
const progress = elapsedSeconds / totalPeriodDurationInSeconds;
|
|
20
|
+
const periodsPassed = period - 1;
|
|
21
|
+
const pastProgress = calculateGameProgressBPSWithPeriodsOnly(periodsPassed, totalPeriods);
|
|
22
|
+
const currentPeriodProgress = (progress * 1e4) / totalPeriods;
|
|
23
|
+
const value = Math.round(pastProgress + currentPeriodProgress);
|
|
24
|
+
//TODO: revise time tracking
|
|
25
|
+
if (value > 1e4)
|
|
26
|
+
return 1e4;
|
|
27
|
+
if (value < 0)
|
|
28
|
+
return 0;
|
|
29
|
+
return value;
|
|
30
|
+
};
|
|
31
|
+
// Example: { totalPeriods: 2, totalPeriodDurationInSeconds: 45 * 60 }, gameClock: '57:20', period: 2
|
|
32
|
+
// gameClock is cumulative (57:20 = 57 mins into game, which is 12:20 into period 2)
|
|
33
|
+
// Expected: elapsedInPeriod = 3440 - 2700 = 740 seconds → ~63.7% game progress
|
|
34
|
+
const calculateGameProgressBPSWithGameClockCountUp = (gameClock, totalPeriodDurationInSeconds, totalPeriods, period) => {
|
|
35
|
+
const cumulativeElapsedSeconds = gameClock;
|
|
36
|
+
if (cumulativeElapsedSeconds === null)
|
|
37
|
+
return null;
|
|
38
|
+
// Subtract time from previous periods since gameClock is cumulative
|
|
39
|
+
const previousPeriodsSeconds = (period - 1) * totalPeriodDurationInSeconds;
|
|
40
|
+
const elapsedSecondsInCurrentPeriod = cumulativeElapsedSeconds - previousPeriodsSeconds;
|
|
41
|
+
return calculateGameProgressBPS(elapsedSecondsInCurrentPeriod, totalPeriodDurationInSeconds, totalPeriods, period);
|
|
42
|
+
};
|
|
43
|
+
const calculateGameProgressBPSWithGameClockCountDown = (gameClock, totalPeriodDurationInSeconds, totalPeriods, period) => {
|
|
44
|
+
const remainingSeconds = gameClock;
|
|
45
|
+
if (remainingSeconds === null)
|
|
46
|
+
return null;
|
|
47
|
+
const elapsedSeconds = totalPeriodDurationInSeconds - remainingSeconds;
|
|
48
|
+
return calculateGameProgressBPS(elapsedSeconds, totalPeriodDurationInSeconds, totalPeriods, period);
|
|
49
|
+
};
|
|
50
|
+
const getGameProgressBPS = (gameClock, totalPeriodDurationInSeconds, period, totalPeriods, sportGroup) => {
|
|
51
|
+
switch (sportGroup) {
|
|
52
|
+
case client_1.SportGroup.Soccer:
|
|
53
|
+
return calculateGameProgressBPSWithGameClockCountUp(gameClock, totalPeriodDurationInSeconds, totalPeriods, period);
|
|
54
|
+
case client_1.SportGroup.Basketball:
|
|
55
|
+
return calculateGameProgressBPSWithGameClockCountDown(gameClock, totalPeriodDurationInSeconds, totalPeriods, period);
|
|
56
|
+
case client_1.SportGroup.Football:
|
|
57
|
+
return calculateGameProgressBPSWithGameClockCountDown(gameClock, totalPeriodDurationInSeconds, totalPeriods, period);
|
|
58
|
+
case client_1.SportGroup.Baseball:
|
|
59
|
+
return calculateGameProgressBPSWithPeriodsOnly(period, totalPeriods);
|
|
60
|
+
default:
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
exports.getGameProgressBPS = getGameProgressBPS;
|
|
65
|
+
//# sourceMappingURL=game.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game.utils.js","sourceRoot":"","sources":["../../../../src/server/utils/game_progress/game.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { SportGroup } from "@prisma/client";
|
|
2
|
+
export declare const calculateSoccerProgress: (currentPeriod: number, gameClock: string, sportGroup: SportGroup) => number | null;
|
|
3
|
+
export declare const calculateBasketballProgress: (currentPeriod: number, gameClock: string, sportGroup: SportGroup) => number | null;
|
|
4
|
+
export declare const calculateFootballProgress: (currentPeriod: number, gameClock: string, sportGroup: SportGroup) => number | null;
|
|
5
|
+
export declare const calculateBaseballProgress: (currentPeriod: number, gameClock: string, sportGroup: SportGroup) => number | null;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateBaseballProgress = exports.calculateFootballProgress = exports.calculateBasketballProgress = exports.calculateSoccerProgress = void 0;
|
|
4
|
+
const client_1 = require("@prisma/client");
|
|
5
|
+
const game_utils_1 = require("../game_progress/game.utils");
|
|
6
|
+
const parser_1 = require("./parser");
|
|
7
|
+
const oracle_1 = require("../../oracle");
|
|
8
|
+
// identify the period, match it to the equivalent levr period
|
|
9
|
+
// then identify the clock, maket sure the clock is convert to seconds
|
|
10
|
+
// then calculate the progress based on that
|
|
11
|
+
// 1st half 0-45 minutes
|
|
12
|
+
// 2nd half 46-90 minutes
|
|
13
|
+
// assumptions, use only regular time to calculate progress
|
|
14
|
+
// extra time 91-105 minutes
|
|
15
|
+
// extra time 106-120 minutes
|
|
16
|
+
// penalties 121 minutes +
|
|
17
|
+
// we want seconds for game clock here
|
|
18
|
+
// calculate for soccer
|
|
19
|
+
const calculateSoccerProgress = (currentPeriod, gameClock, sportGroup) => {
|
|
20
|
+
// Implementation here
|
|
21
|
+
if (sportGroup !== client_1.SportGroup.Soccer)
|
|
22
|
+
throw new Error("Sport group is not soccer");
|
|
23
|
+
let config = oracle_1.SportsGamePeriodClockConfig[sportGroup];
|
|
24
|
+
if (!config)
|
|
25
|
+
return null;
|
|
26
|
+
const period = currentPeriod === 10 ? 1 : currentPeriod === 20 ? 2 : currentPeriod > 20 ? config.totalPeriods + 1 : 0;
|
|
27
|
+
if (period === 0)
|
|
28
|
+
return null;
|
|
29
|
+
const gameClockInSeconds = (0, parser_1.parseGameClockToSeconds)(gameClock);
|
|
30
|
+
if (gameClockInSeconds === null)
|
|
31
|
+
return null;
|
|
32
|
+
return (0, game_utils_1.getGameProgressBPS)(gameClockInSeconds, config.totalPeriodDurationInSeconds, config.totalPeriods, period, sportGroup);
|
|
33
|
+
};
|
|
34
|
+
exports.calculateSoccerProgress = calculateSoccerProgress;
|
|
35
|
+
// parse game clock to seconds
|
|
36
|
+
const calculateBasketballProgress = (currentPeriod, gameClock, sportGroup) => {
|
|
37
|
+
// Implementation here
|
|
38
|
+
if (sportGroup !== client_1.SportGroup.Basketball)
|
|
39
|
+
throw new Error("Sport group is not basketball");
|
|
40
|
+
let config = oracle_1.SportsGamePeriodClockConfig[sportGroup];
|
|
41
|
+
if (!config)
|
|
42
|
+
return null;
|
|
43
|
+
const period = currentPeriod >= 1 && currentPeriod <= 4 ? currentPeriod : currentPeriod === 40 ? config.totalPeriods + 1 : 0;
|
|
44
|
+
if (period === 0)
|
|
45
|
+
return null;
|
|
46
|
+
const gameClockInSeconds = (0, parser_1.parseGameClockToSeconds)(gameClock);
|
|
47
|
+
if (gameClockInSeconds === null)
|
|
48
|
+
return null;
|
|
49
|
+
return (0, game_utils_1.getGameProgressBPS)(gameClockInSeconds, config.totalPeriodDurationInSeconds, config.totalPeriods, period, sportGroup);
|
|
50
|
+
};
|
|
51
|
+
exports.calculateBasketballProgress = calculateBasketballProgress;
|
|
52
|
+
const calculateFootballProgress = (currentPeriod, gameClock, sportGroup) => {
|
|
53
|
+
// Implementation here
|
|
54
|
+
if (sportGroup !== client_1.SportGroup.Football)
|
|
55
|
+
throw new Error("Sport group is not football");
|
|
56
|
+
let config = oracle_1.SportsGamePeriodClockConfig[sportGroup];
|
|
57
|
+
if (!config)
|
|
58
|
+
return null;
|
|
59
|
+
const period = currentPeriod >= 1 && currentPeriod <= 4 ? currentPeriod : currentPeriod === 40 ? config.totalPeriods + 1 : 0;
|
|
60
|
+
if (period === 0)
|
|
61
|
+
return null;
|
|
62
|
+
const gameClockInSeconds = (0, parser_1.parseGameClockToSeconds)(gameClock);
|
|
63
|
+
if (gameClockInSeconds === null)
|
|
64
|
+
return null;
|
|
65
|
+
return (0, game_utils_1.getGameProgressBPS)(gameClockInSeconds, config.totalPeriodDurationInSeconds, config.totalPeriods, period, sportGroup);
|
|
66
|
+
};
|
|
67
|
+
exports.calculateFootballProgress = calculateFootballProgress;
|
|
68
|
+
const calculateBaseballProgress = (currentPeriod, gameClock, sportGroup) => {
|
|
69
|
+
// Implementation here
|
|
70
|
+
if (sportGroup !== client_1.SportGroup.Baseball)
|
|
71
|
+
throw new Error("Sport group is not baseball");
|
|
72
|
+
const config = oracle_1.SportsGamePeriodClockConfig[sportGroup];
|
|
73
|
+
if (!config)
|
|
74
|
+
return null;
|
|
75
|
+
const period = currentPeriod >= 1 && currentPeriod <= 9 ? currentPeriod : currentPeriod === 40 ? config.totalPeriods + 1 : 0;
|
|
76
|
+
if (period === 0)
|
|
77
|
+
return null;
|
|
78
|
+
const gameClockInSeconds = (0, parser_1.parseGameClockToSeconds)(gameClock);
|
|
79
|
+
if (gameClockInSeconds === null)
|
|
80
|
+
return null;
|
|
81
|
+
return (0, game_utils_1.getGameProgressBPS)(gameClockInSeconds, config.totalPeriodDurationInSeconds, config.totalPeriods, period, sportGroup);
|
|
82
|
+
};
|
|
83
|
+
exports.calculateBaseballProgress = calculateBaseballProgress;
|
|
84
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/utils/game_progress/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GameClockPattern } from "
|
|
1
|
+
import { GameClockPattern } from "../../oracle/types/providers/game-clock/types";
|
|
2
2
|
/**
|
|
3
3
|
* Detect the pattern of a game clock string
|
|
4
4
|
* @param gameClock - The game clock string to analyze
|
|
@@ -12,9 +12,3 @@ export declare const detectGameClockPattern: (gameClock: string) => GameClockPat
|
|
|
12
12
|
* @returns Number of seconds, or null if invalid format
|
|
13
13
|
*/
|
|
14
14
|
export declare const parseGameClockToSeconds: (gameClock: string) => number | null;
|
|
15
|
-
/**
|
|
16
|
-
* Format seconds to a clock string (MM:SS)
|
|
17
|
-
* @param totalSeconds - Total seconds to format
|
|
18
|
-
* @returns Formatted clock string
|
|
19
|
-
*/
|
|
20
|
-
export declare const formatSecondsToGameClock: (totalSeconds: number) => string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const types_1 = require("
|
|
3
|
+
exports.parseGameClockToSeconds = exports.detectGameClockPattern = void 0;
|
|
4
|
+
const types_1 = require("../../oracle/types/providers/game-clock/types");
|
|
5
5
|
/**
|
|
6
6
|
* Regex patterns for different game clock formats
|
|
7
7
|
*/
|
|
@@ -90,15 +90,4 @@ const parseGameClockToSeconds = (gameClock) => {
|
|
|
90
90
|
return null;
|
|
91
91
|
};
|
|
92
92
|
exports.parseGameClockToSeconds = parseGameClockToSeconds;
|
|
93
|
-
/**
|
|
94
|
-
* Format seconds to a clock string (MM:SS)
|
|
95
|
-
* @param totalSeconds - Total seconds to format
|
|
96
|
-
* @returns Formatted clock string
|
|
97
|
-
*/
|
|
98
|
-
const formatSecondsToGameClock = (totalSeconds) => {
|
|
99
|
-
const minutes = Math.floor(totalSeconds / 60);
|
|
100
|
-
const seconds = totalSeconds % 60;
|
|
101
|
-
return `${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
|
|
102
|
-
};
|
|
103
|
-
exports.formatSecondsToGameClock = formatSecondsToGameClock;
|
|
104
93
|
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../src/server/utils/game_progress/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./express.utils"), exports);
|
|
18
18
|
__exportStar(require("./tracing"), exports);
|
|
19
|
+
__exportStar(require("./game_progress"), exports);
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAA+B;AAC/B,4CAAyB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAA+B;AAC/B,4CAAyB;AACzB,kDAA+B"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../../../src/server/oracle/types/providers/game-clock/parser.ts"],"names":[],"mappings":"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"}
|