# 🔧 后端工具脚本

本目录包含 FF AI Workspace 后端项目的专用工具脚本。

---

## 📁 目录结构

```
scripts/backend/
├── init/              # 初始化脚本
├── data/              # 数据管理脚本
└── test/              # 测试工具
```

---

## 📋 脚本列表

### 🔐 初始化脚本 (`init/`)

| 脚本 | 用途 | npm 命令 |
|------|------|----------|
| `init-permissions.ts` | 初始化系统权限 | `npm run init:permissions` |
| `init-itadmin.ts` | 初始化 IT 管理员账号 | `npm run init:itadmin` |
| `init-notification-templates.ts` | 初始化通知模板 | `npm run init:notification-templates` |

**使用方法：**

```bash
cd backend

# 1. 生成 Prisma Client
npm run prisma:generate

# 2. 应用数据库迁移
npm run prisma:migrate

# 3. 初始化权限
npm run init:permissions

# 4. 初始化 IT 管理员
npm run init:itadmin

# 5. 初始化通知模板
npm run init:notification-templates
```

---

### 📊 数据管理脚本 (`data/`)

| 脚本 | 用途 | npm 命令 |
|------|------|----------|
| `check-manager-data.ts` | 检查管理者数据完整性 | 手动执行 |
| `clean-org-members.ts` | 清理组织成员数据 | `npm run clean:org-members` |
| `clear-departments.ts` | 清空部门数据（危险）| `npm run clear:departments` |
| `regenerate-meeting-attendance-qrcodes.ts` | 重新生成会议出勤二维码 | 手动执行 |
| `backfill-outlook-series-child-bindings.ts` | 补齐 Outlook 系列缺失子绑定（默认 dry-run） | 手动执行 |

**使用方法：**

```bash
cd backend

# 清理组织成员
npm run clean:org-members

# 清空部门（会删除所有部门数据）⚠️
npm run clear:departments

# 检查管理者数据
npx ts-node ../scripts/backend/data/check-manager-data.ts

# 重新生成会议出勤二维码（默认全量）
npx ts-node ../scripts/backend/data/regenerate-meeting-attendance-qrcodes.ts

# 仅补齐缺失二维码
npx ts-node ../scripts/backend/data/regenerate-meeting-attendance-qrcodes.ts --only-missing

# 预览将处理的会议，不做更新
npx ts-node ../scripts/backend/data/regenerate-meeting-attendance-qrcodes.ts --dry-run

# 预览补齐某个系列的缺失子绑定（不写库）
npx ts-node ../scripts/backend/data/backfill-outlook-series-child-bindings.ts \
  --mailbox-email shengmin.shi@ff.com \
  --series-master-id AAMk...AAA=

# 执行补齐（写库），执行后再触发一次 Outlook 同步
npx ts-node ../scripts/backend/data/backfill-outlook-series-child-bindings.ts \
  --mailbox-email shengmin.shi@ff.com \
  --series-master-id AAMk...AAA= \
  --apply
```

---

### 🧪 测试工具 (`test/`)

| 脚本 | 用途 | 执行方式 |
|------|------|----------|
| `test-cors-config.ts` | 测试 CORS 配置 | 手动执行 |

**使用方法：**

```bash
# 测试 CORS 配置
npx ts-node scripts/backend/test/test-cors-config.ts
```

---

## ⚙️ 脚本开发规范

### 命名规范
- 使用 `kebab-case` 命名
- 功能描述清晰
- 例如: `init-permissions.ts`, `clean-org-members.ts`

### 编写规范（TypeScript）

```typescript
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function main() {
  console.log('🚀 开始执行...');
  
  try {
    // 主要逻辑
  } catch (error) {
    console.error('❌ 执行失败:', error);
    throw error;
  } finally {
    await prisma.$disconnect();
  }
}

main()
  .catch((e) => {
    console.error(e);
    process.exit(1);
  });
```

### 安全规范
- ✅ 危险操作必须有交互式确认
- ✅ 使用颜色区分不同级别的输出
- ✅ 清晰的错误提示
- ✅ 提供详细的日志输出
- ⚠️ 删除数据的操作要有明确警告

---

## 🔗 相关链接

- [项目根目录](../../)
- [后端代码](../../backend/)
- [脚本总览](../README.md)
- [文档目录](../../docs/)

---

## 📝 更新日志

### 2025-12-31
- ✅ 删除已完成任务的审计脚本 (audit/ 目录)
- ✅ 简化脚本结构，仅保留常用工具

### 2024-12-25
- ✅ 统一脚本目录结构
- ✅ 从 `backend/scripts/` 迁移到 `scripts/backend/`
- ✅ 按功能分类到子目录（init/data/audit/test）
- ✅ 更新所有脚本路径引用

---

**最后更新**: 2025-12-31  
**维护者**: FF AI Workspace 开发团队
