Files
whale-town-end/src/business/admin/admin_operation_log.entity.ts
moyin 6924416bbd feat:实现管理员系统核心功能
- 添加管理员数据库管理控制器和服务
- 实现管理员操作日志记录系统
- 添加数据库异常处理过滤器
- 完善管理员权限验证和响应格式
- 添加全面的属性测试覆盖
2026-01-08 23:05:34 +08:00

102 lines
3.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 管理员操作日志实体
*
* 功能描述:
* - 记录管理员的所有数据库操作
* - 提供详细的审计跟踪
* - 支持操作前后数据状态记录
* - 便于安全审计和问题排查
*
* 职责分离:
* - 数据持久化:操作日志的数据库存储
* - 审计跟踪:完整的操作历史记录
* - 安全监控:敏感操作的详细记录
* - 问题排查:操作异常的详细信息
*
* 最近修改:
* - 2026-01-08: 注释规范优化 - 修正@author字段更新版本号和修改记录 (修改者: moyin)
* - 2026-01-08: 功能新增 - 创建管理员操作日志实体 (修改者: assistant)
*
* @author moyin
* @version 1.0.1
* @since 2026-01-08
* @lastModified 2026-01-08
*/
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, Index } from 'typeorm';
@Entity('admin_operation_logs')
@Index(['admin_user_id', 'created_at'])
@Index(['operation_type', 'created_at'])
@Index(['target_type', 'target_id'])
export class AdminOperationLog {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ type: 'varchar', length: 50, comment: '管理员用户ID' })
@Index()
admin_user_id: string;
@Column({ type: 'varchar', length: 100, comment: '管理员用户名' })
admin_username: string;
@Column({ type: 'varchar', length: 50, comment: '操作类型 (CREATE/UPDATE/DELETE/QUERY/BATCH)' })
operation_type: 'CREATE' | 'UPDATE' | 'DELETE' | 'QUERY' | 'BATCH';
@Column({ type: 'varchar', length: 100, comment: '目标资源类型 (users/user_profiles/zulip_accounts)' })
target_type: string;
@Column({ type: 'varchar', length: 50, nullable: true, comment: '目标资源ID' })
target_id?: string;
@Column({ type: 'varchar', length: 200, comment: '操作描述' })
operation_description: string;
@Column({ type: 'varchar', length: 100, comment: 'HTTP方法和路径' })
http_method_path: string;
@Column({ type: 'json', nullable: true, comment: '请求参数' })
request_params?: Record<string, any>;
@Column({ type: 'json', nullable: true, comment: '操作前数据状态' })
before_data?: Record<string, any>;
@Column({ type: 'json', nullable: true, comment: '操作后数据状态' })
after_data?: Record<string, any>;
@Column({ type: 'varchar', length: 20, comment: '操作结果 (SUCCESS/FAILED)' })
operation_result: 'SUCCESS' | 'FAILED';
@Column({ type: 'text', nullable: true, comment: '错误信息' })
error_message?: string;
@Column({ type: 'varchar', length: 50, nullable: true, comment: '错误码' })
error_code?: string;
@Column({ type: 'int', comment: '操作耗时(毫秒)' })
duration_ms: number;
@Column({ type: 'varchar', length: 45, nullable: true, comment: '客户端IP地址' })
client_ip?: string;
@Column({ type: 'varchar', length: 500, nullable: true, comment: '用户代理' })
user_agent?: string;
@Column({ type: 'varchar', length: 50, comment: '请求ID' })
request_id: string;
@Column({ type: 'json', nullable: true, comment: '额外的上下文信息' })
context?: Record<string, any>;
@CreateDateColumn({ comment: '创建时间' })
created_at: Date;
@Column({ type: 'boolean', default: false, comment: '是否为敏感操作' })
is_sensitive: boolean;
@Column({ type: 'int', default: 0, comment: '影响的记录数量' })
affected_records: number;
@Column({ type: 'varchar', length: 100, nullable: true, comment: '批量操作的批次ID' })
batch_id?: string;
}