feat(api): USER_SYNC_SOURCE switch wires mock/http user source (G4)

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-09-22 16:28:55 +08:00
parent d732caa739
commit 8c255eb747
3 changed files with 24 additions and 8 deletions
+12 -8
View File
@@ -1,12 +1,13 @@
// services/api/src/user-sync/user-sync.module.ts —— 用户同步域模块(P4a Task 7)。
// 仅 cn 装配(AppCnModule import;ov 入口不碰——用户身份是 cn 单域事实)。
// 装配:SyncLock(cn Redis 互斥)、MockUserSource(USER_SOURCE 端口实现,
// G4 后替换 provider 即切真实源)、UserSyncEngine(批次引擎)、
// UserSyncScheduler(setInterval 定时触发,仅 cn bootstrap 启动)、
// UserSyncAdminService + UserSyncController(/admin/user-sync 端点)。
// useExisting 装配端口:引擎只依赖 UserSourcePort 符号,e2e 经
// app.get(MockUserSource) 注入场景(mock-user-source.ts 文件头)。
// 源装配(G4 后双源):USER_SYNC_SOURCE=http → HttpUserSource(uniservice
// 真实接口),否则/缺省 → MockUserSource(e2e/本地默认——test 经
// app.get(MockUserSource) 注入场景,见 mock-user-source.ts 文件头)。
// 其余:SyncLock(cn Redis 互斥)、UserSyncEngine、UserSyncScheduler
// (setInterval 定时触发,仅 cn bootstrap 启动)、UserSyncAdminService +
// UserSyncController(/admin/user-sync 端点)。
import { Module } from '@nestjs/common';
import { HttpUserSource } from './http-user-source';
import { MockUserSource } from './mock-user-source';
import { SyncLock } from './sync-lock';
import { UserSyncAdminService } from './user-sync-admin.service';
@@ -14,12 +15,15 @@ import { UserSyncController } from './user-sync.controller';
import { UserSyncEngine, UserSyncScheduler } from './user-sync.service';
import { USER_SOURCE } from './user-source.port';
const useHttpSource = process.env.USER_SYNC_SOURCE === 'http';
@Module({
controllers: [UserSyncController],
providers: [
SyncLock,
MockUserSource,
{ provide: USER_SOURCE, useExisting: MockUserSource },
...(useHttpSource
? [HttpUserSource, { provide: USER_SOURCE, useExisting: HttpUserSource }]
: [MockUserSource, { provide: USER_SOURCE, useExisting: MockUserSource }]),
UserSyncEngine,
UserSyncScheduler,
UserSyncAdminService,