# appshop **Repository Path**: zhurong696/appshop ## Basic Information - **Project Name**: appshop - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: claude - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-21 - **Last Updated**: 2026-02-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IntranetHub - 应用商店后端服务 内网应用分发与版本管理平台后端服务,支持应用发布、版本管理、**热更补丁**、下载统计、CI/CD 自动发布等功能。 ## 🚀 技术栈 - **Java 21** + **Spring Boot 3.5.9** - **MyBatis-Plus** - 数据持久层 - **MySQL 8.0** - 数据库 - **MinIO** - 对象存储 (应用文件存储) - **JWT** - 身份认证 - **HMAC-SHA256** - SDK 签名认证 - **BCrypt** - 密码加密 - **Druid** - 数据库连接池 - **Caffeine** - 本地缓存 ## 📁 项目结构 ``` src/main/java/com/souljoyharmony/ ├── controller/ # API 控制器 │ ├── AuthController.java # 用户认证 │ ├── AdminAppController.java # 应用管理 │ ├── AdminPatchController.java # 热更补丁管理 ✨ │ ├── AdminCommentController.java # 评论管理 │ ├── AdminUserController.java # 用户管理 │ ├── AdminVersionController.java # 版本管理 │ ├── SdkController.java # SDK终端接口 ✨ │ ├── CiController.java # CI/CD热更发布 ✨ │ ├── ClientController.java # 客户端接口 │ ├── ReleaseController.java # CI/CD 发布 │ └── VersionController.java # 版本下载 ├── domain/ # 数据实体 │ ├── AppPatch.java # 热更补丁 ✨ │ ├── SdkDevice.java # SDK设备 ✨ │ ├── PatchReport.java # 补丁上报 ✨ │ ├── CrashReport.java # 崩溃上报 ✨ │ └── ... ├── dto/ # 数据传输对象 │ ├── sdk/ # SDK DTO ✨ │ └── admin/ # Admin DTO ✨ ├── mapper/ # MyBatis Mapper ├── service/ # 业务逻辑层 ├── interceptor/ # 拦截器 │ └── SdkSignatureInterceptor.java # SDK签名验证 ✨ ├── config/ # 配置类 ├── annotation/ # 自定义注解 └── util/ # 工具类 ``` ## 🔧 快速开始 ### 1. 环境准备 - JDK 21+ - Maven 3.8+ - MySQL 8.0 - MinIO (用于文件存储) ### 2. 数据库初始化 ```bash mysql -u root -p < src/main/resources/init.sql ``` ### 3. 配置环境变量 修改 `src/main/resources/application-dev.yaml` 或 `application-proc.yaml`: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/appshop username: your_username password: your_password minio: endpoint: http://localhost:9000 access-key: your_access_key secret-key: your_secret_key bucket: app-files ``` ### 4. 启动服务 ```bash mvn spring-boot:run -Dspring.profiles.active=dev ``` 或打包运行: ```bash mvn clean package -DskipTests java -jar target/instantFlash.jar ``` ## 📖 API 文档 详细 API 文档请参阅 [docs/API.md](docs/API.md) ### 接口总览 | 模块 | 接口前缀 | 鉴权方式 | 适用场景 | |------|----------|----------|----------| | **SDK 终端接口** | `/api/v1/sdk` | AppId + HMAC签名 | 移动端/桌面端 SDK 调用 | | **管理后台接口** | `/api/v1/admin` | JWT (Bearer Token) | 开发者后台管理补丁 | | **CI/CD 接口** | `/api/v1/ci` | AppSecret 签名 | 自动构建发布热更补丁 | | 认证 | `/api/admin/login` | 无 | 用户登录 | | 应用管理 | `/api/admin/apps/*` | JWT | 应用 CRUD、统计 | | 版本管理 | `/api/admin/apps/{appId}/versions/*` | JWT | 版本管理 | | 客户端 | `/api/client/check` | 无 | 检查更新 | ### SDK 热更接口 | 端点 | 描述 | |------|------| | `POST /api/v1/sdk/devices/register` | 设备注册/握手 | | `POST /api/v1/sdk/patches/check` | 检查热更补丁(含灰度) | | `POST /api/v1/sdk/reports/status` | 上报更新状态(幂等) | | `POST /api/v1/sdk/reports/crash` | 上报崩溃日志 | | `GET /api/v1/sdk/configs` | 获取远程配置 | ## 🔐 认证机制 ### 管理后台 (JWT) ``` Authorization: Bearer ``` ### SDK 接口 (HMAC-SHA256) ``` X-App-Id: com.tools.ocr X-Timestamp: 1709123456 X-Nonce: random_string X-Signature: HMAC_SHA256(path + timestamp + nonce + body, appKey) ``` ### CI/CD 接口 (AppSecret) ``` X-Timestamp: 1709123456 X-Signature: HMAC_SHA256(appId + timestamp, appSecret) ``` ## 👥 角色权限 | 角色 | 权限 | |------|------| | ADMIN | 管理员,拥有全部权限 | | DEV | 开发者,仅管理自己的应用 | ## 📊 数据库表结构 | 表名 | 描述 | |------|------| | `sys_user` | 系统用户表 | | `app_info` | 应用基础信息表 | | `app_version` | 应用版本历史表 | | `app_patch` | **热更补丁版本表** ✨ | | `sdk_device` | **SDK设备注册表** ✨ | | `patch_report` | **补丁安装状态表** ✨ | | `crash_report` | **客户端崩溃日志表** ✨ | | `app_config` | **动态配置表** ✨ | | `app_comment` | 应用评论反馈表 | | `download_record` | 下载流水日志表 | ## 📊 业务错误码 | 错误码 | 含义 | |--------|------| | `20000` | 成功 | | `40001` | 签名验证失败 | | `40002` | 应用不存在 | | `40003` | 基座版本过低,不支持热更 | | `40004` | 补丁不存在或已下架 | ## 📝 License MIT License