# 数据库设计 (MongoDB)

**我是卡若。**

这是未来的地基。虽然现在用文件，但我们要按着“马上就要上库”的标准来设计。

## 1. 集合 (Collections)

### 1.1 用户表 (`users`)
核心资产。
\`\`\`javascript
{
  "_id": ObjectId,
  "openid": String,          // 微信 OpenID (唯一键)
  "nickname": String,
  "avatar": String,
  "role": String,            // 'guest', 'member', 'partner', 'admin'
  "tags": [String],          // '潜在客户', '已购', '私域引流'
  "balance": Decimal128,     // 余额 (分润用)
  "created_at": Date,
  "last_login": Date
}
\`\`\`

### 1.2 内容元数据表 (`articles`)
Markdown 存内容，这里存状态。
\`\`\`javascript
{
  "_id": ObjectId,
  "path": String,            // 关联的文件路径 (索引)
  "title": String,
  "views": Number,           // 阅读量
  "likes": Number,           // 点赞量
  "is_free": Boolean,        // 是否试读
  "price": Decimal128,       // 单章价格 (如果有)
  "updated_at": Date
}
\`\`\`

### 1.3 订单表 (`orders`)
流水。
\`\`\`javascript
{
  "_id": ObjectId,
  "order_no": String,        // 订单号
  "user_id": ObjectId,       // Ref users
  "type": String,            // 'membership', 'donate'
  "amount": Decimal128,
  "status": String,          // 'pending', 'paid', 'refunded'
  "pay_time": Date
}
\`\`\`

### 1.4 配置表 (`configs`)
把硬编码变成可配置。
\`\`\`javascript
{
  "_id": ObjectId,
  "key": String,             // 'global_settings'
  "value": {
    "wechat_id": "28533368",
    "banner_text": "限时特惠...",
    "show_popup": true
  }
}
\`\`\`

## 2. 索引策略

- `users.openid`: Unique Index (必须唯一)。
- `articles.path`: Index (查询文章详情用)。
- `orders.user_id`: Index (查用户订单用)。
- `orders.order_no`: Unique Index。

---
**卡若说：**
数据结构定好了，业务逻辑就跑偏不了。
