# 用户系统使用指南

## 新功能概述

已为 Meow Embedded Music Server 添加完整的用户系统，支持：

### ✨ 核心功能

1. **用户认证**
   - 用户注册（用户名 + 邮箱 + 密码）
   - 用户登录
   - 会话管理（基于Token）
   - 安全的密码加密存储

2. **个人歌单管理**
   - 每个用户独立的"我喜欢"歌单
   - 创建自定义歌单
   - 添加/删除歌曲到歌单
   - 删除自定义歌单

3. **音乐搜索和播放**
   - 在线搜索音乐
   - 实时播放音乐
   - 添加到个人歌单
   - 查看歌单歌曲列表

## 快速开始

### 1. 安装依赖

```bash
go mod tidy
```

### 2. 启动服务器

```bash
go run .
```

### 3. 访问应用

打开浏览器访问：
- **新版应用（推荐）**: `http://localhost:2233/app`
- **旧版界面（兼容）**: `http://localhost:2233/`

## API 文档

### 认证相关

#### 注册
```http
POST /api/auth/register
Content-Type: application/json

{
  "username": "testuser",
  "email": "test@example.com",
  "password": "password123"
}
```

**响应**:
```json
{
  "token": "session_token_here",
  "user": {
    "id": "user_id",
    "username": "testuser",
    "email": "test@example.com",
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2024-01-01T00:00:00Z"
  }
}
```

#### 登录
```http
POST /api/auth/login
Content-Type: application/json

{
  "username": "testuser",
  "password": "password123"
}
```

#### 登出
```http
POST /api/auth/logout
Authorization: Bearer <token>
```

#### 获取当前用户信息
```http
GET /api/auth/me
Authorization: Bearer <token>
```

### 歌单管理（需要认证）

#### 获取用户所有歌单
```http
GET /api/user/playlists
Authorization: Bearer <token>
```

#### 创建歌单
```http
POST /api/user/playlists/create
Authorization: Bearer <token>
Content-Type: application/json

{
  "name": "我的歌单",
  "description": "这是我的歌单描述"
}
```

#### 添加歌曲到歌单
```http
POST /api/user/playlists/add-song?playlist_id=<playlist_id>
Authorization: Bearer <token>
Content-Type: application/json

{
  "title": "歌曲名",
  "artist": "歌手名",
  "audio_url": "/path/to/audio",
  "audio_full_url": "/path/to/full/audio",
  "cover_url": "/path/to/cover",
  "lyric_url": "/path/to/lyric",
  "duration": 240
}
```

#### 从歌单移除歌曲
```http
DELETE /api/user/playlists/remove-song?playlist_id=<playlist_id>&title=<song_title>&artist=<artist_name>
Authorization: Bearer <token>
```

#### 删除歌单
```http
DELETE /api/user/playlists/delete?playlist_id=<playlist_id>
Authorization: Bearer <token>
```

### 音乐搜索

```http
GET /stream_pcm?song=<歌曲名>&singer=<歌手名>
```

## 数据存储

用户数据存储在以下文件中：

- `./files/users.json` - 用户账户信息
- `./files/user_playlists.json` - 用户歌单数据
- `./files/playlists.json` - 旧版全局歌单（向后兼容）

## 功能特性

### 🔒 安全性

- 密码使用 bcrypt 加密存储
- 基于 Token 的会话管理
- API 请求认证保护

### 📱 响应式设计

- 现代化 UI 界面
- 支持桌面和移动设备
- 流畅的用户体验

### 🎵 音乐功能

- 实时搜索音乐
- 在线播放
- 个人收藏管理
- 自定义歌单

### 🔄 向后兼容

- 保留旧版 API 端点
- 支持旧版界面访问
- 平滑升级路径

## 使用示例

### JavaScript 示例

```javascript
// 注册用户
const registerResponse = await fetch('/api/auth/register', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    username: 'myuser',
    email: 'user@example.com',
    password: 'securepass123'
  })
});
const { token, user } = await registerResponse.json();

// 获取歌单
const playlistsResponse = await fetch('/api/user/playlists', {
  headers: { 'Authorization': `Bearer ${token}` }
});
const playlists = await playlistsResponse.json();

// 搜索音乐
const musicResponse = await fetch('/stream_pcm?song=告白气球&singer=周杰伦');
const song = await musicResponse.json();

// 添加到歌单
await fetch(`/api/user/playlists/add-song?playlist_id=${playlists[0].id}`, {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(song)
});
```

## 故障排除

### 问题：无法登录
- 检查用户名和密码是否正确
- 确认用户已注册
- 检查服务器日志

### 问题：Token 过期
- 重新登录获取新 Token
- Token 存储在 localStorage 中，清除浏览器缓存后需要重新登录

### 问题：添加歌曲失败
- 确认已登录并有有效 Token
- 检查歌单 ID 是否正确
- 确认歌曲信息完整

## 开发者信息

- 后端框架：Go (Golang)
- 前端框架：React 18 + TailwindCSS
- 认证方式：Token-based
- 数据存储：JSON 文件

## 更新日志

### v2.0.0 (当前版本)
- ✅ 添加用户注册和登录功能
- ✅ 实现个人歌单管理
- ✅ 创建现代化 Web 界面
- ✅ 支持在线音乐搜索和播放
- ✅ 向后兼容旧版 API

---

**享受您的音乐之旅！ 🎵**
