Skip to content

Commit 116d737

Browse files
committed
Refactor configuration management and environment setup
- Simplified config initialization with new `initDefaultConfigSources()` method - Updated `.env.example` with more descriptive comments and reorganized API keys - Added optional database configuration flag `ENABLE_DB` - Removed redundant database initialization in multiple files - Improved configuration source management in ConfigManager
1 parent 10ca4ec commit 116d737

4 files changed

Lines changed: 46 additions & 50 deletions

File tree

.env.example

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,37 @@
1+
#如果需要使用数据库配置(先从数据库查找配置key,然后再env寻找):
2+
ENABLE_DB=true
3+
DB_HOST=xxxx
4+
DB_PORT=xxxx
5+
DB_USER=xxxx
6+
DB_PASSWORD=xxxx
7+
DB_DATABASE=xxxx
18

2-
#Craw API
3-
## Required if monitoring web pages (https://www.firecrawl.dev/)
4-
FIRECRAWL_API_KEY=your_firecrawl_api_key
59

6-
# Required if monitoring Twitter/X trends (https://developer.x.com/)
7-
X_API_BEARER_TOKEN=your_twitter_api_bearer_token
10+
#微信文章获取的必备环境:
811

12+
# DeepseekAI API 配置 https://api-docs.deepseek.com/ 获取
13+
DEEPSEEK_API_KEY=your_api_key
914

10-
# Summarizer API
11-
## DeepSeek AI Required from https://www.deepseek.com/
12-
DEEPSEEK_API_KEY=your_deepseek_api_key
15+
# FireCrawl 配置 https://www.firecrawl.dev/ 获取
16+
FIRE_CRAWL_API_KEY=your_api_key
1317

14-
## image generation api, required from https://www.getimg.ai/
15-
GETIMG_API_KEY=your_getimg_api_key
18+
# Twitter API 配置 https://twitterapi.io/ 获取
19+
X_API_BEARER_TOKEN=your_api_key
1620

17-
# Required: API key from Together AI for trend analysis (https://www.together.ai/)
18-
TOGETHER_API_KEY=your_together_api_key
21+
# 千问 https://bailian.console.aliyun.com/ 获取
22+
DASHSCOPE_API_KEY=your_api_key
1923

20-
21-
# Public API
22-
## weixin gongzhonghao
24+
# 微信公众号配置
2325
WEIXIN_APP_ID=your_app_id
24-
WEIXIN_APP_SECRET=your_app_secret
26+
WEIXIN_APP_SECRET=your_app_secret
2527

2628

27-
# Notification
28-
## Bark Push Key
29-
BARK_URL=https://api.day.app/
29+
#可选环境:
3030

31+
# Bark 通知配置
32+
BARK_KEY=your_key
3133

32-
# Database
33-
DB_HOST=your_db_host
34-
DB_PORT=your_db_port
35-
DB_USER=your_db_user
36-
DB_PASSWORD=your_db_password
37-
DB_DATABASE=your_db_database
34+
# 获取图片 API 配置 https://getimg.cc/ 获取
35+
GETIMG_API_KEY=your_api_key
3836

37+
TOGETHER_API_KEY=your_api_key

src/index.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,9 @@
11
import { startCronJobs } from "./controllers/cron";
22
import { ConfigManager } from "./utils/config/config-manager";
3-
import { EnvConfigSource } from "./utils/config/sources/env-config.source";
4-
import { DbConfigSource } from "./utils/config/sources/db-config.source";
5-
import { MySQLDB } from "./utils/db/mysql.db";
63

74
async function bootstrap() {
85
const configManager = ConfigManager.getInstance();
9-
configManager.addSource(new EnvConfigSource());
10-
11-
const db = await MySQLDB.getInstance({
12-
host: process.env.DB_HOST,
13-
port: Number(process.env.DB_PORT),
14-
user: process.env.DB_USER,
15-
password: process.env.DB_PASSWORD,
16-
database: process.env.DB_DATABASE,
17-
});
18-
configManager.addSource(new DbConfigSource(db));
6+
await configManager.initDefaultConfigSources();
197

208
startCronJobs();
219
}

src/test.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,8 @@ import { WeixinAIBenchWorkflow } from "./services/weixin-aibench.workflow";
77
import { WeixinHelloGithubWorkflow } from "./services/weixin-hellogithub.workflow";
88
async function bootstrap() {
99
const configManager = ConfigManager.getInstance();
10-
configManager.addSource(new EnvConfigSource());
10+
await configManager.initDefaultConfigSources();
1111

12-
const db = await MySQLDB.getInstance({
13-
host: process.env.DB_HOST,
14-
port: Number(process.env.DB_PORT),
15-
user: process.env.DB_USER,
16-
password: process.env.DB_PASSWORD,
17-
database: process.env.DB_DATABASE,
18-
});
19-
configManager.addSource(new DbConfigSource(db));
2012

2113
const weixinWorkflow = new WeixinWorkflow();
2214

src/utils/config/config-manager.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { IConfigSource } from "./interfaces/config-source.interface";
2-
2+
import { DbConfigSource } from "./sources/db-config.source";
3+
import { EnvConfigSource } from "./sources/env-config.source";
4+
import { MySQLDB } from "../db/mysql.db";
35
export class ConfigurationError extends Error {
46
constructor(message: string) {
57
super(message);
@@ -20,7 +22,7 @@ export class ConfigManager {
2022
delayMs: 1000,
2123
};
2224

23-
private constructor() {}
25+
private constructor() { }
2426

2527
public static getInstance(): ConfigManager {
2628
if (!ConfigManager.instance) {
@@ -49,7 +51,7 @@ export class ConfigManager {
4951
options: RetryOptions
5052
): Promise<T | null> {
5153
let lastError: Error | null = null;
52-
54+
5355
for (let attempt = 1; attempt <= options.maxAttempts; attempt++) {
5456
try {
5557
const value = await source.get<T>(key);
@@ -65,6 +67,21 @@ export class ConfigManager {
6567
console.warn(`Failed to get config "${key}" after ${options.maxAttempts} attempts. Last error: ${lastError?.message}`);
6668
return null;
6769
}
70+
public async initDefaultConfigSources(): Promise<void> {
71+
// 环境变量
72+
this.addSource(new EnvConfigSource());
73+
// Database
74+
if (await this.get<boolean>('ENABLE_DB')) {
75+
const db = await MySQLDB.getInstance({
76+
host: process.env.DB_HOST,
77+
port: Number(process.env.DB_PORT),
78+
user: process.env.DB_USER,
79+
password: process.env.DB_PASSWORD,
80+
database: process.env.DB_DATABASE,
81+
});
82+
this.addSource(new DbConfigSource(db));
83+
}
84+
}
6885

6986
/**
7087
* 获取配置值

0 commit comments

Comments
 (0)