# Database Tool - MySQL 数据库工具

## 📋 表设计

### windsurf_accounts 表

```sql
CREATE TABLE `windsurf_accounts` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  `email` VARCHAR(255) NOT NULL COMMENT '邮箱地址',
  `password` VARCHAR(255) NOT NULL COMMENT '密码',
  `first_name` VARCHAR(100) NOT NULL COMMENT '名',
  `last_name` VARCHAR(100) NOT NULL COMMENT '姓',
  `registration_time` DATETIME COMMENT '注册时间',
  `quota_used` DECIMAL(10,2) DEFAULT 0.00 COMMENT '已使用配额',
  `quota_total` DECIMAL(10,2) DEFAULT 0.00 COMMENT '总配额',
  `billing_days` INT COMMENT '下次账单天数',
  `billing_date` VARCHAR(50) COMMENT '账单日期',
  `payment_card_number` VARCHAR(20) COMMENT '支付卡号（完整）',
  `payment_country` VARCHAR(10) DEFAULT 'MO' COMMENT '支付国家代码',
  `status` ENUM('active', 'expired', 'error') DEFAULT 'active' COMMENT '账号状态',
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  UNIQUE KEY `uk_email` (`email`),
  KEY `idx_status` (`status`),
  KEY `idx_registration_time` (`registration_time`),
  KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Windsurf 账号表';
```

### 字段说明

| 字段名 | 类型 | 说明 | 备注 |
|--------|------|------|------|
| id | BIGINT | 主键ID | 自增 |
| email | VARCHAR(255) | 邮箱地址 | 唯一索引 |
| password | VARCHAR(255) | 密码 | 明文存储（测试用） |
| first_name | VARCHAR(100) | 名 | - |
| last_name | VARCHAR(100) | 姓 | - |
| registration_time | DATETIME | 注册时间 | 支付成功时间 |
| quota_used | DECIMAL(10,2) | 已使用配额 | 默认0 |
| quota_total | DECIMAL(10,2) | 总配额 | 默认0 |
| billing_days | INT | 下次账单天数 | 可空 |
| billing_date | VARCHAR(50) | 账单日期 | 可空 |
| payment_card_number | VARCHAR(20) | 支付卡号 | **完整卡号** |
| payment_country | VARCHAR(10) | 支付国家 | 默认MO(澳门) |
| status | ENUM | 账号状态 | active/expired/error |
| created_at | TIMESTAMP | 记录创建时间 | 自动 |
| updated_at | TIMESTAMP | 记录更新时间 | 自动 |

## 🔧 使用方式

### 1. 初始化数据库

```bash
# 登录 MySQL
mysql -h 172.22.222.111 -P 3306 -u windsurf-auto-register -p

# 执行初始化脚本
source src/tools/database/init.sql
```

### 2. 配置环境变量

在 `.env` 文件中：

```bash
MYSQL_HOST=172.22.222.111
MYSQL_PORT=3306
MYSQL_USER=windsurf-auto-register
MYSQL_PASSWORD=Qichen5210523
MYSQL_DATABASE=windsurf-auto-register
```

### 3. 在代码中使用

```javascript
const database = require('./src/tools/database');

// 初始化连接
await database.initialize();

// 获取 Repository
const accountRepo = database.getRepository('account');

// 创建账号
const accountId = await accountRepo.create({
  email: 'test@example.com',
  password: 'Password123!',
  firstName: 'John',
  lastName: 'Doe',
  registrationTime: new Date(),
  quotaTotal: 600.00,
  paymentCardNumber: '6228367541234567',
  paymentCountry: 'MO',
  status: 'active'
});

// 查询账号
const account = await accountRepo.findByEmail('test@example.com');

// 更新账号
await accountRepo.update('test@example.com', {
  quotaUsed: 10.5,
  status: 'active'
});

// 关闭连接
await database.close();
```

## 🏗️ 设计模式

### 单例模式 (Singleton)
`DatabaseConnection` 使用单例模式，确保全局只有一个数据库连接池。

### 仓储模式 (Repository)
`AccountRepository` 封装所有数据库操作，业务逻辑无需关心 SQL 细节。

### 工厂模式 (Factory)
`database.getRepository()` 使用工厂方法获取不同的 Repository。

## 📁 目录结构

```
src/tools/database/
├── index.js              # 工具入口
├── connection.js         # 数据库连接（单例）
├── config.js             # 配置文件
├── account-repository.js # 账号仓储
├── init.sql              # 初始化脚本
└── README.md             # 说明文档
```

## 🔄 扩展性

### 添加新表

1. 在 `init.sql` 添加建表语句
2. 创建对应的 Repository 文件（如 `user-repository.js`）
3. 在 `index.js` 注册新的 Repository

示例：

```javascript
// src/tools/database/index.js
getRepository(name) {
  const repositories = {
    account: new AccountRepository(connection),
    user: new UserRepository(connection)  // 新增
  };
  
  return repositories[name];
}
```

## ⚠️ 注意事项

1. **安全性**: 当前密码为明文存储，仅用于测试环境
2. **连接池**: 默认最大连接数为10，可在 `config.js` 调整
3. **重复插入**: 邮箱已存在时会自动更新记录
4. **事务**: 暂未实现，复杂操作需自行管理事务

## 📊 数据库配置信息

- **地址**: 172.22.222.111:3306
- **用户**: windsurf-auto-register
- **密码**: Qichen5210523
- **数据库**: windsurf-auto-register
