# TieCLI-Server **Repository Path**: meda/tie-cli-server ## Basic Information - **Project Name**: TieCLI-Server - **Description**: 绳包管理系统,遵循结绳包管理器标准协议V2 - **Primary Language**: Java - **License**: AGPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-02-24 - **Last Updated**: 2026-02-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TieServer - 绳包管理平台 一个现代化的包管理平台后端服务,支持包的发布、搜索、下载和版本管理。类似于 npm 或 Maven,专门用于管理"绳包"(一种代码包格式)。 ## 项目架构 ``` TieServer/ ├── src/main/java/cn/langlang/ # 后端源码 │ ├── api/v1/ # REST API 控制器 │ ├── config/ # 配置类 │ ├── domain/ # 实体类 │ ├── exception/ # 异常处理 │ ├── repository/ # 数据访问层 │ ├── service/ # 业务逻辑层 │ └── shell/ # 命令行工具 ├── web/ # Vue.js 前端源码 │ └── src/ │ ├── components/ # Vue 组件 │ ├── views/ # 页面视图 │ ├── router/ # 路由配置 │ ├── services/ # API 服务 │ └── store/ # 状态管理 └── packages/ # 包存储目录 ``` ## 技术栈 ### 后端 | 技术 | 版本 | 说明 | |------|------|------| | Java | 17 | 编程语言 | | Spring Boot | 3.5.x | 核心框架 | | Spring Data JPA | - | ORM 框架 | | Spring Security | - | 安全框架 | | Spring Mail | - | 邮件服务 | | Spring Shell | 3.4.1 | 命令行工具 | | JWT (jjwt) | 0.12.6 | Token 认证 | | MySQL | 8 | 主数据库 | | Redis | - | 缓存/会话管理 | ### 前端 | 技术 | 版本 | 说明 | |------|------|------| | Vue.js | 3.5.x | 前端框架 | | TypeScript | 5.x | 编程语言 | | Vite | 7.x | 构建工具 | | Vue Router | 4.x | 路由管理 | | Pinia | 3.x | 状态管理 | | Axios | 1.x | HTTP 客户端 | | ECharts | 6.x | 图表库 | ## 功能特性 - **用户管理**:注册、登录、密码重置、邮箱验证 - **包管理**:发布、搜索、下载、版本管理 - **双客户端支持**:CLI 和 Web 使用不同的认证方式 - **语义化版本控制**:强制遵循 X.Y.Z 版本格式 - **SHA-256 校验**:下载时验证文件完整性 - **统计系统**:下载量、访问量、注册量等多维度统计 - **管理员后台**:用户管理、包管理功能 ## 快速开始 ### 环境要求 - Java 17+ - MySQL 8+ - Redis - Node.js 18+ (前端开发) ### 数据库配置 创建数据库: ```sql CREATE DATABASE tiecode CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` ### 配置文件 编辑 `src/main/resources/application.properties`: ```properties # 数据库配置 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/tiecode spring.datasource.username=your_username spring.datasource.password=your_password # Redis 配置 spring.data.redis.host=127.0.0.1 spring.data.redis.port=6379 # 邮件配置 spring.mail.host=smtp.example.com spring.mail.username=your_email spring.mail.password=your_password ``` ### 后端运行 ```bash # Gradle 构建 ./gradlew build # 运行应用 ./gradlew bootRun ``` ### 前端运行 ```bash cd web # 安装依赖 npm install # 开发模式 npm run dev # 生产构建 npm run build ``` 服务将在 `http://localhost:8080` 启动。 ## API 端点 ### 认证模块 | 端点 | 方法 | 描述 | |------|------|------| | `/api/v1/pmLogin` | POST | CLI 客户端登录 | | `/api/v1/login` | POST | Web 客户端登录 | | `/api/v1/register` | POST | 用户注册 | | `/api/v1/sendVerificationCode` | POST | 发送验证码 | | `/api/v1/resetPassword` | POST | 重置密码 | | `/api/v1/logout` | POST | 退出登录 | ### 包管理模块 | 端点 | 方法 | 描述 | |------|------|------| | `/api/v1/packages/publishMetadata` | POST | 发布元数据 | | `/api/v1/packages/publishPackage/{key}` | PUT | 上传包文件 | | `/api/v1/packages/{platform}/{packageId}/index.json` | GET | 获取版本列表 | | `/api/v1/packages/{platform}/{packageId}/{version}/metadata.json` | GET | 获取版本详情 | | `/api/v1/packages/{platform}/{packageId}/{version}/{fileName}` | GET | 下载包文件 | | `/api/v1/packages/my` | GET | 获取用户的包 | | `/api/v1/packages/all` | GET | 获取所有包列表 | ### 搜索模块 | 端点 | 方法 | 描述 | |------|------|------| | `/api/v1/pmSearch` | GET | 搜索包 | ### 统计模块 | 端点 | 方法 | 描述 | |------|------|------| | `/api/v1/stats/platform` | GET | 平台统计概览 | | `/api/v1/stats/last7Days` | GET | 过去7天下载统计 | | `/api/v1/stats/top10` | GET | 下载量前10的包 | | `/api/v1/stats/packages/count` | GET | 包总数 | | `/api/v1/stats/totalDownloads` | GET | 总下载量 | ### 用户管理模块 | 端点 | 方法 | 描述 | |------|------|------| | `/api/v1/user/info` | GET | 获取当前用户信息 | | `/api/v1/user/info` | PUT | 更新用户信息 | | `/api/v1/user/changePassword` | POST | 修改密码 | | `/api/v1/user/list` | GET | 获取用户列表(管理员) | ## 前端页面 | 路由 | 页面 | 权限 | |------|------|------| | `/` | 首页 | 公开 | | `/browse` | 浏览绳包 | 公开 | | `/login` | 登录/注册 | 游客 | | `/profile` | 个人中心 | 登录用户 | | `/upload` | 上传绳包 | 登录用户 | | `/package/:platform/:packageId` | 包详情 | 公开 | | `/admin` | 管理中心 | 管理员 | | `/admin/users` | 用户管理 | 管理员 | | `/admin/packages` | 绳包管理 | 管理员 | ## 管理员命令行工具 启动应用后,可以使用以下命令: ```bash # 创建管理员账户 admin create # 重置用户密码 admin resetPassword # 删除用户 admin delete # 列出所有用户 admin list # 修改用户角色 admin setRole # 查看用户详情 admin info ``` ## 发布流程 项目采用两步发布流程,确保安全性: 1. **提交元数据**:POST `/api/v1/packages/publishMetadata`,获取上传密钥 2. **上传文件**:PUT `/api/v1/packages/publishPackage/{key}`,上传包文件 上传密钥有效期为 5 分钟。 ## 数据模型 ### User (用户) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 用户ID | | username | String | 用户名(唯一) | | password | String | 密码(BCrypt加密) | | email | String | 邮箱(唯一) | | isAdmin | boolean | 是否管理员 | ### Package (包) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 包记录ID | | platform | String | 平台标识 | | packageId | String | 包ID(唯一标识) | | name | String | 包名称 | | author | String | 作者 | | userId | Long | 所有者用户ID | ### PackageVersion (包版本) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 版本ID | | version | String | 版本号(X.Y.Z格式) | | description | String | 描述 | | sha256 | String | 文件哈希值 | | keywords | List | 关键词 | | dependencies | List | 依赖列表 | ## 配置项 | 配置项 | 默认值 | 说明 | |--------|--------|------| | `server.port` | 8080 | 服务端口 | | `storage.base-path` | ./packages | 包存储路径 | | `storage.max-file-size` | 100MB | 最大文件大小 | | `token.expiration` | 604800000 (7天) | Token有效期 | | `upload-key.expiration` | 300000 (5分钟) | 上传密钥有效期 | | `verification.code.expiration` | 300000 (5分钟) | 验证码有效期 | ## 许可证 本项目采用 GNU Affero General Public License v3.0 (AGPL-3.0) 许可证。 这意味着: - ✅ 可以自由使用、修改和分发 - ✅ 必须保留版权声明和许可证 - ✅ 修改后的版本必须以相同许可证发布 - ✅ 网络服务用户有权获取源代码 详见 [LICENSE](LICENSE) 文件或访问 [GNU AGPL v3.0](https://www.gnu.org/licenses/agpl-3.0.html)。 ## 贡献 欢迎提交 Issue 和 Pull Request。 --- **LangLang Team**