# v3.0 代码修复记录

**修复日期：** 2025-02-06
**修复版本：** v3.0.1

---

## 修复的问题

### 1. Collection 模型唯一约束逻辑错误 ✅

**问题描述：**
- 原约束：`(user_id, site_id, folder_id)`
- 由于 `folder_id` 可为 NULL，导致用户可以多次收藏同一网站到"未分类"

**修复方案：**
- 新约束：`(user_id, site_id)`
- 确保每个用户只能收藏一次同一个网站

**修改文件：**
- `models.py` (第 262-265 行)

**数据库迁移：**
- 新增 `fix_collection_constraint.py` 脚本用于修复现有数据库

---

### 2. 用户注册重复提交数据库 ✅

**问题描述：**
- 注册时先提交用户数据，登录后再次提交 `last_login`
- 造成不必要的数据库操作

**修复方案：**
- 在第一次提交前设置 `last_login`
- 只提交一次数据库

**修改文件：**
- `app.py` (第 643-651 行)

**修复前：**
```python
user = User(username=username)
user.set_password(password)
db.session.add(user)
db.session.commit()  # 第一次

login_user(user)
user.last_login = datetime.now()
db.session.commit()  # 第二次
```

**修复后：**
```python
user = User(username=username)
user.set_password(password)
user.last_login = datetime.now()
db.session.add(user)
db.session.commit()  # 只提交一次

login_user(user)
```

---

### 3. JavaScript 未使用的变量 ✅

**问题描述：**
- `updateCollectButton()` 函数中获取了 `icon` 元素但未使用

**修复方案：**
- 删除未使用的变量声明

**修改文件：**
- `templates/detail_new.html` (第 1599-1611 行)

---

### 4. 文件夹计数逻辑缺失 ✅

**问题描述：**
- 模板中使用 `folder.count` 但后端未计算
- 导致文件夹标签显示的数量不正确

**修复方案：**
- 在 `user_collections()` 路由中为每个文件夹计算收藏数量

**修改文件：**
- `app.py` (第 1141-1144 行)

**新增代码：**
```python
# 为每个文件夹添加收藏计数
for folder in folders:
    folder.count = Collection.query.filter_by(
        user_id=current_user.id,
        folder_id=folder.id
    ).count()
```

---

### 5. JavaScript 错误处理不完善 ✅

**问题描述：**
- Fetch API 未检查 HTTP 状态码
- 如果服务器返回 500 错误，`.json()` 可能失败但不会被捕获

**修复方案：**
- 在所有 fetch 调用中添加状态码检查

**修改文件：**
- `templates/detail_new.html` (第 1579-1662 行)

**修复模式：**
```javascript
fetch('/api/...')
    .then(r => {
        if (!r.ok) throw new Error(`HTTP ${r.status}`);
        return r.json();
    })
    .then(data => { ... })
    .catch(err => { ... });
```

---

## 修改的文件清单

1. **models.py** - 修复 Collection 唯一约束
2. **app.py** - 修复注册重复提交 + 添加文件夹计数
3. **templates/detail_new.html** - 删除未使用变量 + 改进错误处理
4. **fix_collection_constraint.py** (新增) - 数据库约束修复脚本

---

## 部署说明

### 对于新部署（未运行过 create_user_tables.py）

直接运行：
```bash
python create_user_tables.py
```

新的约束会自动生效。

### 对于已部署的环境（已有数据）

需要运行修复脚本：
```bash
python fix_collection_constraint.py
```

**注意：** 如果数据库中已存在重复收藏（同一用户多次收藏同一网站），修复脚本会失败。需要先清理重复数据。

---

## 测试建议

修复后请测试：

1. **收藏功能** - 尝试多次收藏同一网站，应该提示"已收藏"
2. **文件夹计数** - 访问收藏列表，文件夹标签应显示正确的数量
3. **错误处理** - 断网情况下点击收藏，应显示"网络请求失败"
4. **注册流程** - 注册新用户，检查数据库只有一条记录

---

**修复版本：** v3.0.1
**修复人员：** Claude Sonnet 4.5
