# Externalize Database Provisioning to SQL_Script

## 1. 背景
当前服务进程中仍包含数据库初始化与分区创建相关职责。为降低主服务复杂度、避免运行时 DDL 风险，并支持由外部程序统一调度，现将“建库/建表/建分区”能力完全外置到根目录 `SQL_Script`。

## 2. 目标
1. 主服务 `bls-rcu-action-backend` 启动后仅执行：拉取 Kafka -> 解析 -> 写库。
2. 删除所有运行时建库、建表、建分区与对应定时任务逻辑。
3. 不保留旧兼容开关（如 `ENABLE_DATABASE_INITIALIZATION`）。
4. 在根目录 `SQL_Script` 提供可复用的 SQL 与 JS 调用入口，供其他程序调用。

## 3. 变更范围
### 3.1 业务服务（剥离）
- 删除文件：
  - `bls-rcu-action-backend/src/db/initializer.js`
  - `bls-rcu-action-backend/src/db/partitionManager.js`
- 修改文件：
  - `bls-rcu-action-backend/src/index.js`
    - 移除初始化与定时建分区调用
  - `bls-rcu-action-backend/src/config/config.js`
    - 移除 `enableDatabaseInitialization`
  - `bls-rcu-action-backend/src/db/roomStatusManager.js`
    - 移除自动建分区逻辑（仅保留 upsert）
  - `bls-rcu-action-backend/.env`
  - `bls-rcu-action-backend/.env.example`
    - 移除 `ENABLE_DATABASE_INITIALIZATION`
- 删除旧 SQL：
  - `bls-rcu-action-backend/scripts/init_db.sql`

### 3.2 外部脚本（新增）
新增根目录 `SQL_Script/`：
- `init_rcu_action.sql`
- `init_room_status.sql`
- `partition_rcu_action.sql`
- `partition_room_status.sql`
- `db_manager.js`（CLI + import）
- `README.md`

### 3.3 npm scripts（入口）
在 `bls-rcu-action-backend/package.json` 新增：
- `db:init:all`
- `db:init:rcu-action`
- `db:init:room-status`
- `db:partition:rcu-action`
- `db:partition:room-status`

## 4. 设计约束
1. 主服务代码中不得出现 `CREATE TABLE` / `CREATE SCHEMA` / `CREATE INDEX` / 分区创建语句。
2. 主服务中不得出现初始化器和分区管理器调用路径。
3. 建库能力仅存在于根目录 `SQL_Script`。

## 5. 验收标准
1. `npm run test` 全通过。
2. `npm run build` 通过，且 `dist/index.js` 不包含以下关键词：
   - `dbInitializer`
   - `partitionManager`
   - `ENABLE_DATABASE_INITIALIZATION`
   - `ensurePartitions`
3. 通过 `npm run db:init:all` 可以执行外部初始化流程。
4. 通过 `npm run db:partition:rcu-action`、`npm run db:partition:room-status -- <hotelId>` 可执行外部分区流程。

## 6. 迁移说明
- 旧部署流程若依赖服务启动自动建库，需改为先执行 `SQL_Script` 对应命令，再启动主服务。
- 该变更为有意“去兼容”升级：删除旧开关与旧路径，避免双路径维护。
