/** * 当前用户装饰器 * * 功能描述: * - 从请求上下文中提取当前认证用户信息 * - 简化控制器中获取用户信息的操作 * - 支持获取用户对象的特定属性 * * 职责分离: * - 专注于用户信息提取和参数装饰 * - 提供类型安全的用户信息访问 * - 简化控制器方法的参数处理 * * 使用示例: * ```typescript * @Get('profile') * @UseGuards(JwtAuthGuard) * getProfile(@CurrentUser() user: JwtPayload) { * return { user }; * } * ``` * * 最近修改: * - 2026-01-07: 代码规范优化 - 文件夹扁平化,移除单文件文件夹结构 * - 2026-01-07: 代码规范优化 - 文件重命名为snake_case格式,更新注释规范 * * @author moyin * @version 1.0.2 * @since 2025-01-05 * @lastModified 2026-01-07 */ import { createParamDecorator, ExecutionContext } from '@nestjs/common'; import { JwtPayload } from '../../core/login_core/login_core.service'; import { AuthenticatedRequest } from './jwt_auth.guard'; /** * 当前用户装饰器实现 * * 业务逻辑: * 1. 从执行上下文获取HTTP请求对象 * 2. 提取请求中的用户信息(由JwtAuthGuard注入) * 3. 根据data参数返回完整用户对象或特定属性 * 4. 提供类型安全的用户信息访问 * * @param data 可选的属性名,用于获取用户对象的特定属性 * @param ctx 执行上下文,包含HTTP请求信息 * @returns JwtPayload | any 用户信息或用户的特定属性 * @throws 无异常抛出,依赖JwtAuthGuard确保用户信息存在 * * @example * ```typescript * // 获取完整用户对象 * @Get('profile') * getProfile(@CurrentUser() user: JwtPayload) { } * * // 获取特定属性 * @Get('username') * getUsername(@CurrentUser('username') username: string) { } * ``` */ export const CurrentUser = createParamDecorator( (data: keyof JwtPayload | undefined, ctx: ExecutionContext) => { const request = ctx.switchToHttp().getRequest(); const user = request.user; return data ? user?.[data] : user; }, );