Files
skills/piano-practice-sys/references/backup_api.md
T
hmo 04db423416 Initial commit: skills library
- 70 skills with code and documentation
- Add .gitignore (ignore __pycache__, output/, temp/, venv/)
- Clean up test intermediates and caches
2026-04-26 19:27:40 +08:00

239 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 备份与恢复 API 详细文档
## 概述
系统内置备份功能,支持数据备份、查看、恢复,以及操作日志查看。
## 备份目录结构
```
bk/
├── backup_20260419_143000/ # 备份文件夹
│ ├── meta.json # 备份元信息
│ ├── classes.json # 班级数据
│ ├── students.json # 学员数据
│ ├── problems/ # 问题配置文件
│ │ ├── 01_手小.md
│ │ ├── 04_压手腕.md
│ │ └── ...
│ └── api_config.json # API配置
├── backup_20260420_100000/ # 另一个备份
├── logs/
│ ├── 2026-04-19.jsonl # 操作日志
│ └── 2026-04-20.jsonl
```
## API 接口
### 1. 创建备份
**接口**: `POST /api/backup`
**权限**: 管理员
**请求体**:
```json
{
"description": "修改压手腕问题前"
}
```
**响应**:
```json
{
"message": "备份成功",
"backup_id": "backup_20260419_143000",
"includes": ["classes", "students", "problems", "config"]
}
```
**示例**:
```bash
curl -X POST http://localhost:5000/api/backup \
-H "Content-Type: application/json" \
-d '{"description": "修改压手腕问题前"}'
```
---
### 2. 查看备份列表
**接口**: `GET /api/backup`
**权限**: 登录用户
**响应**:
```json
[
{
"id": "backup_20260419_143000",
"created_at": "2026-04-19T14:30:00",
"operator": "admin",
"description": "修改压手腕问题前",
"includes": ["classes", "students", "problems", "config"]
}
]
```
**示例**:
```bash
curl http://localhost:5000/api/backup
```
---
### 3. 查看备份详情
**接口**: `GET /api/backup/<backup_id>`
**权限**: 登录用户
**响应**:
```json
{
"meta": {
"backup_id": "backup_20260419_143000",
"created_at": "2026-04-19T14:30:00",
"operator": "admin",
"description": "修改压手腕问题前",
"includes": ["classes", "students", "problems", "config"]
},
"classes": [...],
"students": [...],
"problems": ["01_手小.md", "04_压手腕.md", ...]
}
```
**示例**:
```bash
curl http://localhost:5000/api/backup/backup_20260419_143000
```
---
### 4. 恢复备份
**接口**: `POST /api/backup/<backup_id>/restore`
**权限**: 管理员
**请求体**:
```json
{
"confirm": "确认恢复"
}
```
**⚠️ 安全要求**: 必须输入 exactly `确认恢复` 才能执行
**响应**:
```json
{
"message": "恢复成功",
"restored": ["classes", "students", "problems"],
"auto_backup": "auto_before_restore_20260419_150000"
}
```
**注意**: 恢复前会自动创建当前数据的备份(auto_before_restore_xxx
**示例**:
```bash
curl -X POST http://localhost:5000/api/backup/backup_20260419_143000/restore \
-H "Content-Type: application/json" \
-d '{"confirm": "确认恢复"}'
```
---
### 5. 查看操作日志
**接口**: `GET /api/logs`
**参数**:
- `date`: 日期,格式 `YYYY-MM-DD`(默认今天)
**权限**: 管理员
**响应**:
```json
[
{
"timestamp": "2026-04-19T14:30:00",
"action": "backup_create",
"operator": "admin",
"target_type": "system",
"target_id": "backup_20260419_143000",
"detail": "创建备份: 修改压手腕问题前",
"ip": "127.0.0.1"
},
{
"timestamp": "2026-04-19T15:00:00",
"action": "problem_update",
"operator": "admin",
"target_type": "problem",
"target_id": "04",
"detail": "更新问题: 压手腕",
"ip": "127.0.0.1"
}
]
```
**示例**:
```bash
# 查看今天的日志
curl http://localhost:5000/api/logs
# 查看指定日期的日志
curl "http://localhost:5000/api/logs?date=2026-04-19"
```
---
## 安全机制
| 机制 | 说明 |
|------|------|
| 权限控制 | 备份/恢复/日志需要管理员权限 |
| 二次确认 | 恢复必须输入"确认恢复" |
| 自动备份 | 恢复前自动备份当前数据 |
| 操作日志 | 所有操作记录可追溯 |
## 工作流程示例
### 场景:修改问题配置
```bash
# 1. 先看看当前的问题配置
curl http://localhost:5000/api/settings/problems
# 2. 讨论后确认要修改"压手腕"问题
# 3. 修改前创建备份
curl -X POST http://localhost:5000/api/backup \
-d '{"description": "修改压手腕问题前"}'
# 4. 执行修改(通过Web界面或API)
# 5. 验证修改结果
curl http://localhost:5000/api/settings/problems/04
```
### 场景:数据恢复
```bash
# 发现修改出问题,想要恢复
# 1. 查看备份列表
curl http://localhost:5000/api/backup
# 2. 查看想要恢复的备份内容
curl http://localhost:5000/api/backup/backup_20260419_143000
# 3. 恢复备份(需要确认)
curl -X POST http://localhost:5000/api/backup/backup_20260419_143000/restore \
-d '{"confirm": "确认恢复"}'
# 4. 验证恢复结果
curl http://localhost:5000/api/students
```