macrocc 46c72e4ceb docs(readme): 添加项目文档和说明
- 创建了完整的 README.md 文件
- 添加了项目特性介绍和功能说明
- 详细描述了技术栈和架构设计
- 提供了快速开始和安装指南
- 列出了项目结构和 API 接口文档
- 包含了测试和部署说明
- 添加了贡献指南和许可证信息
2026-04-30 00:29:50 +08:00

📚 LocoBook - 图书管理系统

一个基于 Rust Loco 后端和 Vue 3 前端的现代化图书管理系统。

特性

  • 🔐 用户认证: JWT 基于 token 的登录/注册系统
  • 📖 图书管理: 浏览、阅读图书,支持分页加载
  • 📝 阅读记录: 自动保存阅读进度和历史记录
  • 🎨 现代 UI: 使用 Tailwind CSS 4 构建的响应式界面
  • 高性能: Rust 后端提供快速稳定的 API 服务
  • 🔧 开发友好: Vite 统一管理前后端,一键启动

🛠️ 技术栈

后端

  • 框架: Loco.rs 0.16 (基于 Axum + SeaORM)
  • 语言: Rust
  • 数据库: SQLite
  • 认证: JWT
  • ORM: SeaORM

前端

  • 框架: Vue 3.5 (Composition API)
  • 构建工具: Vite 8.0
  • 路由: Vue Router 4.5
  • 状态管理: Pinia 2.3
  • HTTP 客户端: Axios 1.7
  • 样式: Tailwind CSS 4.2

📦 快速开始

前置要求

安装

  1. 克隆仓库
git clone http://macrocc.com:3000/macrocc/locobook.git
cd locobook
  1. 安装前端依赖
npm install
  1. 初始化数据库
cd src-loco
cargo loco db migrate
cd ..

运行开发服务器

一键启动前后端:

npm run dev

这将:

单独启动:

# 仅启动后端
cd src-loco && cargo loco start

# 仅启动前端
npm run dev:frontend

重启服务

修改 Rust 代码后需要重启:

npm run restart

📁 项目结构

locobook/
├── src-loco/              # Rust Loco 后端
│   ├── src/
│   │   ├── controllers/   # API 控制器
│   │   │   ├── auth.rs    # 认证相关接口
│   │   │   ├── books.rs   # 图书管理接口
│   │   │   └── reading.rs # 阅读记录接口
│   │   ├── models/        # 数据模型
│   │   │   ├── users.rs
│   │   │   ├── books.rs
│   │   │   └── reading_records.rs
│   │   ├── views/         # 响应视图
│   │   └── app.rs         # 应用配置
│   ├── migration/         # 数据库迁移
│   ├── tests/            # 后端测试
│   └── config/           # 配置文件
├── src/                  # Vue 3 前端
│   ├── views/            # 页面组件
│   │   ├── Login.vue
│   │   ├── Register.vue
│   │   ├── BookList.vue
│   │   ├── BookReader.vue
│   │   └── ReadingHistory.vue
│   ├── components/       # 通用组件
│   │   └── Navbar.vue
│   ├── api/             # API 封装
│   ├── router/          # 路由配置
│   └── main.js          # 入口文件
├── package.json         # 前端依赖和脚本
├── vite.config.js       # Vite 配置
└── README.md

🔌 API 接口

认证接口

方法 路径 描述 认证
POST /api/auth/register 用户注册
POST /api/auth/login 用户登录
POST /api/auth/verify 验证邮箱
GET /api/auth/current 获取当前用户

图书接口

方法 路径 描述 认证
GET /api/books 获取图书列表(分页)
GET /api/books/:id 获取单本图书
POST /api/books 创建图书
PUT /api/books/:id 更新图书
DELETE /api/books/:id 删除图书

分页参数:

GET /api/books?page=1&per_page=12

响应格式:

{
  "books": [...],
  "total": 100,
  "page": 1,
  "per_page": 12,
  "total_pages": 9
}

阅读记录接口

方法 路径 描述 认证
POST /api/reading/record 保存阅读进度
GET /api/reading/history 获取阅读历史

🧪 测试

运行后端测试

cd src-loco

# 运行所有测试
cargo test

# 运行特定模块测试
cargo test books
cargo test auth

# 运行单个测试
cargo test can_list_books_with_pagination

# 显示测试输出
cargo test -- --nocapture

测试文件位于 src-loco/tests/requests/:

  • auth.rs - 认证接口测试
  • books.rs - 图书接口测试
  • prepare_data.rs - 测试数据准备

🎨 前端路由

路径 组件 描述 认证
/login Login 登录页面
/register Register 注册页面
/ BookList 图书列表
/book/:id BookReader 图书阅读器
/history ReadingHistory 阅读历史

⚙️ 配置

后端配置

配置文件位于 src-loco/config/:

  • development.yaml - 开发环境
  • test.yaml - 测试环境
  • production.yaml - 生产环境

主要配置项:

server:
  port: 5150
  
database:
  uri: sqlite://book-manager_development.sqlite?mode=rwc
  auto_migrate: true
  
auth:
  jwt:
    secret: your-secret-key
    expiration: 604800  # 7 days

前端配置

Vite 配置在 vite.config.js:

{
  server: {
    port: 5173,
    proxy: {
      '/api': {
        target: 'http://localhost:5150',
        changeOrigin: true
      }
    }
  },
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src')
    }
  }
}

🚀 部署

构建前端

npm run build

构建产物将输出到 dist/ 目录。

构建后端

cd src-loco
cargo build --release

二进制文件位于 target/release/book_manager-cli

生产环境运行

# 后端
cd src-loco
cargo loco start --env production

# 前端 (使用静态文件服务器)
npm run preview

🤝 贡献

欢迎提交 Issue 和 Pull Request!

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

🙏 致谢


Made with ❤️ using Rust & Vue

S
Description
No description provided
Readme 24 MiB
Languages
Rust 78.6%
Vue 16.1%
JavaScript 3.8%
Perl 0.8%
HTML 0.4%
Other 0.3%