提交图

215 次代码提交

作者 SHA1 备注 提交日期
XuqmGroup
c9ce748c51 fix(tenant-service): config.xuqm serverUrl 使用独立的平台 URL 属性
新增 sdk.platform-public-base-url 属性(默认回退到 license.public-base-url)。
公有环境中 license 服务(auth.dev.xuqinmin.com)与平台 API(dev.xuqinmin.com)是
不同的域,用 licensePublicBaseUrl 作 serverUrl 会导致 SDK 无法拉取平台配置。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 16:59:39 +08:00
XuqmGroup
60b5776f9b fix(tenant-service): config.xuqm 始终写入 serverUrl 字段
无论是否私有化部署,生成的 config.xuqm 均携带 serverUrl,
与 Android/iOS/RN SDK 的 ConfigFile 读取字段保持一致。
移除仅在私有化模式下才写 serverUrl 的条件分支;
同时去掉不再被 SDK 读取的 baseUrl 字段,避免混淆。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 16:44:16 +08:00
XuqmGroup
7c360c407b fix(bugcollect): WebhookService 使用 getRelease() 替代不存在的 getAppVersion()
LogIssueEntity 无 getAppVersion(),应使用 getRelease(),
导致上次 Jenkins 构建编译失败。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 15:35:34 +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
92f2c7c88b feat(update-service): 添加更新服务配置文件
- 配置服务器端口为8084
- 设置MySQL数据库连接参数包括URL、用户名、密码和驱动
- 配置HikariCP连接池参数如最小空闲连接、最大池大小等
- 启用Flyway数据库迁移并配置基线版本和历史表
- 设置JWT密钥和过期时间
- 配置文件上传目录和基础URL
- 添加租户服务URL和内部令牌配置
- 启用健康检查和信息端点监控
2026-06-17 13:55:55 +08:00
XuqmGroup
7b0689c230 fix(docker): 加 ARG CACHE_BUST 强制每次 commit 重建源码层
Windows BuildKit --cache-from 不能正确失效源码 COPY 层,
通过传入 git SHA 作为 CACHE_BUST 值来强制失效。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 13:16:37 +08:00
XuqmGroup
d127ce785f fix(update-service): 服务开通检查改为查 t_feature_service.enabled,而非 existsByAppKey
existsByAppKey 在服务关闭但历史版本仍存在时会误判为已开通。
改为调 tenant-service 内部接口 /services/{platform}/UPDATE 查 enabled 字段。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 13:02:28 +08:00
XuqmGroup
3cf5e294aa feat(update-service): 更新服务未开通时返回 error 40404,修复多处编译错误
- AppVersionController: appKey 无任何版本记录时返回 ApiResponse.error(40404, "更新服务未开通")
- AppVersionRepository: 新增 existsByAppKey() 方法
- SchemaMigrationRunner: BeanFactoryPostProcessor → ApplicationRunner,修复 DataSource 启动时序问题
- pom.xml: 补全 spring-boot-starter-websocket 依赖
- 修复编译错误: GrayMemberService JsonNode import、StoreSubmissionService objectMapper→mapper、PublishConfigService groupName 方法不存在、RnBundleController memberCount 未定义、UnifiedReleaseController StoreResult 类型不匹配、UpdateAssetService NoSuchAlgorithmException 未捕获
- application.yml: 关闭 Flyway(原始配置),ddl-auto 改回 update

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 12:21:54 +08:00
XuqmGroup
8e041d50c1 fix(tenant-service): 修复 BUG_COLLECT 写入 service_type ENUM 列失败
V1 DDL 将两张表的相关列更新为 ENUM 定义(与实际数据库一致);
新增 V2 迁移将 BUG_COLLECT 加入 t_feature_service 和
t_service_activation_request 的 service_type ENUM。

