初始化足球投注平台 MVP Monorepo
包含 NestJS 后端、三端前端、Prisma 数据模型、结算引擎测试与 PRD 文档。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
14
packages/shared/package.json
Normal file
14
packages/shared/package.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "@thebet365/shared",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"dev": "tsc --watch"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.7.3"
|
||||
}
|
||||
}
|
||||
123
packages/shared/src/index.ts
Normal file
123
packages/shared/src/index.ts
Normal file
@@ -0,0 +1,123 @@
|
||||
// User & Auth
|
||||
export enum UserType {
|
||||
PLAYER = 'PLAYER',
|
||||
AGENT = 'AGENT',
|
||||
ADMIN = 'ADMIN',
|
||||
}
|
||||
|
||||
export enum UserStatus {
|
||||
ACTIVE = 'ACTIVE',
|
||||
DISABLED = 'DISABLED',
|
||||
LOCKED = 'LOCKED',
|
||||
}
|
||||
|
||||
export enum AgentLevel {
|
||||
LEVEL_1 = 1,
|
||||
LEVEL_2 = 2,
|
||||
}
|
||||
|
||||
// Match
|
||||
export enum MatchStatus {
|
||||
DRAFT = 'DRAFT',
|
||||
PUBLISHED = 'PUBLISHED',
|
||||
CLOSED = 'CLOSED',
|
||||
PENDING_SETTLEMENT = 'PENDING_SETTLEMENT',
|
||||
SETTLED = 'SETTLED',
|
||||
CANCELLED = 'CANCELLED',
|
||||
VOID = 'VOID',
|
||||
}
|
||||
|
||||
export enum MarketStatus {
|
||||
OPEN = 'OPEN',
|
||||
SUSPENDED = 'SUSPENDED',
|
||||
CLOSED = 'CLOSED',
|
||||
}
|
||||
|
||||
export enum MarketType {
|
||||
FT_CORRECT_SCORE = 'FT_CORRECT_SCORE',
|
||||
HT_CORRECT_SCORE = 'HT_CORRECT_SCORE',
|
||||
SH_CORRECT_SCORE = 'SH_CORRECT_SCORE',
|
||||
FT_HANDICAP = 'FT_HANDICAP',
|
||||
FT_OVER_UNDER = 'FT_OVER_UNDER',
|
||||
FT_1X2 = 'FT_1X2',
|
||||
FT_ODD_EVEN = 'FT_ODD_EVEN',
|
||||
HT_HANDICAP = 'HT_HANDICAP',
|
||||
HT_OVER_UNDER = 'HT_OVER_UNDER',
|
||||
HT_1X2 = 'HT_1X2',
|
||||
OUTRIGHT_WINNER = 'OUTRIGHT_WINNER',
|
||||
}
|
||||
|
||||
export enum Period {
|
||||
FT = 'FT',
|
||||
HT = 'HT',
|
||||
SH = 'SH',
|
||||
OUTRIGHT = 'OUTRIGHT',
|
||||
}
|
||||
|
||||
// Bet
|
||||
export enum BetType {
|
||||
SINGLE = 'SINGLE',
|
||||
PARLAY = 'PARLAY',
|
||||
}
|
||||
|
||||
export enum BetStatus {
|
||||
PENDING = 'PENDING',
|
||||
WON = 'WON',
|
||||
LOST = 'LOST',
|
||||
PUSH = 'PUSH',
|
||||
VOID = 'VOID',
|
||||
CANCELLED = 'CANCELLED',
|
||||
SETTLED = 'SETTLED',
|
||||
}
|
||||
|
||||
export enum SelectionResult {
|
||||
WIN = 'WIN',
|
||||
HALF_WIN = 'HALF_WIN',
|
||||
PUSH = 'PUSH',
|
||||
HALF_LOSE = 'HALF_LOSE',
|
||||
LOSE = 'LOSE',
|
||||
VOID = 'VOID',
|
||||
}
|
||||
|
||||
// Wallet
|
||||
export enum WalletTransactionType {
|
||||
MANUAL_DEPOSIT = 'MANUAL_DEPOSIT',
|
||||
MANUAL_WITHDRAW = 'MANUAL_WITHDRAW',
|
||||
BET_FREEZE = 'BET_FREEZE',
|
||||
BET_SETTLE_WIN = 'BET_SETTLE_WIN',
|
||||
BET_SETTLE_LOSE = 'BET_SETTLE_LOSE',
|
||||
BET_SETTLE_PUSH = 'BET_SETTLE_PUSH',
|
||||
BET_VOID_REFUND = 'BET_VOID_REFUND',
|
||||
CASHBACK = 'CASHBACK',
|
||||
RESETTLE_REVERSE = 'RESETTLE_REVERSE',
|
||||
MANUAL_ADJUST = 'MANUAL_ADJUST',
|
||||
}
|
||||
|
||||
export enum WalletStatus {
|
||||
ACTIVE = 'ACTIVE',
|
||||
FROZEN = 'FROZEN',
|
||||
DISABLED = 'DISABLED',
|
||||
}
|
||||
|
||||
// Locale
|
||||
export const SUPPORTED_LOCALES = ['zh-CN', 'ms-MY', 'en-US'] as const;
|
||||
export type Locale = (typeof SUPPORTED_LOCALES)[number];
|
||||
export const DEFAULT_LOCALE: Locale = 'en-US';
|
||||
|
||||
// Admin roles
|
||||
export enum AdminRole {
|
||||
SUPER_ADMIN = 'SUPER_ADMIN',
|
||||
MATCH_ADMIN = 'MATCH_ADMIN',
|
||||
FINANCE_ADMIN = 'FINANCE_ADMIN',
|
||||
SUPPORT = 'SUPPORT',
|
||||
}
|
||||
|
||||
export const PARLAY_MIN_LEGS = 2;
|
||||
export const PARLAY_MAX_LEGS = 5;
|
||||
|
||||
export interface ApiResponse<T = unknown> {
|
||||
success: boolean;
|
||||
data?: T;
|
||||
message?: string;
|
||||
error?: string;
|
||||
}
|
||||
13
packages/shared/tsconfig.json
Normal file
13
packages/shared/tsconfig.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2022",
|
||||
"module": "commonjs",
|
||||
"declaration": true,
|
||||
"outDir": "./dist",
|
||||
"rootDir": "./src",
|
||||
"strict": true,
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true
|
||||
},
|
||||
"include": ["src/**/*"]
|
||||
}
|
||||
Reference in New Issue
Block a user