# 贡献指南

感谢您对 KatelyaTV 项目的关注！我们欢迎所有形式的贡献，包括但不限于：

- 🐛 报告 Bug
- 💡 提出新功能建议
- 📝 改进文档
- 🔧 提交代码修复
- 🎨 改进用户界面
- 🧪 编写测试用例

## 🚀 快速开始

### 环境要求

- Node.js 18+
- pnpm 8+
- Git

### 本地开发设置

1. **Fork 项目**
   ```bash
   # 在 GitHub 上 Fork 本仓库
   # 然后克隆到本地
   git clone https://github.com/YOUR_USERNAME/katelyatv.git
   cd katelyatv
   ```

2. **安装依赖**
   ```bash
   pnpm install
   ```

3. **环境配置**
   ```bash
   # 复制环境变量文件
   cp .env.example .env.local
   
   # 编辑环境变量
   nano .env.local
   ```

4. **启动开发服务器**
   ```bash
   pnpm dev
   ```

5. **访问应用**
   打开浏览器访问 `http://localhost:3000`

## 📋 开发规范

### 代码风格

我们使用以下工具来保持代码质量：

- **ESLint** - 代码质量检查
- **Prettier** - 代码格式化
- **TypeScript** - 类型安全
- **Husky** - Git hooks

### 代码检查

```bash
# 检查代码质量
pnpm lint

# 自动修复代码问题
pnpm lint:fix

# 类型检查
pnpm typecheck

# 运行测试
pnpm test
```

### Git 提交规范