已在线上执行 ALTER TABLE 修复,服务无需重启。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 10:02:05 +08:00
XuqmGroup
4629c45941 feat: 注册 BugCollect 为服务类型
- ServiceType 枚举添加 BUG_COLLECT
- FeatureServiceManager: BUG_COLLECT 作为 app-wide 服务
- SdkConfigController: 返回 bugCollectApiUrl 和 bugCollectEnabled
- FeatureServiceController: updateConfig 支持 BUG_COLLECT

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 18:54:14 +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
XuqmGroup
e7702fb443 docs: log-service → bugcollect-service 重命名
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 17:18:42 +08:00
XuqmGroup
83b61de334 fix: log-service 禁用 Spring Security
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 16:47:11 +08:00
XuqmGroup
bacd4b4d33 feat: log-service 禁用安全认证(日志上报接口)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 16:38:18 +08:00
XuqmGroup
a7242f56c1 fix: log-service entity boolean TINYINT(1) 对齐 MySQL
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 15:39:16 +08:00
XuqmGroup
b6ad2ff6ae fix: log-service entity fingerprint CHAR(64) 对齐 Flyway migration
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 15:30:21 +08:00
XuqmGroup
f075201e45 feat: xuqm-log-service 纳入 Jenkins CI/CD
- Dockerfile: 添加 xuqm-log-service 构建支持
- Jenkinsfile: 添加 xuqm-log-service 到服务列表

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 13:56:42 +08:00
XuqmGroup
e6ef9801d2 docs: 更新 CLAUDE.md — xuqm-log-service 状态同步
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 13:27:09 +08:00
XuqmGroup
d0fe119999 docs(sdk): 添加 Android SDK 架构总览文档
- 新增架构总览文档,包含整体架构图和依赖关系
- 详细描述初始化流程(ContentProvider 自动和手动两种方式)
- 补充技术栈版本信息和发布说明
- 更新服务器端和Web端项目上下文文档
- 添加新模块 xuqm-log-service 的版本文件
- 在服务器端 POM 中注册 xuqm-log-service 模块
- 修复 Android SDK 字符串模板语法错误
- 修改服务器端 webhook 服务的 Redis 锁获取逻辑
2026-06-16 12:35:17 +08:00
XuqmGroup
8951b72cca feat(log-service): 补全 controller + service 层
Agent 5 补充:
- LogQueryController (issues/events/overview/funnel 查询接口)
- SdkController (SDK 入库接口)
- WebhookController (Webhook CRUD)
- IssueService / EventService / SourceMapService / WebhookService
- FunnelResponse / OverviewResponse / SourcemapUploadResponse DTOs
2026-06-16 12:14:53 +08:00
XuqmGroup
936664c9cd feat: xuqm-log-service 新建 — 日志/错误追踪服务
Agent 5 — xuqm-log-service:
- Spring Boot 3.x + MySQL + Redis
- 5 张表:log_issues、log_issue_events、log_events、log_sourcemaps、log_webhooks
- SDK 入库接口:POST /log/v1/issues/batch(指纹去重)、POST /log/v1/events/batch
- 查询接口:issues 列表/详情、高频/高危排行、事件流水、漏斗分析、概览统计
- SourceMap 上传:POST /log/v1/sourcemaps/upload
- Webhook CRUD + Redis SETNX 冷却逻辑
- Flyway 数据库迁移
2026-06-16 12:10:58 +08:00
XuqmGroup
336ce72c7a debug: add verbose logging to health check to diagnose tenant-web false positive
Logs container ID, all visible containers for each service, and inspect status
at each check interval. Will be removed after root cause is identified.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 02:09:49 +08:00
XuqmGroup
4bf0fefc67 fix: getNewestContainerId returns null when last-global container is different service
Docker applies -n N globally before label filter, so -n 1 with a service filter
returns empty if the most-recently-created container belongs to a different service.
Remove -n 1; docker ps without it sorts newest-first and the filter correctly
narrows to only the target service's containers.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 01:40:58 +08:00
XuqmGroup
9084831b2a fix(安全中心): 修复健康检查误判 force-recreate 旧容器为失败
force-recreate 会先停掉旧容器(status=exited),若此时健康检查
轮询到旧容器的 exited 状态,会误判新容器失败并触发不必要的回滚。

修复方式:
- 新增 getNewestContainerId() 在 compose up 后立即拿到新容器 ID
- waitForServiceStable 接受 containerId 参数,通过 docker inspect
  精确轮询新容器状态,完全隔离旧容器的干扰
- 退化路径(containerId=null)保留原有服务名轮询逻辑

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 01:18:01 +08:00
XuqmGroup
9a9524ac07 feat(安全中心): 一键更新增加健康检查与自动回滚
每个服务重建后轮询容器状态最长 60s:
- 容器保持 running 10s 以上 → 更新成功
- 容器已 exited → 立即触发回滚(retag 旧镜像 ID 重建容器)
- 超时未就绪 → 同样触发回滚

tenant-service 的自更新助手容器也包含相同逻辑:
60s 内不健康则 retag 旧镜像并重建,保证平台始终可访问。

