prisma/seed.ts
基本信息
- 类型: 数据库种子脚本
- 路径:
./prisma/seed.ts
功能描述
从 prompts.chat 官方 API 获取数据并填充到本地数据库的完整种子脚本。自动创建管理员、分类、标签、用户和 Prompt 数据。
导出内容
依赖导入
@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 类型映射
| 远程值 | 数据库值 |
| TEXT | TEXT |
| IMAGE | IMAGE |
| VIDEO | VIDEO |
| AUDIO | AUDIO |
| STRUCTURED | STRUCTURED |
| SKILL | SKILL |
结构化格式映射
| 远程值 | 数据库值 |
| JSON | JSON |
| YAML | YAML |
统计输出
🌱 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