初始化足球投注平台 MVP Monorepo

包含 NestJS 后端、三端前端、Prisma 数据模型、结算引擎测试与 PRD 文档。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-02 14:35:48 +08:00
commit 14e49374ac
118 changed files with 15944 additions and 0 deletions

View 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"
}
}

View 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;
}

View File

@@ -0,0 +1,13 @@
{
"compilerOptions": {
"target": "ES2022",
"module": "commonjs",
"declaration": true,
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true
},
"include": ["src/**/*"]
}