拉取镜像前统一保存各服务旧镜像 ID(captureCurrentImageIds),
回滚时通过 docker tag <old-id> <image:tag> 恢复旧版本。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 00:54:02 +08:00
XuqmGroup
ffdb7c56fe fix(flyway): 各服务配置独立历史表名,解决共享数据库冲突
私有化部署所有服务共用同一 MySQL 库,Flyway 默认都写
flyway_schema_history,导致不同服务的 V1 checksum 互相
覆盖/冲突。改为每个服务使用独立的表名:
flyway_history_{tenant|im|file|update|license|push|demo}

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 00:05:31 +08:00
XuqmGroup
200f8ae54a feat: 引入 Flyway 数据库版本管理,替换 ddl-auto: update
所有服务(tenant/im/file/update/license/push/demo)统一:
- 添加 flyway-core + flyway-mysql 依赖
- ddl-auto 从 update 改为 validate
- 添加 V1__init.sql 基线(CREATE TABLE IF NOT EXISTS,幂等)
- baseline-on-migrate=true 兼容已有部署,存量库不重跑 V1

后续 Entity 变更须同步写 V(n+1) 迁移 SQL,Flyway 在容器
启动时自动按版本顺序执行,update.sh 无需任何改动。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 23:28:12 +08:00
XuqmGroup
ede000eac1 fix(dashboard): 统计应用数量时排除系统应用(is_default=1)
DashboardService.stats() 中过滤 isDefault=true 的系统应用,
与 AppService.listByTenant() 保持一致,避免控制台 dashboard
与应用列表页显示数量不符。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 23:09:26 +08:00
XuqmGroup
ce64c8fa60 fix: 修复私有化一键更新三个问题
1. Jenkinsfile: versions.json 补充 platformVersion 字段(取 tenant-service 版本),
   并为每个服务添加 changed 标记;私有部署 checkForUpdates 依赖此字段判断是否有新版本,
   缺失时始终返回 hasUpdate=false。

2. SystemUpdateService: dockerLogin 改为返回 boolean,凭据缺失/登录失败时
   中止更新流程(原来失败后继续,导致 docker compose pull 静默失败仍用旧镜像)。
   readRemoteVersions 新增 VERSIONS_MANIFEST_URL 远端拉取支持,
   私有服务器可在 .env 中配置后自动同步公有端版本清单。
   新增 migrate_v20260610_gray_mode_simplify_bookmark 迁移标记(实际 SQL 由 update-service 执行)。

3. SystemUpdateController: 新增 GET /api/system/versions/manifest 公开端点,
   公有服务器部署后即可作为私有服务器的 VERSIONS_MANIFEST_URL 目标地址。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 20:04:47 +08:00
