b4c7636731
- 配置层:env.yaml 新增 binance_futures API Key 段,validators + config 同步 - 清理 TradingPair 实体:删除 kline_interval、kline_intervals、kline_synthesis_enabled - 删除 fetchKlines 系列函数的 interval 参数,硬编码为 1m - 更新 SQL seed 数据、example、base_rest 接口、types 接口 - 新增 AGENTS/08-boundaries.md 执行纪律 - 新增 PLAN-add-futures-data.md 方案文档
77 lines
2.2 KiB
TypeScript
77 lines
2.2 KiB
TypeScript
import { logger } from "../utils/logger";
|
|
import { AppDataSource } from "../db/data-source";
|
|
import { Exchange } from "../db/entities/exchange.entity";
|
|
import { TradingPair } from "../db/entities/trading-pair.entity";
|
|
|
|
interface PairSeed {
|
|
symbol: string;
|
|
baseAsset: string;
|
|
quoteAsset: string;
|
|
}
|
|
|
|
const PAIRS: PairSeed[] = [
|
|
{ symbol: "BTCUSDT", baseAsset: "BTC", quoteAsset: "USDT" },
|
|
{ symbol: "ETHUSDT", baseAsset: "ETH", quoteAsset: "USDT" },
|
|
];
|
|
|
|
async function run(): Promise<void> {
|
|
logger.info("Seeding trading pairs...");
|
|
|
|
const exchangeRepo = AppDataSource.getRepository(Exchange);
|
|
const pairRepo = AppDataSource.getRepository(TradingPair);
|
|
|
|
// 1. 确保 binance 交易所存在
|
|
let exchange = await exchangeRepo.findOne({ where: { name: "binance" } });
|
|
if (!exchange) {
|
|
exchange = exchangeRepo.create({
|
|
name: "binance",
|
|
label: "Binance",
|
|
enabled: true,
|
|
});
|
|
await exchangeRepo.save(exchange);
|
|
logger.info("Created exchange: binance");
|
|
} else {
|
|
logger.info("Exchange already exists: binance");
|
|
}
|
|
|
|
// 2. 逐个插入交易对(跳过已存在的)
|
|
let created = 0;
|
|
let skipped = 0;
|
|
|
|
for (const seed of PAIRS) {
|
|
const existing = await pairRepo.findOne({
|
|
where: {
|
|
exchange: { id: exchange.id },
|
|
symbol: seed.symbol,
|
|
},
|
|
});
|
|
|
|
if (existing) {
|
|
logger.info({ symbol: seed.symbol }, "Trading pair already exists, skipping");
|
|
skipped++;
|
|
continue;
|
|
}
|
|
|
|
const pair = pairRepo.create({
|
|
exchange,
|
|
symbol: seed.symbol,
|
|
base_asset: seed.baseAsset,
|
|
quote_asset: seed.quoteAsset,
|
|
active: true,
|
|
});
|
|
|
|
await pairRepo.save(pair);
|
|
created++;
|
|
logger.info({ symbol: seed.symbol, id: pair.id }, "Created trading pair");
|
|
}
|
|
|
|
logger.info({ created, skipped, total: PAIRS.length }, "Seeding complete");
|
|
await AppDataSource.destroy();
|
|
process.exit(0);
|
|
}
|
|
|
|
run().catch((err) => {
|
|
logger.error({ err }, "Seeding failed");
|
|
process.exit(1);
|
|
});
|