@openora/core 0.4.1-canary.41 → 0.4.1-canary.42
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/.tsbuildinfo +1 -1
- package/dist/admin-console/__tests__/backoffice.router.test.js +13 -1
- package/dist/admin-console/__tests__/backoffice.router.test.js.map +1 -1
- package/dist/admin-console/__tests__/backoffice.service.test.js +110 -10
- package/dist/admin-console/__tests__/backoffice.service.test.js.map +1 -1
- package/dist/admin-console/contract/index.d.ts +164 -0
- package/dist/admin-console/contract/index.d.ts.map +1 -1
- package/dist/admin-console/contract/index.js +66 -1
- package/dist/admin-console/contract/index.js.map +1 -1
- package/dist/admin-console/plugin.d.ts.map +1 -1
- package/dist/admin-console/plugin.js +3 -3
- package/dist/admin-console/plugin.js.map +1 -1
- package/dist/admin-console/router/index.d.ts +64 -0
- package/dist/admin-console/router/index.d.ts.map +1 -1
- package/dist/admin-console/router/index.js +8 -0
- package/dist/admin-console/router/index.js.map +1 -1
- package/dist/admin-console/service/backoffice.service.d.ts +14 -3
- package/dist/admin-console/service/backoffice.service.d.ts.map +1 -1
- package/dist/admin-console/service/backoffice.service.js +29 -1
- package/dist/admin-console/service/backoffice.service.js.map +1 -1
- package/dist/casino/gaming/__tests__/admin-reporting.test.d.ts +2 -0
- package/dist/casino/gaming/__tests__/admin-reporting.test.d.ts.map +1 -0
- package/dist/casino/gaming/__tests__/admin-reporting.test.js +87 -0
- package/dist/casino/gaming/__tests__/admin-reporting.test.js.map +1 -0
- package/dist/casino/gaming/admin-reporting.d.ts +8 -0
- package/dist/casino/gaming/admin-reporting.d.ts.map +1 -0
- package/dist/casino/gaming/admin-reporting.js +62 -0
- package/dist/casino/gaming/admin-reporting.js.map +1 -0
- package/dist/casino/gaming/contract/index.d.ts +16 -0
- package/dist/casino/gaming/contract/index.d.ts.map +1 -1
- package/dist/casino/gaming/contract/index.js +3 -1
- package/dist/casino/gaming/contract/index.js.map +1 -1
- package/dist/casino/gaming/drizzle/migrations/0002_yummy_lifeguard.sql +4 -0
- package/dist/casino/gaming/drizzle/migrations/meta/0002_snapshot.json +237 -0
- package/dist/casino/gaming/drizzle/migrations/meta/_journal.json +7 -0
- package/dist/casino/gaming/plugin.d.ts.map +1 -1
- package/dist/casino/gaming/plugin.js +3 -1
- package/dist/casino/gaming/plugin.js.map +1 -1
- package/dist/casino/gaming/router/index.d.ts +10 -0
- package/dist/casino/gaming/router/index.d.ts.map +1 -1
- package/dist/casino/gaming/schema/index.d.ts +18 -0
- package/dist/casino/gaming/schema/index.d.ts.map +1 -1
- package/dist/casino/gaming/schema/index.js +11 -1
- package/dist/casino/gaming/schema/index.js.map +1 -1
- package/dist/casino/gaming/service/gaming.service.d.ts +2 -0
- package/dist/casino/gaming/service/gaming.service.d.ts.map +1 -1
- package/dist/casino/gaming/service/gaming.service.js +1 -0
- package/dist/casino/gaming/service/gaming.service.js.map +1 -1
- package/dist/contracts/adapters/admin-game-reporting.d.ts +25 -0
- package/dist/contracts/adapters/admin-game-reporting.d.ts.map +1 -0
- package/dist/contracts/adapters/admin-game-reporting.js +15 -0
- package/dist/contracts/adapters/admin-game-reporting.js.map +1 -0
- package/dist/contracts/adapters/admin-player-activity.d.ts +29 -0
- package/dist/contracts/adapters/admin-player-activity.d.ts.map +1 -0
- package/dist/contracts/adapters/admin-player-activity.js +3 -0
- package/dist/contracts/adapters/admin-player-activity.js.map +1 -0
- package/dist/contracts/adapters/index.d.ts +4 -0
- package/dist/contracts/adapters/index.d.ts.map +1 -1
- package/dist/contracts/adapters/index.js +2 -0
- package/dist/contracts/adapters/index.js.map +1 -1
- package/dist/contracts/schemas/common.d.ts +2 -0
- package/dist/contracts/schemas/common.d.ts.map +1 -1
- package/dist/contracts/schemas/common.js +6 -0
- package/dist/contracts/schemas/common.js.map +1 -1
- package/dist/contracts/schemas/game.d.ts +9 -0
- package/dist/contracts/schemas/game.d.ts.map +1 -0
- package/dist/contracts/schemas/game.js +10 -0
- package/dist/contracts/schemas/game.js.map +1 -0
- package/dist/contracts/schemas/index.d.ts +1 -0
- package/dist/contracts/schemas/index.d.ts.map +1 -1
- package/dist/contracts/schemas/index.js +1 -0
- package/dist/contracts/schemas/index.js.map +1 -1
- package/dist/iam/__tests__/admin-player-activity.test.d.ts +2 -0
- package/dist/iam/__tests__/admin-player-activity.test.d.ts.map +1 -0
- package/dist/iam/__tests__/admin-player-activity.test.js +58 -0
- package/dist/iam/__tests__/admin-player-activity.test.js.map +1 -0
- package/dist/iam/adapters/admin-player-activity.d.ts +10 -0
- package/dist/iam/adapters/admin-player-activity.d.ts.map +1 -0
- package/dist/iam/adapters/admin-player-activity.js +99 -0
- package/dist/iam/adapters/admin-player-activity.js.map +1 -0
- package/dist/iam/plugin.d.ts.map +1 -1
- package/dist/iam/plugin.js +3 -1
- package/dist/iam/plugin.js.map +1 -1
- package/dist/iam/service/iam.service.d.ts +1 -1
- package/package.json +1 -1
|
@@ -205,5 +205,69 @@ export declare function createBackofficeRouter(backofficeService: BackofficeServ
|
|
|
205
205
|
reviewedAt: import("zod").ZodNullable<import("zod").ZodISODateTime>;
|
|
206
206
|
reviewReason: import("zod").ZodNullable<import("zod").ZodString>;
|
|
207
207
|
}, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
|
|
208
|
+
getGamePerformance: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<OssContext & Record<never, never>, OssContext & Record<never, never>, OssContext>, OssContext, import("zod").ZodObject<{
|
|
209
|
+
gameType: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
210
|
+
original: "original";
|
|
211
|
+
casino: "casino";
|
|
212
|
+
sportsbook: "sportsbook";
|
|
213
|
+
}>>;
|
|
214
|
+
dateFrom: import("zod").ZodOptional<import("zod").ZodISODateTime>;
|
|
215
|
+
dateTo: import("zod").ZodOptional<import("zod").ZodISODateTime>;
|
|
216
|
+
sortBy: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
217
|
+
name: "name";
|
|
218
|
+
gameType: "gameType";
|
|
219
|
+
volume: "volume";
|
|
220
|
+
revenue: "revenue";
|
|
221
|
+
uniquePlayers: "uniquePlayers";
|
|
222
|
+
roundsPlayed: "roundsPlayed";
|
|
223
|
+
}>>;
|
|
224
|
+
sortDir: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
225
|
+
asc: "asc";
|
|
226
|
+
desc: "desc";
|
|
227
|
+
}>>;
|
|
228
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodArray<import("zod").ZodObject<{
|
|
229
|
+
gameId: import("zod").ZodUUID;
|
|
230
|
+
name: import("zod").ZodString;
|
|
231
|
+
gameType: import("zod").ZodEnum<{
|
|
232
|
+
original: "original";
|
|
233
|
+
casino: "casino";
|
|
234
|
+
sportsbook: "sportsbook";
|
|
235
|
+
}>;
|
|
236
|
+
volume: import("zod").ZodString;
|
|
237
|
+
revenue: import("zod").ZodString;
|
|
238
|
+
uniquePlayers: import("zod").ZodNumber;
|
|
239
|
+
roundsPlayed: import("zod").ZodNumber;
|
|
240
|
+
}, import("zod/v4/core").$strip>>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
|
|
241
|
+
getPlayerActivity: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<OssContext & Record<never, never>, OssContext & Record<never, never>, OssContext>, OssContext, import("zod").ZodObject<{
|
|
242
|
+
dateFrom: import("zod").ZodOptional<import("zod").ZodISODateTime>;
|
|
243
|
+
dateTo: import("zod").ZodOptional<import("zod").ZodISODateTime>;
|
|
244
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
245
|
+
registrationsOverTime: import("zod").ZodArray<import("zod").ZodObject<{
|
|
246
|
+
date: import("zod").ZodISODate;
|
|
247
|
+
registrations: import("zod").ZodNumber;
|
|
248
|
+
}, import("zod/v4/core").$strip>>;
|
|
249
|
+
activeUsersTrend: import("zod").ZodArray<import("zod").ZodObject<{
|
|
250
|
+
date: import("zod").ZodISODate;
|
|
251
|
+
dau: import("zod").ZodNumber;
|
|
252
|
+
wau: import("zod").ZodNumber;
|
|
253
|
+
mau: import("zod").ZodNumber;
|
|
254
|
+
}, import("zod/v4/core").$strip>>;
|
|
255
|
+
retention: import("zod").ZodObject<{
|
|
256
|
+
sevenDay: import("zod").ZodArray<import("zod").ZodObject<{
|
|
257
|
+
cohortDate: import("zod").ZodISODate;
|
|
258
|
+
cohortSize: import("zod").ZodNumber;
|
|
259
|
+
returned: import("zod").ZodNumber;
|
|
260
|
+
returnRate: import("zod").ZodNumber;
|
|
261
|
+
isComplete: import("zod").ZodBoolean;
|
|
262
|
+
}, import("zod/v4/core").$strip>>;
|
|
263
|
+
thirtyDay: import("zod").ZodArray<import("zod").ZodObject<{
|
|
264
|
+
cohortDate: import("zod").ZodISODate;
|
|
265
|
+
cohortSize: import("zod").ZodNumber;
|
|
266
|
+
returned: import("zod").ZodNumber;
|
|
267
|
+
returnRate: import("zod").ZodNumber;
|
|
268
|
+
isComplete: import("zod").ZodBoolean;
|
|
269
|
+
}, import("zod/v4/core").$strip>>;
|
|
270
|
+
}, import("zod/v4/core").$strip>;
|
|
271
|
+
}, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
|
|
208
272
|
};
|
|
209
273
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/admin-console/router/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAa,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EACL,iBAAiB,EAGlB,MAAM,kCAAkC,CAAC;AAE1C,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,cAAc
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/admin-console/router/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAa,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EACL,iBAAiB,EAGlB,MAAM,kCAAkC,CAAC;AAE1C,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmFtB"}
|
|
@@ -54,6 +54,14 @@ export function createBackofficeRouter(backofficeService, adminGuard, audit) {
|
|
|
54
54
|
await adminGuard.assert(context, 'transaction', 'view');
|
|
55
55
|
return mapErrors({ NOT_FOUND: TransactionNotFoundError }, () => backofficeService.getTransaction(input.id));
|
|
56
56
|
}),
|
|
57
|
+
getGamePerformance: os.getGamePerformance.handler(async ({ input, context }) => {
|
|
58
|
+
await adminGuard.assert(context, 'report', 'view');
|
|
59
|
+
return backofficeService.getGamePerformance(input);
|
|
60
|
+
}),
|
|
61
|
+
getPlayerActivity: os.getPlayerActivity.handler(async ({ input, context }) => {
|
|
62
|
+
await adminGuard.assert(context, 'report', 'view');
|
|
63
|
+
return backofficeService.getPlayerActivity(input);
|
|
64
|
+
}),
|
|
57
65
|
});
|
|
58
66
|
}
|
|
59
67
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/admin-console/router/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/admin-console/router/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import type { AdminUserDirectory, AdminUserListOptions, AdminUserRow, AdminWalletReporting, User, UserRole, ClientMeta } from '@openora/core/contracts';
|
|
2
|
-
import type { TransactionFilter } from '../contract/index.js';
|
|
1
|
+
import type { AdminGameReporting, AdminPlayerActivity, AdminUserDirectory, AdminUserListOptions, AdminUserRow, AdminWalletReporting, User, UserRole, ClientMeta } from '@openora/core/contracts';
|
|
2
|
+
import type { GamePerformanceFilter, PlayerActivityFilter, TransactionFilter } from '../contract/index.js';
|
|
3
3
|
export declare const UserNotFoundError: new (id: string) => Error;
|
|
4
4
|
export declare const TransactionNotFoundError: new (id: string) => Error;
|
|
5
5
|
export declare class BackofficeService {
|
|
6
6
|
private readonly users;
|
|
7
7
|
private readonly reporting;
|
|
8
|
-
|
|
8
|
+
private readonly gameReporting;
|
|
9
|
+
private readonly playerActivity;
|
|
10
|
+
constructor(users: AdminUserDirectory, reporting: AdminWalletReporting, gameReporting: AdminGameReporting, playerActivity: AdminPlayerActivity);
|
|
9
11
|
getStats(): Promise<{
|
|
10
12
|
totalUsers: number;
|
|
11
13
|
activeUsers: number;
|
|
@@ -59,5 +61,14 @@ export declare class BackofficeService {
|
|
|
59
61
|
reviewedAt: string;
|
|
60
62
|
}>;
|
|
61
63
|
private lookupPlayerMap;
|
|
64
|
+
getGamePerformance(filter: GamePerformanceFilter): Promise<import("@openora/core/contracts").GamePerformanceRow[]>;
|
|
65
|
+
getPlayerActivity(filter: PlayerActivityFilter): Promise<{
|
|
66
|
+
registrationsOverTime: import("@openora/core/contracts").RegistrationsOverTimePoint[];
|
|
67
|
+
activeUsersTrend: import("@openora/core/contracts").ActiveUsersTrendPoint[];
|
|
68
|
+
retention: {
|
|
69
|
+
sevenDay: import("@openora/core/contracts").RetentionCohortRow[];
|
|
70
|
+
thirtyDay: import("@openora/core/contracts").RetentionCohortRow[];
|
|
71
|
+
};
|
|
72
|
+
}>;
|
|
62
73
|
}
|
|
63
74
|
//# sourceMappingURL=backoffice.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backoffice.service.d.ts","sourceRoot":"","sources":["../../../src/admin-console/service/backoffice.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"backoffice.service.d.ts","sourceRoot":"","sources":["../../../src/admin-console/service/backoffice.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EAInB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,oBAAoB,EACpB,IAAI,EACJ,QAAQ,EACR,UAAU,EACX,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,iBAAiB,2BAA4B,CAAC;AAC3D,eAAO,MAAM,wBAAwB,2BAAmC,CAAC;AAsBzE,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAHd,KAAK,EAAE,kBAAkB,EACzB,SAAS,EAAE,oBAAoB,EAC/B,aAAa,EAAE,kBAAkB,EACjC,cAAc,EAAE,mBAAmB;IAGhD,QAAQ;;;;;;;IAWR,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,oBAAoB;;;;;;IAK1E,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;IAQ1B,UAAU,CACd,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAClB,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;KAAE,EAC7C,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EACnB,IAAI,CAAC,EAAE,UAAU;IASb,gBAAgB,CAAC,OAAO,EAAE,iBAAiB;;;;;;;;;;;;;;;;IAwD3C,cAAc,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;YASjB,eAAe;IAWvB,kBAAkB,CAAC,MAAM,EAAE,qBAAqB;IAUhD,iBAAiB,CAAC,MAAM,EAAE,oBAAoB;;;;;;;;CAarD"}
|
|
@@ -21,9 +21,13 @@ function toAdminTransactionDetail(r, player) {
|
|
|
21
21
|
export class BackofficeService {
|
|
22
22
|
users;
|
|
23
23
|
reporting;
|
|
24
|
-
|
|
24
|
+
gameReporting;
|
|
25
|
+
playerActivity;
|
|
26
|
+
constructor(users, reporting, gameReporting, playerActivity) {
|
|
25
27
|
this.users = users;
|
|
26
28
|
this.reporting = reporting;
|
|
29
|
+
this.gameReporting = gameReporting;
|
|
30
|
+
this.playerActivity = playerActivity;
|
|
27
31
|
}
|
|
28
32
|
async getStats() {
|
|
29
33
|
const [totalUsers, totals] = await Promise.all([this.users.count(), this.reporting.totals()]);
|
|
@@ -107,5 +111,29 @@ export class BackofficeService {
|
|
|
107
111
|
const summaries = await this.users.lookupPlayers(unique);
|
|
108
112
|
return new Map(summaries.map((s) => [s.userId, s]));
|
|
109
113
|
}
|
|
114
|
+
// The port's row shape already matches GamePerformanceSchema field-for-field (no
|
|
115
|
+
// Date/Decimal to serialize - volume/revenue are already decimal strings) - no mapping.
|
|
116
|
+
async getGamePerformance(filter) {
|
|
117
|
+
return this.gameReporting.listGamePerformance({
|
|
118
|
+
dateFrom: filter.dateFrom ? new Date(filter.dateFrom) : undefined,
|
|
119
|
+
dateTo: filter.dateTo ? new Date(filter.dateTo) : undefined,
|
|
120
|
+
gameType: filter.gameType,
|
|
121
|
+
sortBy: filter.sortBy,
|
|
122
|
+
sortDir: filter.sortDir,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
async getPlayerActivity(filter) {
|
|
126
|
+
const portFilter = {
|
|
127
|
+
dateFrom: filter.dateFrom ? new Date(filter.dateFrom) : undefined,
|
|
128
|
+
dateTo: filter.dateTo ? new Date(filter.dateTo) : undefined,
|
|
129
|
+
};
|
|
130
|
+
const [registrationsOverTime, activeUsersTrend, sevenDay, thirtyDay] = await Promise.all([
|
|
131
|
+
this.playerActivity.getRegistrationsOverTime(portFilter),
|
|
132
|
+
this.playerActivity.getActiveUsersTrend(portFilter),
|
|
133
|
+
this.playerActivity.getRetentionCohorts(portFilter, 7),
|
|
134
|
+
this.playerActivity.getRetentionCohorts(portFilter, 30),
|
|
135
|
+
]);
|
|
136
|
+
return { registrationsOverTime, activeUsersTrend, retention: { sevenDay, thirtyDay } };
|
|
137
|
+
}
|
|
110
138
|
}
|
|
111
139
|
//# sourceMappingURL=backoffice.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backoffice.service.js","sourceRoot":"","sources":["../../../src/admin-console/service/backoffice.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"backoffice.service.js","sourceRoot":"","sources":["../../../src/admin-console/service/backoffice.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-reporting.test.d.ts","sourceRoot":"","sources":["../../../../src/casino/gaming/__tests__/admin-reporting.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
import { mock } from '../../../testing/mock.js';
|
|
3
|
+
import { DrizzleAdminGameReporting } from '../admin-reporting.js';
|
|
4
|
+
function makeDrizzle(rows) {
|
|
5
|
+
const whereArgs = [];
|
|
6
|
+
const orderByArgs = [];
|
|
7
|
+
const builder = {};
|
|
8
|
+
const chain = () => builder;
|
|
9
|
+
builder['select'] = vi.fn(chain);
|
|
10
|
+
builder['from'] = vi.fn(chain);
|
|
11
|
+
builder['leftJoin'] = vi.fn(chain);
|
|
12
|
+
builder['groupBy'] = vi.fn(chain);
|
|
13
|
+
builder['orderBy'] = vi.fn((arg) => {
|
|
14
|
+
orderByArgs.push(arg);
|
|
15
|
+
return builder;
|
|
16
|
+
});
|
|
17
|
+
builder['where'] = vi.fn((arg) => {
|
|
18
|
+
whereArgs.push(arg);
|
|
19
|
+
return builder;
|
|
20
|
+
});
|
|
21
|
+
// oxlint-disable-next-line unicorn/no-thenable -- builder must be awaitable to mimic Drizzle.
|
|
22
|
+
builder['then'] = (resolve) => resolve(rows);
|
|
23
|
+
const db = { ...builder };
|
|
24
|
+
return { drizzle: mock({ db }), whereArgs, orderByArgs };
|
|
25
|
+
}
|
|
26
|
+
function row(over = {}) {
|
|
27
|
+
return {
|
|
28
|
+
gameId: 'g-1',
|
|
29
|
+
name: 'Aces',
|
|
30
|
+
gameType: 'casino',
|
|
31
|
+
volume: '1000',
|
|
32
|
+
revenue: '200',
|
|
33
|
+
uniquePlayers: '3',
|
|
34
|
+
roundsPlayed: '10',
|
|
35
|
+
...over,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
describe('DrizzleAdminGameReporting.listGamePerformance', () => {
|
|
39
|
+
it('maps rows and coerces count columns to numbers', async () => {
|
|
40
|
+
const { drizzle } = makeDrizzle([row()]);
|
|
41
|
+
const reporting = new DrizzleAdminGameReporting(drizzle);
|
|
42
|
+
const rows = await reporting.listGamePerformance({});
|
|
43
|
+
expect(rows).toEqual([
|
|
44
|
+
{
|
|
45
|
+
gameId: 'g-1',
|
|
46
|
+
name: 'Aces',
|
|
47
|
+
gameType: 'casino',
|
|
48
|
+
volume: '1000',
|
|
49
|
+
revenue: '200',
|
|
50
|
+
uniquePlayers: 3,
|
|
51
|
+
roundsPlayed: 10,
|
|
52
|
+
},
|
|
53
|
+
]);
|
|
54
|
+
});
|
|
55
|
+
it('keeps a negative revenue string intact (GGR can go negative)', async () => {
|
|
56
|
+
const { drizzle } = makeDrizzle([row({ revenue: '-50' })]);
|
|
57
|
+
const reporting = new DrizzleAdminGameReporting(drizzle);
|
|
58
|
+
const rows = await reporting.listGamePerformance({});
|
|
59
|
+
expect(rows[0]?.revenue).toBe('-50');
|
|
60
|
+
});
|
|
61
|
+
it('adds a WHERE clause when gameType is filtered', async () => {
|
|
62
|
+
const { drizzle, whereArgs } = makeDrizzle([]);
|
|
63
|
+
const reporting = new DrizzleAdminGameReporting(drizzle);
|
|
64
|
+
await reporting.listGamePerformance({ gameType: 'sportsbook' });
|
|
65
|
+
expect(whereArgs).toEqual([expect.anything()]);
|
|
66
|
+
});
|
|
67
|
+
it('passes an undefined WHERE when no gameType filter is given', async () => {
|
|
68
|
+
const { drizzle, whereArgs } = makeDrizzle([]);
|
|
69
|
+
const reporting = new DrizzleAdminGameReporting(drizzle);
|
|
70
|
+
await reporting.listGamePerformance({});
|
|
71
|
+
expect(whereArgs).toEqual([undefined]);
|
|
72
|
+
});
|
|
73
|
+
it('sorts by the requested column and direction', async () => {
|
|
74
|
+
const { drizzle, orderByArgs } = makeDrizzle([]);
|
|
75
|
+
const reporting = new DrizzleAdminGameReporting(drizzle);
|
|
76
|
+
await reporting.listGamePerformance({ sortBy: 'name', sortDir: 'asc' });
|
|
77
|
+
expect(orderByArgs).toHaveLength(1);
|
|
78
|
+
});
|
|
79
|
+
it('defaults to a defined sort when sortBy is omitted', async () => {
|
|
80
|
+
const { drizzle, orderByArgs } = makeDrizzle([]);
|
|
81
|
+
const reporting = new DrizzleAdminGameReporting(drizzle);
|
|
82
|
+
await reporting.listGamePerformance({});
|
|
83
|
+
expect(orderByArgs).toHaveLength(1);
|
|
84
|
+
expect(orderByArgs[0]).toBeDefined();
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=admin-reporting.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-reporting.test.js","sourceRoot":"","sources":["../../../../src/casino/gaming/__tests__/admin-reporting.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AdminGameReporting, GamePerformanceFilter, GamePerformanceRow } from '@openora/core/contracts';
|
|
2
|
+
import { DrizzleService } from '@openora/core/server';
|
|
3
|
+
export declare class DrizzleAdminGameReporting implements AdminGameReporting {
|
|
4
|
+
private readonly drizzle;
|
|
5
|
+
constructor(drizzle: DrizzleService);
|
|
6
|
+
listGamePerformance(filter: GamePerformanceFilter): Promise<GamePerformanceRow[]>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=admin-reporting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-reporting.d.ts","sourceRoot":"","sources":["../../../src/casino/gaming/admin-reporting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKtD,qBAAa,yBAA0B,YAAW,kBAAkB;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAE9C,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;CAyDxF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { and, asc, desc, eq, gte, lte, sql } from 'drizzle-orm';
|
|
2
|
+
import { game, gameRound } from './schema/index.js';
|
|
3
|
+
// See ADR-0017/0025.
|
|
4
|
+
export class DrizzleAdminGameReporting {
|
|
5
|
+
drizzle;
|
|
6
|
+
constructor(drizzle) {
|
|
7
|
+
this.drizzle = drizzle;
|
|
8
|
+
}
|
|
9
|
+
async listGamePerformance(filter) {
|
|
10
|
+
const db = this.drizzle.db;
|
|
11
|
+
// status/date filters scope which ROUNDS count towards a game's metrics, so they
|
|
12
|
+
// live in the join condition, not WHERE - a game with zero completed rounds in
|
|
13
|
+
// range still appears with all-zero metrics rather than being dropped from the
|
|
14
|
+
// report. `gameType` narrows which GAMES appear at all, so it stays in WHERE.
|
|
15
|
+
const joinConditions = [
|
|
16
|
+
eq(gameRound.gameId, game.id),
|
|
17
|
+
eq(gameRound.status, 'completed'),
|
|
18
|
+
filter.dateFrom ? gte(gameRound.startedAt, filter.dateFrom) : undefined,
|
|
19
|
+
filter.dateTo ? lte(gameRound.startedAt, filter.dateTo) : undefined,
|
|
20
|
+
].filter(Boolean);
|
|
21
|
+
const where = filter.gameType ? eq(game.gameType, filter.gameType) : undefined;
|
|
22
|
+
const volume = sql `coalesce(sum(${gameRound.betAmount}), 0)`;
|
|
23
|
+
// GGR - can be negative when a game pays out more than it takes in over the range.
|
|
24
|
+
const revenue = sql `coalesce(sum(${gameRound.betAmount}) - sum(${gameRound.winAmount}), 0)`;
|
|
25
|
+
const uniquePlayers = sql `count(distinct ${gameRound.userId})`;
|
|
26
|
+
const roundsPlayed = sql `count(${gameRound.id})`;
|
|
27
|
+
const sortColumns = {
|
|
28
|
+
name: game.name,
|
|
29
|
+
gameType: game.gameType,
|
|
30
|
+
volume,
|
|
31
|
+
revenue,
|
|
32
|
+
uniquePlayers,
|
|
33
|
+
roundsPlayed,
|
|
34
|
+
};
|
|
35
|
+
const order = filter.sortDir === 'asc' ? asc : desc;
|
|
36
|
+
const rows = await db
|
|
37
|
+
.select({
|
|
38
|
+
gameId: game.id,
|
|
39
|
+
name: game.name,
|
|
40
|
+
gameType: game.gameType,
|
|
41
|
+
volume,
|
|
42
|
+
revenue,
|
|
43
|
+
uniquePlayers,
|
|
44
|
+
roundsPlayed,
|
|
45
|
+
})
|
|
46
|
+
.from(game)
|
|
47
|
+
.leftJoin(gameRound, and(...joinConditions))
|
|
48
|
+
.where(where)
|
|
49
|
+
.groupBy(game.id, game.name, game.gameType)
|
|
50
|
+
.orderBy(order(sortColumns[filter.sortBy ?? 'volume']));
|
|
51
|
+
return rows.map((r) => ({
|
|
52
|
+
gameId: r.gameId,
|
|
53
|
+
name: r.name,
|
|
54
|
+
gameType: r.gameType,
|
|
55
|
+
volume: r.volume,
|
|
56
|
+
revenue: r.revenue,
|
|
57
|
+
uniquePlayers: Number(r.uniquePlayers),
|
|
58
|
+
roundsPlayed: Number(r.roundsPlayed),
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=admin-reporting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-reporting.js","sourceRoot":"","sources":["../../../src/casino/gaming/admin-reporting.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
|
+
export { GameTypeSchema } from '@openora/core/contracts';
|
|
2
3
|
export declare const GAME_ROUND_STATUSES: readonly ["active", "completed", "cancelled"];
|
|
3
4
|
export declare const GameRoundStatusSchema: z.ZodEnum<{
|
|
4
5
|
active: "active";
|
|
@@ -11,6 +12,11 @@ export declare const GameSchema: z.ZodObject<{
|
|
|
11
12
|
name: z.ZodString;
|
|
12
13
|
provider: z.ZodString;
|
|
13
14
|
category: z.ZodString;
|
|
15
|
+
gameType: z.ZodEnum<{
|
|
16
|
+
original: "original";
|
|
17
|
+
casino: "casino";
|
|
18
|
+
sportsbook: "sportsbook";
|
|
19
|
+
}>;
|
|
14
20
|
thumbnailUrl: z.ZodNullable<z.ZodString>;
|
|
15
21
|
isActive: z.ZodBoolean;
|
|
16
22
|
metadata: z.ZodNullable<z.ZodUnknown>;
|
|
@@ -55,6 +61,11 @@ export declare const gamingContract: {
|
|
|
55
61
|
name: z.ZodString;
|
|
56
62
|
provider: z.ZodString;
|
|
57
63
|
category: z.ZodString;
|
|
64
|
+
gameType: z.ZodEnum<{
|
|
65
|
+
original: "original";
|
|
66
|
+
casino: "casino";
|
|
67
|
+
sportsbook: "sportsbook";
|
|
68
|
+
}>;
|
|
58
69
|
thumbnailUrl: z.ZodNullable<z.ZodString>;
|
|
59
70
|
isActive: z.ZodBoolean;
|
|
60
71
|
metadata: z.ZodNullable<z.ZodUnknown>;
|
|
@@ -66,6 +77,11 @@ export declare const gamingContract: {
|
|
|
66
77
|
name: z.ZodString;
|
|
67
78
|
provider: z.ZodString;
|
|
68
79
|
category: z.ZodString;
|
|
80
|
+
gameType: z.ZodEnum<{
|
|
81
|
+
original: "original";
|
|
82
|
+
casino: "casino";
|
|
83
|
+
sportsbook: "sportsbook";
|
|
84
|
+
}>;
|
|
69
85
|
thumbnailUrl: z.ZodNullable<z.ZodString>;
|
|
70
86
|
isActive: z.ZodBoolean;
|
|
71
87
|
metadata: z.ZodNullable<z.ZodUnknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/casino/gaming/contract/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/casino/gaming/contract/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AASzB,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,eAAO,MAAM,mBAAmB,+CAAgD,CAAC;AACjF,eAAO,MAAM,qBAAqB;;;;EAA8B,CAAC;AACjE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,UAAU;;;;;;;;;;;;;iBASrB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;iBAU1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,yBAAyB,aAEpC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;iBAIhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;iBAIjC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;iBAE9B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmB1B,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { oc } from '@orpc/contract';
|
|
2
2
|
import * as z from 'zod';
|
|
3
|
-
import { CurrencyCodeSchema, IdInputSchema, MoneyAmountSchema, UuidSchema, } from '@openora/core/contracts';
|
|
3
|
+
import { CurrencyCodeSchema, GameTypeSchema, IdInputSchema, MoneyAmountSchema, UuidSchema, } from '@openora/core/contracts';
|
|
4
|
+
export { GameTypeSchema } from '@openora/core/contracts';
|
|
4
5
|
export const GAME_ROUND_STATUSES = ['active', 'completed', 'cancelled'];
|
|
5
6
|
export const GameRoundStatusSchema = z.enum(GAME_ROUND_STATUSES);
|
|
6
7
|
export const GameSchema = z.object({
|
|
@@ -8,6 +9,7 @@ export const GameSchema = z.object({
|
|
|
8
9
|
name: z.string(),
|
|
9
10
|
provider: z.string(),
|
|
10
11
|
category: z.string(),
|
|
12
|
+
gameType: GameTypeSchema,
|
|
11
13
|
thumbnailUrl: z.string().nullable(),
|
|
12
14
|
isActive: z.boolean(),
|
|
13
15
|
metadata: z.unknown().nullable(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/casino/gaming/contract/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/casino/gaming/contract/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
CREATE TYPE "public"."game_type" AS ENUM('original', 'casino', 'sportsbook');--> statement-breakpoint
|
|
2
|
+
ALTER TABLE "game" ADD COLUMN "game_type" "game_type" DEFAULT 'casino' NOT NULL;--> statement-breakpoint
|
|
3
|
+
CREATE INDEX "game_round_game_id_started_at_idx" ON "game_round" USING btree ("game_id","started_at");--> statement-breakpoint
|
|
4
|
+
CREATE INDEX "game_round_started_at_idx" ON "game_round" USING btree ("started_at");
|