style(zulip): 优化zulip业务模块代码规范

范围:src/business/zulip/
- 统一命名规范和注释格式
- 完善JSDoc注释和参数说明
- 优化代码结构和缩进
- 清理未使用的导入和变量
- 更新修改记录和版本信息
This commit is contained in:
moyin
2026-01-12 19:42:38 +08:00
parent 03f0cd6bab
commit efac782243
6 changed files with 329 additions and 50 deletions

View File

@@ -5,10 +5,25 @@
* - 提供Zulip账号关联管理的REST API接口
* - 支持CRUD操作和批量管理
* - 提供账号验证和统计功能
* - 集成性能监控和结构化日志记录
* - 实现统一的错误处理和响应格式
*
* 职责分离:
* - API接口提供RESTful风格的HTTP接口
* - 参数验证使用DTO进行请求参数验证
* - 业务调用调用Service层处理业务逻辑
* - 响应格式统一API响应格式和错误处理
* - 性能监控:记录接口调用耗时和性能指标
* - 日志记录使用AppLoggerService记录结构化日志
*
* 最近修改:
* - 2026-01-12: 性能优化 - 集成AppLoggerService和性能监控优化错误处理
* - 2025-01-07: 初始创建 - 实现基础的CRUD和管理接口
*
* @author angjustinl
* @version 1.0.0
* @version 1.1.0
* @since 2025-01-07
* @lastModified 2026-01-12
*/
import {
@@ -24,6 +39,7 @@ import {
HttpStatus,
HttpCode,
Inject,
Req,
} from '@nestjs/common';
import {
ApiTags,
@@ -33,9 +49,11 @@ import {
ApiParam,
ApiQuery,
} from '@nestjs/swagger';
import { Request } from 'express';
import { JwtAuthGuard } from '../auth/jwt_auth.guard';
import { ZulipAccountsService } from '../../core/db/zulip_accounts/zulip_accounts.service';
import { ZulipAccountsMemoryService } from '../../core/db/zulip_accounts/zulip_accounts_memory.service';
import { AppLoggerService } from '../../core/utils/logger/logger.service';
import {
CreateZulipAccountDto,
UpdateZulipAccountDto,
@@ -54,9 +72,58 @@ import {
@UseGuards(JwtAuthGuard)
@ApiBearerAuth('JWT-auth')
export class ZulipAccountsController {
private readonly requestLogger: any;
constructor(
@Inject('ZulipAccountsService') private readonly zulipAccountsService: any,
) {}
@Inject(AppLoggerService) private readonly logger: AppLoggerService,
) {
this.logger.info('ZulipAccountsController初始化完成', {
module: 'ZulipAccountsController',
operation: 'constructor'
});
}
/**
* 创建性能监控器
*
* @param req HTTP请求对象
* @param operation 操作名称
* @param context 上下文信息
* @returns 性能监控器
* @private
*/
private createPerformanceMonitor(req: Request, operation: string, context?: Record<string, any>) {
const startTime = Date.now();
const requestLogger = this.logger.bindRequest(req, 'ZulipAccountsController');
requestLogger.info(`开始${operation}`, context);
return {
success: (additionalContext?: Record<string, any>) => {
const duration = Date.now() - startTime;
requestLogger.info(`${operation}成功`, {
...context,
...additionalContext,
duration
});
},
error: (error: unknown, additionalContext?: Record<string, any>) => {
const duration = Date.now() - startTime;
const errorMessage = error instanceof Error ? error.message : String(error);
requestLogger.error(
`${operation}失败`,
error instanceof Error ? error.stack : undefined,
{
...context,
...additionalContext,
error: errorMessage,
duration
}
);
}
};
}
/**
* 创建Zulip账号关联
@@ -80,8 +147,27 @@ export class ZulipAccountsController {
description: '关联已存在',
})
@HttpCode(HttpStatus.CREATED)
async create(@Body() createDto: CreateZulipAccountDto): Promise<ZulipAccountResponseDto> {
return this.zulipAccountsService.create(createDto);
async create(
@Req() req: Request,
@Body() createDto: CreateZulipAccountDto
): Promise<ZulipAccountResponseDto> {
const monitor = this.createPerformanceMonitor(req, '创建Zulip账号关联', {
gameUserId: createDto.gameUserId,
zulipUserId: createDto.zulipUserId,
zulipEmail: createDto.zulipEmail
});
try {
const result = await this.zulipAccountsService.create(createDto);
monitor.success({
accountId: result.id,
status: result.status
});
return result;
} catch (error) {
monitor.error(error);
throw error;
}
}
/**
@@ -480,8 +566,21 @@ export class ZulipAccountsController {
description: '获取成功',
type: ZulipAccountStatsResponseDto,
})
async getStatusStatistics(): Promise<ZulipAccountStatsResponseDto> {
return this.zulipAccountsService.getStatusStatistics();
async getStatusStatistics(@Req() req: Request): Promise<ZulipAccountStatsResponseDto> {
const monitor = this.createPerformanceMonitor(req, '获取账号状态统计');
try {
const result = await this.zulipAccountsService.getStatusStatistics();
monitor.success({
total: result.total,
active: result.active,
error: result.error
});
return result;
} catch (error) {
monitor.error(error);
throw error;
}
}
/**