feat: 完成PHP到NestJS的100%功能迁移

- 迁移25个模块,包含95个控制器和160个服务
- 新增验证码管理、登录配置、云编译等模块
- 完善认证授权、会员管理、支付系统等核心功能
- 实现完整的队列系统、配置管理、监控体系
- 确保100%功能对齐和命名一致性
- 支持生产环境部署
This commit is contained in:
万物街
2025-09-10 08:04:28 +08:00
parent a2d6a47601
commit 7a20a0c50a
551 changed files with 35628 additions and 2025 deletions

View File

@@ -189,7 +189,10 @@ function loadFromEnv(): Partial<AppConfig> {
},
database: {
host: process.env.DB_HOST || defaultConfig.database.host,
port: parseInt(process.env.DB_PORT || String(defaultConfig.database.port), 10),
port: parseInt(
process.env.DB_PORT || String(defaultConfig.database.port),
10,
),
username: process.env.DB_USERNAME || defaultConfig.database.username,
password: process.env.DB_PASSWORD || defaultConfig.database.password,
database: process.env.DB_DATABASE || defaultConfig.database.database,
@@ -198,16 +201,22 @@ function loadFromEnv(): Partial<AppConfig> {
},
redis: {
host: process.env.REDIS_HOST || defaultConfig.redis.host,
port: parseInt(process.env.REDIS_PORT || String(defaultConfig.redis.port), 10),
port: parseInt(
process.env.REDIS_PORT || String(defaultConfig.redis.port),
10,
),
password: process.env.REDIS_PASSWORD || defaultConfig.redis.password,
db: parseInt(process.env.REDIS_DB || String(defaultConfig.redis.db), 10),
keyPrefix: process.env.REDIS_KEY_PREFIX || defaultConfig.redis.keyPrefix,
},
kafka: {
clientId: process.env.KAFKA_CLIENT_ID || defaultConfig.kafka.clientId,
brokers: (process.env.KAFKA_BROKERS || defaultConfig.kafka.brokers.join(',')).split(','),
brokers: (
process.env.KAFKA_BROKERS || defaultConfig.kafka.brokers.join(',')
).split(','),
groupId: process.env.KAFKA_GROUP_ID || defaultConfig.kafka.groupId,
topicPrefix: process.env.KAFKA_TOPIC_PREFIX || defaultConfig.kafka.topicPrefix,
topicPrefix:
process.env.KAFKA_TOPIC_PREFIX || defaultConfig.kafka.topicPrefix,
},
jwt: {
secret: process.env.JWT_SECRET || defaultConfig.jwt.secret,
@@ -215,8 +224,14 @@ function loadFromEnv(): Partial<AppConfig> {
algorithm: process.env.JWT_ALGORITHM || defaultConfig.jwt.algorithm,
},
cache: {
ttl: parseInt(process.env.CACHE_TTL || String(defaultConfig.cache.ttl), 10),
maxItems: parseInt(process.env.CACHE_MAX_ITEMS || String(defaultConfig.cache.maxItems), 10),
ttl: parseInt(
process.env.CACHE_TTL || String(defaultConfig.cache.ttl),
10,
),
maxItems: parseInt(
process.env.CACHE_MAX_ITEMS || String(defaultConfig.cache.maxItems),
10,
),
prefix: process.env.CACHE_PREFIX || defaultConfig.cache.prefix,
},
logging: {
@@ -226,31 +241,49 @@ function loadFromEnv(): Partial<AppConfig> {
},
upload: {
path: process.env.UPLOAD_PATH || defaultConfig.upload.path,
maxSize: parseInt(process.env.UPLOAD_MAX_SIZE || String(defaultConfig.upload.maxSize), 10),
allowedTypes: process.env.UPLOAD_ALLOWED_TYPES?.split(',') || defaultConfig.upload.allowedTypes,
maxSize: parseInt(
process.env.UPLOAD_MAX_SIZE || String(defaultConfig.upload.maxSize),
10,
),
allowedTypes:
process.env.UPLOAD_ALLOWED_TYPES?.split(',') ||
defaultConfig.upload.allowedTypes,
},
throttle: {
ttl: parseInt(process.env.THROTTLE_TTL || String(defaultConfig.throttle.ttl), 10),
limit: parseInt(process.env.THROTTLE_LIMIT || String(defaultConfig.throttle.limit), 10),
ttl: parseInt(
process.env.THROTTLE_TTL || String(defaultConfig.throttle.ttl),
10,
),
limit: parseInt(
process.env.THROTTLE_LIMIT || String(defaultConfig.throttle.limit),
10,
),
},
health: {
startupCheckEnabled: (process.env.STARTUP_HEALTH_CHECK || 'true').toLowerCase() !== 'false',
startupCheckEnabled:
(process.env.STARTUP_HEALTH_CHECK || 'true').toLowerCase() !== 'false',
startupTimeoutMs: parseInt(
process.env.STARTUP_HEALTH_TIMEOUT_MS || String(defaultConfig.health.startupTimeoutMs),
process.env.STARTUP_HEALTH_TIMEOUT_MS ||
String(defaultConfig.health.startupTimeoutMs),
10,
),
},
thirdParty: {
storage: {
provider: process.env.STORAGE_PROVIDER || defaultConfig.thirdParty.storage.provider,
provider:
process.env.STORAGE_PROVIDER ||
defaultConfig.thirdParty.storage.provider,
config: JSON.parse(process.env.STORAGE_CONFIG || '{}'),
},
payment: {
provider: process.env.PAYMENT_PROVIDER || defaultConfig.thirdParty.payment.provider,
provider:
process.env.PAYMENT_PROVIDER ||
defaultConfig.thirdParty.payment.provider,
config: JSON.parse(process.env.PAYMENT_CONFIG || '{}'),
},
sms: {
provider: process.env.SMS_PROVIDER || defaultConfig.thirdParty.sms.provider,
provider:
process.env.SMS_PROVIDER || defaultConfig.thirdParty.sms.provider,
config: JSON.parse(process.env.SMS_CONFIG || '{}'),
},
},
@@ -260,7 +293,10 @@ function loadFromEnv(): Partial<AppConfig> {
/**
* 配置合并函数
*/
function mergeConfig(defaultConfig: AppConfig, envConfig: Partial<AppConfig>): AppConfig {
function mergeConfig(
defaultConfig: AppConfig,
envConfig: Partial<AppConfig>,
): AppConfig {
return {
...defaultConfig,
...envConfig,
@@ -275,8 +311,14 @@ function mergeConfig(defaultConfig: AppConfig, envConfig: Partial<AppConfig>): A
throttle: { ...defaultConfig.throttle, ...envConfig.throttle },
health: { ...defaultConfig.health, ...envConfig.health },
thirdParty: {
storage: { ...defaultConfig.thirdParty.storage, ...envConfig.thirdParty?.storage },
payment: { ...defaultConfig.thirdParty.payment, ...envConfig.thirdParty?.payment },
storage: {
...defaultConfig.thirdParty.storage,
...envConfig.thirdParty?.storage,
},
payment: {
...defaultConfig.thirdParty.payment,
...envConfig.thirdParty?.payment,
},
sms: { ...defaultConfig.thirdParty.sms, ...envConfig.thirdParty?.sms },
},
};
@@ -367,4 +409,4 @@ export const config = {
},
};
export default appConfig;
export default appConfig;

View File

@@ -14,7 +14,12 @@ import { SwaggerService } from '../modules/swagger/swaggerService';
NestConfigModule.forRoot({
isGlobal: true,
load: [() => appConfig],
envFilePath: ['.env.local', '.env.development', '.env.production', '.env'],
envFilePath: [
'.env.local',
'.env.development',
'.env.production',
'.env',
],
}),
],
controllers: [ConfigController, DocsNavigationController, SwaggerController],
@@ -35,4 +40,4 @@ import { SwaggerService } from '../modules/swagger/swaggerService';
'APP_CONFIG',
],
})
export class ConfigModule {}
export class ConfigModule {}

View File

@@ -1,4 +1,4 @@
// 核心配置导出
export { appConfig, config } from './appConfig';
export type { AppConfig } from './appConfig';
export { ConfigModule } from './configModule';
export { ConfigModule } from './configModule';