prisma/seed.ts

prisma/seed.ts

基本信息

  • 类型: 数据库种子脚本
  • 路径: ./prisma/seed.ts

功能描述

从 prompts.chat 官方 API 获取数据并填充到本地数据库的完整种子脚本。自动创建管理员、分类、标签、用户和 Prompt 数据。

导出内容

  • 无(CLI 脚本,直接执行)

依赖导入

  • @prisma/client - Prisma ORM 及类型
  • bcryptjs - 密码哈希

使用方法

# 运行种子脚本
npx tsx prisma/seed.ts

# 或使用 Prisma 命令
npx prisma db seed

数据来源

  • API URL: https://prompts.chat/prompts.json
  • 数据格式: JSON,包含完整的 Prompt 社区数据

执行流程

1. 创建管理员用户

  • 邮箱: admin@prompts.chat
  • 角色: ADMIN
  • 用于分配无明确作者的 Prompt

2. 提取并创建分类

  • 从远程 Prompt 中提取唯一分类
  • 使用 upsert 避免重复
  • 自动分配排序序号

3. 提取并创建标签

  • 从所有 Prompt 中提取唯一标签
  • 保持标签名称、颜色等属性

4. 创建作者用户

  • 为每个唯一作者创建用户账号
  • 自动生成邮箱: {username}@prompts.chat
  • 跳过已存在的 admin 用户

5. 创建 Prompts

  • 类型映射: TEXT, IMAGE, VIDEO, AUDIO, STRUCTURED, SKILL
  • 格式映射: JSON, YAML
  • 创建初始版本记录
  • 建立标签关联

数据映射

Prompt 类型映射

远程值数据库值
TEXTTEXT
IMAGEIMAGE
VIDEOVIDEO
AUDIOAUDIO
STRUCTUREDSTRUCTURED
SKILLSKILL

结构化格式映射

远程值数据库值
JSONJSON
YAMLYAML

统计输出

🌱 Seeding database from prompts.chat...
✅ Created admin user
📡 Fetching prompts from https://prompts.chat/prompts.json...
✅ Fetched {count} prompts
📁 Creating {n} categories...
✅ Created {n} categories
🏷️  Creating {n} tags...
✅ Created {n} tags
👤 Creating {n} users...
✅ Created {n} users
📝 Creating {n} prompts...
✅ Created {n} prompts ({skipped} skipped)

🎉 Seeding complete!

跳过规则

  • 已存在的 Prompt(按 slug 判断)
  • 找不到作者关联的 Prompt
  • 创建失败的 Prompt(记录警告)

相关命令

# 清空并重置数据库
npx prisma migrate reset

# 仅运行种子
npx prisma db seed

# 重置管理员(独立脚本)
npx tsx prisma/reset-admin.ts
← 返回目录