# Winupdate Neo 这是使用 Next.js + Prisma + PostgreSQL 重写的 Winupdate 项目的 API 部分。 ## 技术栈 - **前端框架**: Next.js 15 - **数据库**: PostgreSQL + Prisma ORM - **包管理器**: Bun - **文件存储**: 本地文件系统(替代 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 接口,确保客户端代码无需修改即可使用。