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

4.7 KiB
Raw Blame History

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

与原项目的区别

  1. 数据库: 从 MongoDB 迁移到 PostgreSQL
  2. ORM: 使用 Prisma 替代 Mongoose
  3. 文件存储: 使用本地文件系统替代 GridFS
  4. 框架: 从 Express 迁移到 Next.js API Routes
  5. 包管理: 使用 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          # 代码检查

注意事项

  1. 文件存储在 MinIO 对象存储中,按分层结构组织
  2. 需要确保 PostgreSQL 数据库和 MinIO 服务正在运行
  3. 所有配置通过环境变量管理,包括数据库、认证和 MinIO 设置
  4. MinIO 需要预先创建对应的 bucket
  5. 推送通知功能目前只是控制台日志,可以根据需要集成真实的推送服务

API 兼容性

这个重写版本保持了与原始 Express 应用相同的 API 接口,确保客户端代码无需修改即可使用。