refactor:项目架构重构和命名规范化
- 统一文件命名为snake_case格式(kebab-case snake_case) - 重构zulip模块为zulip_core,明确Core层职责 - 重构user-mgmt模块为user_mgmt,统一命名规范 - 调整模块依赖关系,优化架构分层 - 删除过时的文件和目录结构 - 更新相关文档和配置文件 本次重构涉及大量文件重命名和模块重组, 旨在建立更清晰的项目架构和统一的命名规范。
This commit is contained in:
69
src/business/auth/current_user.decorator.ts
Normal file
69
src/business/auth/current_user.decorator.ts
Normal file
@@ -0,0 +1,69 @@
|
||||
/**
|
||||
* 当前用户装饰器
|
||||
*
|
||||
* 功能描述:
|
||||
* - 从请求上下文中提取当前认证用户信息
|
||||
* - 简化控制器中获取用户信息的操作
|
||||
* - 支持获取用户对象的特定属性
|
||||
*
|
||||
* 职责分离:
|
||||
* - 专注于用户信息提取和参数装饰
|
||||
* - 提供类型安全的用户信息访问
|
||||
* - 简化控制器方法的参数处理
|
||||
*
|
||||
* 使用示例:
|
||||
* ```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<AuthenticatedRequest>();
|
||||
const user = request.user;
|
||||
|
||||
return data ? user?.[data] : user;
|
||||
},
|
||||
);
|
||||
Reference in New Issue
Block a user