我们使用 [Conventional Commits](https://www.conventionalcommits.org/) 规范：

```bash
# 功能开发
git commit -m "feat: 添加观看历史记录功能"

# Bug 修复
git commit -m "fix: 修复播放进度记录丢失问题"

# 文档更新
git commit -m "docs: 更新 README.md 部署说明"

# 代码重构
git commit -m "refactor: 重构数据库存储层"

# 性能优化
git commit -m "perf: 优化搜索接口响应速度"

# 测试相关
git commit -m "test: 添加播放记录 API 测试用例"
```

### 分支管理

- `main` - 主分支，用于生产环境
- `develop` - 开发分支，用于功能集成
- `feature/*` - 功能分支，用于开发新功能
- `bugfix/*` - 修复分支，用于修复 Bug
- `hotfix/*` - 热修复分支，用于紧急修复

## 🎯 贡献流程

### 1. 报告 Bug

在提交 Bug 报告之前，请：

1. 搜索现有的 Issues（仓库 Issues 页面）
2. 检查是否已有相关报告
3. 使用 Bug 报告模板

**Bug 报告模板：**

```markdown
## Bug 描述
简要描述 Bug 的现象

## 重现步骤
1. 打开应用
2. 执行操作 A
3. 执行操作 B
4. 观察结果

## 预期行为
描述期望的正确行为

## 实际行为
描述实际发生的错误行为

## 环境信息
- 操作系统：Windows 11 / macOS 14 / Ubuntu 22.04
- 浏览器：Chrome 120 / Firefox 121 / Safari 17
- 设备：桌面 / 移动端
- 存储类型：localStorage / Redis / D1 / Upstash

## 截图/日志
如果适用，请提供截图或错误日志

## 其他信息
任何其他相关信息
```

### 2. 功能建议

在提出功能建议之前，请：

1. 搜索现有的 Discussions（仓库 Discussions 页面）
2. 检查是否已有相关讨论
3. 使用功能建议模板

**功能建议模板：**

```markdown
## 功能描述
简要描述您希望添加的功能

## 使用场景
描述在什么情况下这个功能会很有用

## 实现建议
如果有的话，提供实现思路或技术建议

## 替代方案
描述是否已有其他方式可以实现类似功能

## 优先级
- [ ] 高 - 核心功能，影响用户体验
- [ ] 中 - 有用功能，但不是必需的
- [ ] 低 - 锦上添花的功能

## 其他信息
任何其他相关信息
```

### 3. 代码贡献

#### 提交 Pull Request

1. **创建功能分支**
   ```bash
   git checkout -b feature/your-feature-name
   ```

2. **开发功能**
   - 编写代码
   - 添加测试用例
   - 更新文档

3. **代码检查**
   ```bash
   pnpm lint
   pnpm typecheck
   pnpm test
   ```

4. **提交代码**
   ```bash
   git add .
   git commit -m "feat: 添加新功能描述"
   ```

5. **推送分支**
   ```bash
   git push origin feature/your-feature-name
   ```

6. **创建 Pull Request**
   - 在 GitHub 上创建 PR
   - 使用 PR 模板
   - 等待代码审查

#### Pull Request 模板

```markdown
## 变更描述
简要描述本次 PR 的变更内容

## 变更类型
- [ ] Bug 修复
- [ ] 新功能
- [ ] 文档更新
- [ ] 代码重构
- [ ] 性能优化
- [ ] 测试相关
- [ ] 其他

## 测试
- [ ] 本地测试通过
- [ ] 添加了新的测试用例
- [ ] 所有测试用例通过

## 检查清单
- [ ] 代码符合项目规范
- [ ] 更新了相关文档
- [ ] 添加了必要的注释
- [ ] 没有引入新的警告
- [ ] 测试覆盖率没有降低

## 相关 Issue
关联的 Issue 编号：#123

## 截图
如果涉及 UI 变更，请提供截图

## 其他信息
任何其他相关信息
```

## 🧪 测试指南

### 运行测试

```bash
# 运行所有测试
pnpm test

# 监听模式运行测试
pnpm test:watch

# 生成测试覆盖率报告
pnpm test:coverage
```

### 编写测试

我们使用 Jest 作为测试框架：

```typescript
import { render, screen } from '@testing-library/react';
import { VideoCard } from '@/components/VideoCard';

describe('VideoCard', () => {
  it('应该正确显示视频标题', () => {
    const mockProps = {
      id: 'test-id',
      title: '测试视频',
      poster: '/test-poster.jpg',
      year: '2024',
      source: 'test-source',
      source_name: '测试源'
    };

    render(<VideoCard {...mockProps} />);
    
    expect(screen.getByText('测试视频')).toBeInTheDocument();
  });
});
```

## 📚 文档指南

### 文档结构

- `README.md` - 项目主要说明文档
- `CHANGELOG.md` - 版本更新日志
- `CONTRIBUTING.md` - 贡献指南
- `docs/` - 详细文档目录

### 文档规范

- 使用清晰的标题层级
- 提供代码示例
- 包含必要的截图
- 保持文档的时效性

## 🔧 开发工具

### 推荐的工具

- **VS Code** - 代码编辑器
- **GitHub Desktop** - Git 图形界面
- **Postman** - API 测试
- **Chrome DevTools** - 浏览器调试

### VS Code 扩展

```json
{
  "recommendations": [
    "esbenp.prettier-vscode",
    "dbaeumer.vscode-eslint",
    "bradlc.vscode-tailwindcss",
    "ms-vscode.vscode-typescript-next"
  ]
}
```

## 🚀 部署测试

### 本地构建测试

```bash
# 构建项目
pnpm build

# 启动生产服务器
pnpm start
```

### Docker 测试

```bash
# 构建 Docker 镜像（镜像名示例）
docker build -t katelyatv:test .

# 运行容器
docker run -d --name katelyatv-test -p 3000:3000 --env PASSWORD=test123 katelyatv:test
```

## 📞 获取帮助

如果您在贡献过程中遇到问题：

1. **查看文档** - 首先查看项目文档
2. **搜索 Issues** - 查找是否有相关问题
3. **创建 Discussion** - 在 Discussions 中提问
4. **提交 Issue** - 如果是 Bug，请提交 Issue

## 🎉 致谢

感谢所有为 KatelyaTV 项目做出贡献的开发者！

您的贡献让这个项目变得更好。无论是代码、文档、测试还是反馈，我们都非常感激。

---

**注意**: 请确保您的贡献符合项目的 MIT 许可证要求。