- 球赛/串关/优胜冠军、赛事详情、历史投注与个人资料编辑 - 固定顶栏、公告与底栏,仅内容区滚动 - 底部导航与站点 favicon 使用 logo,登录页精简 - API 种子、冠军盘与历史注单增强 Co-authored-by: Cursor <cursoragent@cursor.com>
704 lines
23 KiB
SQL
704 lines
23 KiB
SQL
-- CreateTable
|
|
CREATE TABLE "users" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"username" VARCHAR(64) NOT NULL,
|
|
"user_type" VARCHAR(20) NOT NULL,
|
|
"status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
|
|
"parent_id" BIGINT,
|
|
"agent_level" INTEGER,
|
|
"locale" VARCHAR(10) NOT NULL DEFAULT 'en-US',
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
"deleted_at" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "user_auth" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"user_id" BIGINT NOT NULL,
|
|
"password_hash" VARCHAR(255) NOT NULL,
|
|
"login_fail_count" INTEGER NOT NULL DEFAULT 0,
|
|
"locked_until" TIMESTAMP(3),
|
|
"last_login_at" TIMESTAMP(3),
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "user_auth_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "user_preferences" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"user_id" BIGINT NOT NULL,
|
|
"locale" VARCHAR(10) NOT NULL DEFAULT 'en-US',
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "user_preferences_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "roles" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"code" VARCHAR(64) NOT NULL,
|
|
"name" VARCHAR(128) NOT NULL,
|
|
"description" VARCHAR(255),
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "roles_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "permissions" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"code" VARCHAR(128) NOT NULL,
|
|
"name" VARCHAR(128) NOT NULL,
|
|
"module" VARCHAR(64) NOT NULL,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "permissions_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "role_permissions" (
|
|
"role_id" BIGINT NOT NULL,
|
|
"permission_id" BIGINT NOT NULL,
|
|
|
|
CONSTRAINT "role_permissions_pkey" PRIMARY KEY ("role_id","permission_id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "admin_user_roles" (
|
|
"user_id" BIGINT NOT NULL,
|
|
"role_id" BIGINT NOT NULL,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "agent_profiles" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"user_id" BIGINT NOT NULL,
|
|
"level" INTEGER NOT NULL,
|
|
"parent_agent_id" BIGINT,
|
|
"credit_limit" DECIMAL(18,4) NOT NULL DEFAULT 0,
|
|
"used_credit" DECIMAL(18,4) NOT NULL DEFAULT 0,
|
|
"direct_player_liability" DECIMAL(18,4) NOT NULL DEFAULT 0,
|
|
"child_agent_exposure" DECIMAL(18,4) NOT NULL DEFAULT 0,
|
|
"status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
|
|
"max_single_deposit" DECIMAL(18,4),
|
|
"max_daily_deposit" DECIMAL(18,4),
|
|
"cashback_rate" DECIMAL(8,4) NOT NULL DEFAULT 0,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "agent_profiles_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "agent_closure" (
|
|
"ancestor_id" BIGINT NOT NULL,
|
|
"descendant_id" BIGINT NOT NULL,
|
|
"depth" INTEGER NOT NULL,
|
|
|
|
CONSTRAINT "agent_closure_pkey" PRIMARY KEY ("ancestor_id","descendant_id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "agent_credit_transactions" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"agent_id" BIGINT NOT NULL,
|
|
"transaction_type" VARCHAR(32) NOT NULL,
|
|
"amount" DECIMAL(18,4) NOT NULL,
|
|
"credit_before" DECIMAL(18,4) NOT NULL,
|
|
"credit_after" DECIMAL(18,4) NOT NULL,
|
|
"reference_type" VARCHAR(32),
|
|
"reference_id" VARCHAR(64),
|
|
"operator_id" BIGINT,
|
|
"request_id" VARCHAR(128),
|
|
"remark" VARCHAR(500),
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "agent_credit_transactions_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "wallets" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"user_id" BIGINT NOT NULL,
|
|
"available_balance" DECIMAL(18,4) NOT NULL DEFAULT 0,
|
|
"frozen_balance" DECIMAL(18,4) NOT NULL DEFAULT 0,
|
|
"currency" VARCHAR(16) NOT NULL DEFAULT 'USD',
|
|
"status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
|
|
"version" INTEGER NOT NULL DEFAULT 0,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "wallets_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "wallet_transactions" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"transaction_id" VARCHAR(64) NOT NULL,
|
|
"user_id" BIGINT NOT NULL,
|
|
"wallet_id" BIGINT NOT NULL,
|
|
"transaction_type" VARCHAR(32) NOT NULL,
|
|
"amount" DECIMAL(18,4) NOT NULL,
|
|
"balance_before" DECIMAL(18,4) NOT NULL,
|
|
"balance_after" DECIMAL(18,4) NOT NULL,
|
|
"frozen_before" DECIMAL(18,4) NOT NULL,
|
|
"frozen_after" DECIMAL(18,4) NOT NULL,
|
|
"reference_type" VARCHAR(32),
|
|
"reference_id" VARCHAR(64),
|
|
"operator_id" BIGINT,
|
|
"remark" VARCHAR(500),
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "wallet_transactions_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "leagues" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"sport_type" VARCHAR(20) NOT NULL DEFAULT 'FOOTBALL',
|
|
"code" VARCHAR(64) NOT NULL,
|
|
"display_order" INTEGER NOT NULL DEFAULT 0,
|
|
"is_active" BOOLEAN NOT NULL DEFAULT true,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
"deleted_at" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "leagues_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "teams" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"sport_type" VARCHAR(20) NOT NULL DEFAULT 'FOOTBALL',
|
|
"code" VARCHAR(64) NOT NULL,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
"deleted_at" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "teams_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "entity_translations" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"entity_type" VARCHAR(32) NOT NULL,
|
|
"entity_id" BIGINT NOT NULL,
|
|
"locale" VARCHAR(10) NOT NULL,
|
|
"field_name" VARCHAR(32) NOT NULL,
|
|
"value" VARCHAR(500) NOT NULL,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "entity_translations_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "matches" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"sport_type" VARCHAR(20) NOT NULL DEFAULT 'FOOTBALL',
|
|
"league_id" BIGINT NOT NULL,
|
|
"home_team_id" BIGINT NOT NULL,
|
|
"away_team_id" BIGINT NOT NULL,
|
|
"start_time" TIMESTAMP(3) NOT NULL,
|
|
"status" VARCHAR(32) NOT NULL DEFAULT 'DRAFT',
|
|
"is_hot" BOOLEAN NOT NULL DEFAULT false,
|
|
"display_order" INTEGER NOT NULL DEFAULT 0,
|
|
"publish_time" TIMESTAMP(3),
|
|
"close_time" TIMESTAMP(3),
|
|
"is_outright" BOOLEAN NOT NULL DEFAULT false,
|
|
"created_by" BIGINT,
|
|
"updated_by" BIGINT,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
"deleted_at" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "matches_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "match_scores" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"match_id" BIGINT NOT NULL,
|
|
"ht_home_score" INTEGER,
|
|
"ht_away_score" INTEGER,
|
|
"ft_home_score" INTEGER,
|
|
"ft_away_score" INTEGER,
|
|
"winner_team_id" BIGINT,
|
|
"recorded_by" BIGINT,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "match_scores_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "markets" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"match_id" BIGINT NOT NULL,
|
|
"market_type" VARCHAR(64) NOT NULL,
|
|
"period" VARCHAR(16) NOT NULL,
|
|
"line_value" DECIMAL(8,2),
|
|
"status" VARCHAR(20) NOT NULL DEFAULT 'OPEN',
|
|
"allow_single" BOOLEAN NOT NULL DEFAULT true,
|
|
"allow_parlay" BOOLEAN NOT NULL DEFAULT true,
|
|
"sort_order" INTEGER NOT NULL DEFAULT 0,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "markets_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "market_selections" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"market_id" BIGINT NOT NULL,
|
|
"selection_code" VARCHAR(64) NOT NULL,
|
|
"selection_name" VARCHAR(255) NOT NULL,
|
|
"odds" DECIMAL(18,6) NOT NULL,
|
|
"odds_version" BIGINT NOT NULL DEFAULT 1,
|
|
"status" VARCHAR(20) NOT NULL DEFAULT 'OPEN',
|
|
"sort_order" INTEGER NOT NULL DEFAULT 0,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "market_selections_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "odds_change_logs" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"selection_id" BIGINT NOT NULL,
|
|
"old_odds" DECIMAL(18,6) NOT NULL,
|
|
"new_odds" DECIMAL(18,6) NOT NULL,
|
|
"odds_version" BIGINT NOT NULL,
|
|
"changed_by" BIGINT,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "odds_change_logs_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "bets" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"bet_no" VARCHAR(64) NOT NULL,
|
|
"user_id" BIGINT NOT NULL,
|
|
"agent_id" BIGINT,
|
|
"bet_type" VARCHAR(20) NOT NULL,
|
|
"stake" DECIMAL(18,4) NOT NULL,
|
|
"total_odds" DECIMAL(18,6),
|
|
"potential_return" DECIMAL(18,4),
|
|
"actual_return" DECIMAL(18,4) NOT NULL DEFAULT 0,
|
|
"status" VARCHAR(32) NOT NULL DEFAULT 'PENDING',
|
|
"settlement_status" VARCHAR(32),
|
|
"currency" VARCHAR(16) NOT NULL DEFAULT 'USD',
|
|
"request_id" VARCHAR(128) NOT NULL,
|
|
"placed_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"settled_at" TIMESTAMP(3),
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "bets_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "bet_selections" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"bet_id" BIGINT NOT NULL,
|
|
"match_id" BIGINT,
|
|
"market_id" BIGINT NOT NULL,
|
|
"selection_id" BIGINT NOT NULL,
|
|
"market_type" VARCHAR(64) NOT NULL,
|
|
"period" VARCHAR(16),
|
|
"selection_name_snapshot" VARCHAR(255) NOT NULL,
|
|
"handicap_line" DECIMAL(8,2),
|
|
"total_line" DECIMAL(8,2),
|
|
"odds" DECIMAL(18,6) NOT NULL,
|
|
"odds_version" BIGINT NOT NULL,
|
|
"result_status" VARCHAR(32),
|
|
"effective_odds" DECIMAL(18,6),
|
|
"sort_order" INTEGER NOT NULL DEFAULT 0,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "bet_selections_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "settlement_batches" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"match_id" BIGINT NOT NULL,
|
|
"batch_no" VARCHAR(64) NOT NULL,
|
|
"ht_home_score" INTEGER,
|
|
"ht_away_score" INTEGER,
|
|
"ft_home_score" INTEGER,
|
|
"ft_away_score" INTEGER,
|
|
"status" VARCHAR(20) NOT NULL DEFAULT 'PREVIEW',
|
|
"total_bets" INTEGER NOT NULL DEFAULT 0,
|
|
"total_payout" DECIMAL(18,4) NOT NULL DEFAULT 0,
|
|
"total_refund" DECIMAL(18,4) NOT NULL DEFAULT 0,
|
|
"operator_id" BIGINT,
|
|
"confirmed_at" TIMESTAMP(3),
|
|
"is_resettle" BOOLEAN NOT NULL DEFAULT false,
|
|
"reason" VARCHAR(500),
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "settlement_batches_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "settlement_items" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"batch_id" BIGINT NOT NULL,
|
|
"bet_id" BIGINT NOT NULL,
|
|
"user_id" BIGINT NOT NULL,
|
|
"result" VARCHAR(32) NOT NULL,
|
|
"payout" DECIMAL(18,4) NOT NULL,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "settlement_items_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "cashback_rules" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"name" VARCHAR(128) NOT NULL,
|
|
"target_type" VARCHAR(32) NOT NULL,
|
|
"target_id" BIGINT,
|
|
"rate" DECIMAL(8,4) NOT NULL,
|
|
"market_type" VARCHAR(64),
|
|
"is_active" BOOLEAN NOT NULL DEFAULT true,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "cashback_rules_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "cashback_batches" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"batch_no" VARCHAR(64) NOT NULL,
|
|
"period_start" TIMESTAMP(3) NOT NULL,
|
|
"period_end" TIMESTAMP(3) NOT NULL,
|
|
"status" VARCHAR(20) NOT NULL DEFAULT 'PREVIEW',
|
|
"total_amount" DECIMAL(18,4) NOT NULL DEFAULT 0,
|
|
"player_count" INTEGER NOT NULL DEFAULT 0,
|
|
"operator_id" BIGINT,
|
|
"confirmed_at" TIMESTAMP(3),
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "cashback_batches_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "cashback_items" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"batch_id" BIGINT NOT NULL,
|
|
"user_id" BIGINT NOT NULL,
|
|
"effective_stake" DECIMAL(18,4) NOT NULL,
|
|
"rate" DECIMAL(8,4) NOT NULL,
|
|
"amount" DECIMAL(18,4) NOT NULL,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "cashback_items_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "contents" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"content_type" VARCHAR(32) NOT NULL,
|
|
"sort_order" INTEGER NOT NULL DEFAULT 0,
|
|
"status" VARCHAR(20) NOT NULL DEFAULT 'DRAFT',
|
|
"link_type" VARCHAR(32),
|
|
"link_target" VARCHAR(500),
|
|
"start_time" TIMESTAMP(3),
|
|
"end_time" TIMESTAMP(3),
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "contents_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "content_translations" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"content_id" BIGINT NOT NULL,
|
|
"locale" VARCHAR(10) NOT NULL,
|
|
"title" VARCHAR(255),
|
|
"body" TEXT,
|
|
"image_url" VARCHAR(500),
|
|
|
|
CONSTRAINT "content_translations_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "i18n_messages" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"msg_key" VARCHAR(128) NOT NULL,
|
|
"locale" VARCHAR(10) NOT NULL,
|
|
"value" TEXT NOT NULL,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "i18n_messages_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "system_configs" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"config_key" VARCHAR(128) NOT NULL,
|
|
"config_value" TEXT NOT NULL,
|
|
"description" VARCHAR(255),
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "system_configs_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "audit_logs" (
|
|
"id" BIGSERIAL NOT NULL,
|
|
"operator_id" BIGINT,
|
|
"operator_type" VARCHAR(20) NOT NULL,
|
|
"action" VARCHAR(128) NOT NULL,
|
|
"module" VARCHAR(64) NOT NULL,
|
|
"target_type" VARCHAR(32),
|
|
"target_id" VARCHAR(64),
|
|
"before_data" TEXT,
|
|
"after_data" TEXT,
|
|
"ip_address" VARCHAR(45),
|
|
"user_agent" VARCHAR(500),
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "audit_logs_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "users_username_key" ON "users"("username");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "users_user_type_idx" ON "users"("user_type");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "users_parent_id_idx" ON "users"("parent_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "user_auth_user_id_key" ON "user_auth"("user_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "user_preferences_user_id_key" ON "user_preferences"("user_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "roles_code_key" ON "roles"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "permissions_code_key" ON "permissions"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "admin_user_roles_user_id_key" ON "admin_user_roles"("user_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "agent_profiles_user_id_key" ON "agent_profiles"("user_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "agent_profiles_parent_agent_id_idx" ON "agent_profiles"("parent_agent_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "agent_closure_descendant_id_idx" ON "agent_closure"("descendant_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "agent_credit_transactions_agent_id_idx" ON "agent_credit_transactions"("agent_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "agent_credit_transactions_operator_id_request_id_key" ON "agent_credit_transactions"("operator_id", "request_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "wallets_user_id_key" ON "wallets"("user_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "wallet_transactions_transaction_id_key" ON "wallet_transactions"("transaction_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "wallet_transactions_user_id_idx" ON "wallet_transactions"("user_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "wallet_transactions_wallet_id_idx" ON "wallet_transactions"("wallet_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "wallet_transactions_created_at_idx" ON "wallet_transactions"("created_at");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "leagues_code_key" ON "leagues"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "teams_code_key" ON "teams"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "entity_translations_entity_type_entity_id_idx" ON "entity_translations"("entity_type", "entity_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "entity_translations_entity_type_entity_id_locale_field_name_key" ON "entity_translations"("entity_type", "entity_id", "locale", "field_name");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "matches_status_idx" ON "matches"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "matches_start_time_idx" ON "matches"("start_time");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "matches_league_id_idx" ON "matches"("league_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "match_scores_match_id_key" ON "match_scores"("match_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "markets_match_id_idx" ON "markets"("match_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "markets_market_type_idx" ON "markets"("market_type");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "market_selections_market_id_idx" ON "market_selections"("market_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "odds_change_logs_selection_id_idx" ON "odds_change_logs"("selection_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "bets_bet_no_key" ON "bets"("bet_no");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "bets_user_id_idx" ON "bets"("user_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "bets_agent_id_idx" ON "bets"("agent_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "bets_status_idx" ON "bets"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "bets_placed_at_idx" ON "bets"("placed_at");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "bets_user_id_request_id_key" ON "bets"("user_id", "request_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "bet_selections_bet_id_idx" ON "bet_selections"("bet_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "bet_selections_match_id_idx" ON "bet_selections"("match_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "settlement_batches_batch_no_key" ON "settlement_batches"("batch_no");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "settlement_batches_match_id_idx" ON "settlement_batches"("match_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "settlement_items_batch_id_idx" ON "settlement_items"("batch_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "settlement_items_bet_id_idx" ON "settlement_items"("bet_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "cashback_batches_batch_no_key" ON "cashback_batches"("batch_no");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "cashback_items_batch_id_idx" ON "cashback_items"("batch_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "cashback_items_user_id_idx" ON "cashback_items"("user_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "contents_content_type_status_idx" ON "contents"("content_type", "status");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "content_translations_content_id_locale_key" ON "content_translations"("content_id", "locale");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "i18n_messages_msg_key_locale_key" ON "i18n_messages"("msg_key", "locale");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "system_configs_config_key_key" ON "system_configs"("config_key");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "audit_logs_operator_id_idx" ON "audit_logs"("operator_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "audit_logs_module_idx" ON "audit_logs"("module");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "audit_logs_created_at_idx" ON "audit_logs"("created_at");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "users" ADD CONSTRAINT "users_parent_id_fkey" FOREIGN KEY ("parent_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "user_auth" ADD CONSTRAINT "user_auth_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "user_preferences" ADD CONSTRAINT "user_preferences_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "role_permissions" ADD CONSTRAINT "role_permissions_role_id_fkey" FOREIGN KEY ("role_id") REFERENCES "roles"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "role_permissions" ADD CONSTRAINT "role_permissions_permission_id_fkey" FOREIGN KEY ("permission_id") REFERENCES "permissions"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "admin_user_roles" ADD CONSTRAINT "admin_user_roles_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "admin_user_roles" ADD CONSTRAINT "admin_user_roles_role_id_fkey" FOREIGN KEY ("role_id") REFERENCES "roles"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "agent_profiles" ADD CONSTRAINT "agent_profiles_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "wallets" ADD CONSTRAINT "wallets_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "wallet_transactions" ADD CONSTRAINT "wallet_transactions_wallet_id_fkey" FOREIGN KEY ("wallet_id") REFERENCES "wallets"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "matches" ADD CONSTRAINT "matches_league_id_fkey" FOREIGN KEY ("league_id") REFERENCES "leagues"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "matches" ADD CONSTRAINT "matches_home_team_id_fkey" FOREIGN KEY ("home_team_id") REFERENCES "teams"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "matches" ADD CONSTRAINT "matches_away_team_id_fkey" FOREIGN KEY ("away_team_id") REFERENCES "teams"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "match_scores" ADD CONSTRAINT "match_scores_match_id_fkey" FOREIGN KEY ("match_id") REFERENCES "matches"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "markets" ADD CONSTRAINT "markets_match_id_fkey" FOREIGN KEY ("match_id") REFERENCES "matches"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "market_selections" ADD CONSTRAINT "market_selections_market_id_fkey" FOREIGN KEY ("market_id") REFERENCES "markets"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "odds_change_logs" ADD CONSTRAINT "odds_change_logs_selection_id_fkey" FOREIGN KEY ("selection_id") REFERENCES "market_selections"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "bets" ADD CONSTRAINT "bets_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "bet_selections" ADD CONSTRAINT "bet_selections_bet_id_fkey" FOREIGN KEY ("bet_id") REFERENCES "bets"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "settlement_batches" ADD CONSTRAINT "settlement_batches_match_id_fkey" FOREIGN KEY ("match_id") REFERENCES "matches"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "settlement_items" ADD CONSTRAINT "settlement_items_batch_id_fkey" FOREIGN KEY ("batch_id") REFERENCES "settlement_batches"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "cashback_items" ADD CONSTRAINT "cashback_items_batch_id_fkey" FOREIGN KEY ("batch_id") REFERENCES "cashback_batches"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "content_translations" ADD CONSTRAINT "content_translations_content_id_fkey" FOREIGN KEY ("content_id") REFERENCES "contents"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|