library-picturebook-activity/backend/docs/DATABASE_URL_SOURCE.md
aid 418aa57ea8 Day4: 超管端设计优化 + UGC绘本创作社区P0实现
一、超管端设计优化
- 文档管理SOP体系建立,docs目录重组
- 统一用户管理:跨租户全局视角,合并用户管理+公众用户
- 活动监管全模块重构:全部活动(统计卡片+阶段筛选+SuperDetail详情页)、报名数据/作品数据/评审进度(两层合一扁平列表)、成果发布(去Tab+统计+隐藏写操作)
- 菜单精简:移除评委管理/评审规则/通知管理
- Bug修复:租户编辑丢失隐藏菜单、pageSize限制、主色统一

二、UGC绘本创作社区P0
- 数据库:10张新表(user_works/user_work_pages/work_tags等)
- 子女账号独立化:Child升级为独立User,家长切换+独立登录
- 用户作品库:CRUD+发布审核,8个API
- AI创作流程:提交→生成→保存到作品库,4个API
- 作品广场:首页改造为推荐流,标签+搜索+排序
- 内容审核(超管端):作品审核+作品管理+标签管理
- 活动联动:WorkSelector作品选择器
- 布局改造:底部5Tab(发现/创作/活动/作品库/我的)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 22:20:25 +08:00

166 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DATABASE_URL 来源说明
## 📍 定义位置
`DATABASE_URL``schema.prisma` 中定义:
```prisma
datasource db {
provider = "mysql"
url = env("DATABASE_URL") // ← 从这里读取环境变量
}
```
## 🔄 加载流程
### 1. 配置文件定义
`DATABASE_URL` 定义在环境配置文件中:
**当前配置**`.development.env` 文件
```env
DATABASE_URL="mysql://root:woshimima@localhost:3306/db_competition_management?schema=public"
```
### 2. NestJS ConfigModule 加载
`app.module.ts` 中配置:
```typescript
ConfigModule.forRoot({
isGlobal: true,
envFilePath: ['.development.env'], // ← 从这里加载环境变量
})
```
**加载顺序**
1. NestJS ConfigModule 读取 `.development.env` 文件
2. 将文件中的 `DATABASE_URL` 加载到 `process.env.DATABASE_URL`
3. 应用启动时,所有模块都可以通过 `ConfigService` 访问
### 3. Prisma 读取
Prisma 在以下时机读取 `DATABASE_URL`
1. **生成 Prisma Client 时**
```bash
npx prisma generate
```
- 读取 `process.env.DATABASE_URL`
- 生成类型定义(不连接数据库)
2. **运行迁移时**
```bash
npx prisma migrate dev
npx prisma migrate deploy
```
- 读取 `process.env.DATABASE_URL`
- 连接到数据库执行迁移
3. **应用运行时**
- `PrismaService` 初始化时读取 `process.env.DATABASE_URL`
- 建立数据库连接
## 📂 配置文件优先级
根据 `app.module.ts` 的配置:
```typescript
envFilePath: ['.development.env']
```
**当前配置**
- ✅ 优先加载:`.development.env`
- ⚠️ 注意:如果设置了 `ignoreEnvFile: true`,则不会加载文件,只使用系统环境变量
## 🔍 验证 DATABASE_URL 来源
### 方法 1查看环境变量应用运行时
```bash
# 启动应用后,访问配置验证接口
curl http://localhost:3001/api/config-verification/env-info
```
### 方法 2查看启动日志
应用启动时会在控制台显示:
```
=== 环境配置验证 ===
DATABASE_URL: 已设置 mysql://root:woshimima@localhost:3306/db_competition_management?schema=public
```
### 方法 3检查配置文件
```bash
cd backend
cat .development.env | grep DATABASE_URL
```
### 方法 4在代码中验证
```typescript
// 在任何服务中
constructor(private configService: ConfigService) {}
const dbUrl = this.configService.get('DATABASE_URL');
console.log('DATABASE_URL:', dbUrl);
```
## 🔐 环境变量来源优先级
Prisma 读取 `DATABASE_URL` 的优先级:
1. **系统环境变量**(最高优先级)
```bash
export DATABASE_URL="mysql://..."
```
2. **.env 文件**(通过 ConfigModule 加载)
- `.development.env`
- `.env`
3. **默认值**如果都没有设置Prisma 会报错)
## 📝 DATABASE_URL 格式
```
mysql://用户名:密码@主机:端口/数据库名?参数
```
**示例**
```env
# 本地数据库
DATABASE_URL="mysql://root:password@localhost:3306/db_competition_management?schema=public"
# 远程数据库
DATABASE_URL="mysql://user:pass@192.168.1.100:3306/db_name?schema=public"
# 带 SSL
DATABASE_URL="mysql://user:pass@host:3306/db_name?schema=public&sslmode=require"
```
## ⚠️ 注意事项
1. **密码包含特殊字符**:需要进行 URL 编码
```env
# 密码: p@ssw0rd
DATABASE_URL="mysql://user:p%40ssw0rd@localhost:3306/db"
```
2. **配置文件安全**
- `.development.env` 不应提交到 Git
- 生产环境使用环境变量或密钥管理服务
3. **Prisma 读取时机**
- Prisma 直接读取 `process.env.DATABASE_URL`
- 不依赖 NestJS ConfigModule但 ConfigModule 会将文件内容加载到 `process.env`
## 🔧 当前配置总结
- **配置文件**`.development.env`
- **配置项**`DATABASE_URL="mysql://root:woshimima@localhost:3306/db_competition_management?schema=public"`
- **加载方式**NestJS ConfigModule → `process.env` → Prisma
- **验证方式**:启动日志或 `/api/config-verification/env-info` 接口