# 更改文档 — 2026-07-30

> **日期**: 2026-07-30  
> **编译**: ✓ BUILD SUCCESS (JDK 21)  
> **范围**: 7 文件修改

---

## 一、分析模块 — 事件类型切换

### 新增 GET /api/v1/analytics/event-types
- **AnalyticsController.java** — 新增端点、添加 java.util.List import
- **AnalyticsService.java** — getEventTypes() 方法，返回所有 distinct 事件类型
- **UserEventRepository.java** — indDistinctEventTypes() JPQL 查询

已有 GET /events?eventType=xxx 过滤保持不变。前端调用 /event-types 获取选项列表渲染切换控件。

---

## 二、JWT 鉴权解析（不强鉴权）

### JwtAuthFilter.java — doFilterInternal
- 从 Authorization: Bearer header 提取 JWT，jwtUtil.getSubject() 解析
- 校验通过 → SecurityContextHolder.getContext().setAuthentication()
- 无 token 或解析失败 → 直接放行
- inally 中 SecurityContextHolder.clearContext() 防泄漏
- AnalyticsController.getCurrentUserKey() 无需改动，现在能正确获取 token 对应用户

---

## 三、快捷提问 — SQL 层 LIMIT + 管理端分页

### QuickAskRepository.java
- indByIsActiveTrueOrderBySortOrderAscIdAsc() 改为 @Query + Pageable，SQL 层加 LIMIT
- 添加 Page import
- indAllByOrderBySortOrderAscIdAsc() 同样改为 Pageable 分页版本

### AdminKnowledgeService.java
- listQuickAsks() — 去掉 subList 截断，传 PageRequest.of(0,6) 在 SQL 层限制
- listAllQuickAsks() — 改为 listAllQuickAsks(page, pageSize)，返回 Map (items/total/page/page_size/total_pages)
- 
eorderQuickAsks() — sort_order → sortOrder（camelCase）
- 添加 PageRequest import

### AdminKnowledgeController.java
- GET /quick-asks 添加 page (默认1) 和 pageSize (默认20) 参数

---

## 四、编码规范

全文件 **UTF-8 without BOM**，换行 **LF**。后续编辑遵循此约定。