XuqmGroup
e42a4e3172 ci: auto-infer SERVICE from Jenkins job name
Jobs named xuqmgroup-<service> (e.g. xuqmgroup-update-service) now
automatically build only that service without requiring manual param
selection. Falls back to params.SERVICE for manual runs or all-in-one job.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 19:30:49 +08:00
XuqmGroup
e774c4ef25 ci: per-service version files, DB migration support ready
- Each service now has its own VERSION.<service> file (all at 1.0.0)
- Jenkinsfile bumps each service's version independently
- versions.json updated per-service (no cross-service overwrite)
- Summary log shows all service:version pairs on success

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 19:26:46 +08:00
XuqmGroup
5593ad790e ci: auto semver versioning, remove manual params, add demo-service
- Remove VERSION_STRATEGY/CUSTOM_VERSION/CHANGELOG/DEPLOY params
- Auto patch-bump from VERSION file (reset to 1.0.0 semver)
- Push :VERSION + :latest tags per service for one-click update
- Add demo-service to build choices
- Always deploy; merge-update versions.json (no web entry overwrite)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 17:30:53 +08:00
XuqmGroup
81dfb2910b refactor(jenkins): 简化 Jenkinsfile 版本管理和部署流程
- 移除复杂的版本策略参数,统一使用自动递增版本号
- 修改 Docker 镜像标签策略,使用 latest 标签进行部署
- 简化版本计算逻辑,统一维护服务版本文件
- 更新部署脚本,直接使用 latest 标签拉取镜像
- 添加版本文件自动提交到 Git 的功能
- 重构版本记录更新机制,使用 Python 脚本管理 versions.json
- 统一所有 Jenkinsfile 的环境变量和构建参数结构
2026-06-11 17:23:49 +08:00
XuqmGroup
72eb60f8ca fix(ci): 修复 bat 脚本错误处理,Docker 失败时立即退出
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 15:20:24 +08:00
XuqmGroup
167d403da6 feat(system): 添加系统更新管理和版本控制功能
- 新增私有化部署系统更新API接口(检查更新、选择性更新、重置等)
- 实现版本管理系统,支持平台版本和服务版本对比检查
- 集成Jenkinsfile自动化构建流程,支持多种版本策略
- 添加Docker镜像版本标签管理和自动注入功能
- 实现选择性更新机制,可指定服务进行增量更新
- 完善版本日志记录和更新历史追踪功能
2026-06-11 13:30:41 +08:00
XuqmGroup
77553cd105 feat(app): 支持多平台包名配置和应用信息编辑功能
- 后端增加至少填写一个平台包名的验证逻辑
- 前端调整应用数据模型,将包名字段改为可选类型
- 添加应用详情页的编辑功能和表单验证
- 优化应用列表页包名显示逻辑,支持多平台包名展示
- 重构应用配置指引页面,按平台分类展示商店配置指南
- 在版本管理页面增加包名配置检查和相应提示
- 新增应用信息编辑弹窗组件和相关业务逻辑
2026-06-11 13:04:28 +08:00
XuqmGroup
3e2db6441e feat(update): 添加 API Key 管理和 WebSocket 实时通知功能
- 新增 API Key 管理功能,支持外部工具认证调用平台 API
- 实现 WebSocket 实时通知,版本发布时推送轻量通知给客户端
- 添加 APK 文件哈希校验,支持已下载检测和直接安装
- 支持外部 APK 上传使用 API Key 认证
- 优化私有化部署自动注入 nginx WebSocket 代理配置
- 扩展 SDK 功能包括已下载检测、直接安装和实时通知监听
2026-06-11 12:25:16 +08:00
XuqmGroup
e3d7fbd591 feat(app): 添加重新生成应用配置文件功能
- 在AppController中新增regenerateConfigFile接口
- 在AppService中实现重新生成配置文件的业务逻辑
- 记录重新生成配置文件的操作日志
- 在前端API中添加重新生成功能调用方法
- 在应用详情页面添加重新生成按钮和确认对话框
- 实现重新生成配置文件的前端交互逻辑
2026-06-02 17:43:36 +08:00
XuqmGroup
596927c1c6 refactor(app): 将许可证文件功能替换为配置文件功能
- 替换 LicenseFileCrypto 为 ConfigFileCrypto 加密类
- 将 /license-file 相关接口重命名为 /config-file
- 修改数据库实体中的 licenseFileContent 字段为 configFileContent
- 更新前端 API 调用从 downloadLicenseFile 改为 downloadConfigFile
- 将安全中心的 License 文件解析功能改为 Config 文件解析
- 更新文件扩展名从 .xuqmlicense 改为 .xuqmconfig
- 修改后端服务方法 ensureLicenseFile 为 ensureConfigFile
- 调整加密解密逻辑以支持新的配置文件格式
2026-06-02 17:35:29 +08:00
XuqmGroup
21fa87b3ac feat(ui): 添加服务应用切换记忆功能并优化菜单结构
- 在IM、授权、推送、版本管理视图中添加最近使用应用的记忆功能
- 新增serviceApp工具函数用于存储和获取最近使用的应用
- 将系统日志、数据库、操作日志菜单项归类到运维管理子菜单
- 修复实体类索引字段命名不一致问题
- 在安全配置中启用方法级别安全注解支持
2026-05-28 10:53:12 +08:00
XuqmGroup
eb8bc70ff5 feat(deploy): 优化版本管理和多租户合并逻辑
- 修改 readCurrentVersion 方法优先读取镜像内的 /app/VERSION 文件
- 添加对宿主机挂载目录 VERSION 文件的兼容性支持
- 移除 bumpVersionFile 方法,不再在更新后写入版本号
- 重构多租户合并逻辑,优化数据库查询和更新操作
- 简化孤儿数据修复逻辑,直接更新为保留租户ID
- 在 Dockerfile 中复制 VERSION 文件到镜像内部
- 在 Jenkinsfile 中添加自动递增构建号功能
2026-05-27 19:25:50 +08:00
XuqmGroup
898597d6b6 ```
refactor(tenant): 优化系统更新服务和租户数据修复逻辑

- 添加版本文件更新功能,在更新完成后写入新版本号到 VERSION 文件
- 重命名租户数据修复方法,从 consolidate_private_tenants 改为 fix_orphan_tenant_data
- 重构租户数据修复逻辑,支持多租户合并和孤儿数据修复两种场景
- 优化数据库操作,使用更精确的查询条件修复孤儿租户数据
- 改进迁移过程的日志输出和状态记录机制
```
2026-05-27 19:14:45 +08:00
XuqmGroup
e3e16352d5 ```
fix(tenant): 修复私有化部署下的租户注册和引导配置逻辑

- 修改 PrivateDeploymentProperties 中的 tenantRegisterEnabled 方法,
  在私有化模式下始终返回 false
- 修改 PrivateDeploymentProperties 中的 tenantBootstrapEnabled 方法,
  在私有化模式下始终返回 true
- 在 SystemUpdateService 中注入 PrivateDeploymentProperties 依赖
- 添加 migrate_v20260527_consolidate_private_tenants 数据库迁移方法
- 实现私有化部署下合并多租户功能,保留最早租户并替换其余租户ID
- 迁移涉及 t_app、t_operation_log、t_migrate_key 等表的数据
- 更新子账号的 parent_id 指向保留的租户
- 删除合并后多余的租户记录
```
2026-05-27 18:57:21 +08:00
XuqmGroup
db986808f2 feat(database): 新增 push 和 license 操作日志表
- 在 tenant-service 的系统更新服务中添加新的数据库迁移方法
- 为 push-service 创建 PushSchemaMigrationService 并实现数据库迁移逻辑
- 为 license-service 创建 LicenseSchemaMigrationService 并实现数据库迁移逻辑
- 创建 push_operation_log 表用于记录推送服务操作日志
- 创建 license_operation_log 表用于记录授权服务操作日志
- 实现数据库迁移记录表 _schema_migrations 以跟踪迁移状态
- 添加迁移验证和错误处理机制确保迁移过程可靠性
2026-05-27 18:01:31 +08:00
XuqmGroup
73dd4814f2 feat(logs): 添加操作日志功能支持推送和授权模块
- 在JwtAuthFilter中设置认证详情到claims
- 为license-service添加LicenseOperationLog相关实体、仓库和服务
- 为push-service添加PushOperationLog相关实体、仓库和服务
- 在LicenseAdminController中注入并使用操作日志记录授权变更
- 在PushManagementController中注入并使用操作日志记录推送操作
- 更新OperationLogService以支持从JWT claims获取用户信息
- 扩展OperationLogService支持推送和授权操作日志查询
- 在前端OperationLogView中添加推送和授权日志选项卡
- 添加LicenseOperationLog和PushOperationLog接口定义
- 实现推送和授权日志的数据加载和分页功能
- 添加操作类型和资源类型的标签映射支持
2026-05-27 13:36:16 +08:00
XuqmGroup
f9ad40cb98 feat(log): 优化操作日志记录和展示功能
- 在OperationLogEntity实体中新增summary和ipAddress字段存储摘要和IP信息
- 修改operationLogService.record方法支持传入操作摘要信息
- 实现客户端IP地址解析功能,支持X-Forwarded-For和X-Real-IP头
- 更新系统更新服务中的数据库表结构迁移逻辑,增加NOT NULL列处理
- 优化前端操作日志页面展示,添加标签分类和详情弹窗功能
- 在系统更新流式响应中增加网络连接异常处理机制
- 添加Nginx代理配置中的缓冲区设置以支持实时日志流式传输
2026-05-27 12:27:42 +08:00
XuqmGroup
50da70d580 fix(core): 统一全局异常处理器并添加数据库管理功能
- 在所有服务的GlobalExceptionHandler中添加HttpServletRequest参数以记录请求上下文
- 统一异常响应格式为ResponseEntity<ApiResponse<Void>>并改进错误日志记录
- 添加对多种异常类型的处理包括参数验证、请求方法不支持、权限拒绝等
- 为业务异常添加不同级别的日志记录(warn/error)和状态码映射
- 在前端系统API中新增数据库表管理相关接口定义和实现
- 添加数据库表列表、列信息和数据查询的API调用函数
2026-05-27 11:51:19 +08:00
XuqmGroup
e75aa66747 refactor(update): 移除包名校验逻辑简化版本检查接口
- 移除了 AppVersionController 中的 packageName 参数验证
- 简化了 resolveAndValidate 方法的参数列表
- 删除了包名校验相关的业务逻辑和异常抛出
- 移除了对 tenantClient 平台信息的包名校验调用
- 更新了方法签名以减少参数传递复杂度
2026-05-23 03:48:02 +08:00
XuqmGroup
978f919e4c fix(jenkins): add containerd cache cleanup before deploy to prevent concurrent pull corruption
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 02:48:43 +08:00
XuqmGroup
67da05dadc fix: remove @NotBlank from Java records, add manual validation + reset with data preservation
- Remove @Valid/@NotBlank/@Size/@Email/@NotNull from all Java record DTOs
  (incompatible with Jackson deserialization in Spring Boot 3.x)
- Add manual validation in controllers instead
- Add database reset with data preservation to reset container feature
  (exports core config tables, drops all tables, Hibernate recreates on startup,
  then restores preserved data)
- Update nginx timeout regex to cover all system endpoints

Affected services: tenant-service, license-service, im-service, push-service

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 02:43:35 +08:00