提交图

8 次代码提交

作者 SHA1 备注 提交日期
XuqmGroup
f5019d11e8 fix: 修复 IssueResponse 构造函数缺少 type 参数
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-19 01:35:35 +08:00
XuqmGroup
5b1e04b6d1 feat: update-service 签名验证 + bugcollect 统计图表 API + 修复字段映射
- update-service: 集成 AppSignatureAuthFilter 签名验证
- update-service: 添加 TenantAppSecretResolver
- bugcollect: 新增 /statistics 统计 API 端点
- bugcollect: 修复 OverviewResponse 字段名(crashRateTrend/topIssues/crashRate)
- bugcollect: 修复 IssueResponse 添加 type 字段
- bugcollect: 修复 affectedUsers 语义(从 openIssues 改为真正的受影响用户数)
- bugcollect: 新增 StatisticsResponse DTO
- bugcollect: LogIssueRepository 新增统计查询方法

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-19 01:26:36 +08:00
XuqmGroup
e0e8dcb092 fix(bugcollect): 修复 queryEvents 中 IssueEventResponse 构造参数不匹配
commit 8770f50 重构 IssueEventResponse 为 ExceptionInfo 嵌套结构(20→16字段),
但 queryEvents 方法的内联构造调用未同步更新,导致 Jenkins 构建失败:
  constructor IssueEventResponse cannot be applied to given types

修复:将内联构造改为匹配新 record 的 16 参数调用,device 字段使用 parseJsonField 处理。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 11:23:24 +08:00
XuqmGroup
fbc9d02e2a feat(bugcollect): 新增 PUT /issues/{id}/reopen 接口
- LogService.reopenIssue() 将状态设回 open
- LogController 暴露 /issues/{id}/reopen 端点

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 10:47:51 +08:00
XuqmGroup
8770f505f7 fix(bugcollect): 修复 BugCollect-API-v1-Review 全量37项问题
服务端:
- IssueResponse 移除 isResolved,统一使用 status 字段
- IssueEventResponse 重构为 ExceptionInfo 嵌套结构,breadcrumbs/tags/device 序列化为 Object
- IssueResponse 新增 affectedUsers 字段,通过 log_issue_users 去重计数
- WebhookResponse 将 secret 替换为 hasSecret boolean
- WebhookRequest 新增 secret 字段
- LogWebhookEntity 新增 secret 列
- 新增 LogIssueUserEntity / LogIssueUserRepository 实现 affectedUsers 去重
- LogIssueRepository.findByFilters 新增 assignee、environment 过滤
- LogService.queryIssues 新增 assignee、environment 参数
- LogService.toIssueResponse 修正 IssueResponse 构造(移除 isResolved)
- LogService.toIssueEventResponse 修正 ExceptionInfo 构造,JSON 字段反序列化为 Object
- LogController:assign 改为 @RequestBody;GET /issues 新增 assignee/environment 参数;upload 新增 bundleVersion 参数
- WebhookService:事件类型匹配改为 issue.created/issue.fatal/issue.error/issue.warning/issue.updated;新增 HMAC-SHA256 X-BugCollect-Signature 签名;toResponse 修正为 hasSecret
- SourcemapService:按平台生成正确后缀(.android.bundle.map/.ios.bundle.map);新增 bundleVersion 参数;200MB 大小限制;.map 扩展名校验
- V4 迁移 SQL:log_issue_users 表、log_webhooks.secret 列、log_sessions 表、event_id 索引

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 09:26:12 +08:00
XuqmGroup
696a50aae8 fix(bugcollect): getIssueDetail 补全 events 列表,修复 Web 控制台事件列表为空
toIssueResponse 中 events 始终传 null,导致 GET /issues/{id} 返回的 events 字段为空。
getIssueDetail 现在主动查询最近 20 条 IssueEvent 并填充到响应中。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 08:48:48 +08:00
XuqmGroup
198dc7f960 feat(bugcollect): implement BugCollect API v1.1.0 full stack
- LogController: 新增 /issues/{id}/events, /issues/{id}/trend, 管理接口
  (resolve/ignore/assign/bulk),queryIssues 改用 level/status/q 参数
- LogService: 全面重写,eventId 幂等、breadcrumbs 存储、affectedUsers 计数、
  Issue status 管理、getIssueEvents/getIssueTrend 独立接口
- Entity: LogIssueEventEntity 增加 eventId/exceptionType/exceptionValue/breadcrumbs;
  LogIssueEntity 增加 status/affectedUsers/assignee;LogEventEntity 增加 eventId
- Repository: LogIssueEventRepository/LogIssueRepository/LogEventRepository 新增
  idempotency/filter/trend/bulk 查询方法
- DTO: IssueActionRequest/IssueTrendResponse 新增;IssueResponse/IssueEventResponse 扩展
- V3 migration: log_issue_events/log_issues/log_events 结构升级

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 15:30:05 +08:00
XuqmGroup
5b020525ac refactor: xuqm-log-service → xuqm-bugcollect-service
- 目录/包名/API路径/数据库/容器名全部重命名
- 26个Java文件包名 com.xuqm.log → com.xuqm.bugcollect
- API前缀 /log/v1/ → /bugcollect/v1/
- mvn compile 通过

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 17:39:13 +08:00