Files
xiaoxia-saas/CONTRIBUTING.md
T

4.4 KiB

贡献指南

感谢你对小虾 SaaS 项目的兴趣!

🚀 快速开始

1. Fork 和克隆

# Fork 项目到你的账号
# 然后克隆
git clone https://github.com/your-username/xiaoxia-saas.git
cd xiaoxia-saas

2. 设置开发环境

# 创建虚拟环境
python -m venv venv
source venv/bin/activate  # Linux/Mac
# venv\Scripts\activate  # Windows

# 安装依赖
pip install -r requirements.txt

# 使用内存数据库(无需 PostgreSQL)
echo "USE_IN_MEMORY_DB=true" > .env

# 启动开发服务器
uvicorn apps.api.main:app --reload

3. 运行测试

# 运行所有测试
pytest tests/ -v

# 运行单元测试
pytest tests/unit -v

# 生成覆盖率报告
pytest --cov=packages --cov-report=html

📝 提交规范

Commit Message 格式

<type>(<scope>): <subject>

<body>

<footer>

Type:

  • feat: 新功能
  • fix: Bug 修复
  • docs: 文档更新
  • style: 代码格式(不影响功能)
  • refactor: 重构
  • test: 测试相关
  • chore: 构建/工具相关

示例:

feat(auth): add password reset functionality

- Add RequestPasswordResetUseCase
- Send reset email with token
- Implement ResetPasswordUseCase
- Add unit tests

Closes #123

🏗️ 代码规范

Python 代码风格

  • 遵循 PEP 8
  • 使用类型注解
  • 函数和类添加 docstring
  • 每个文件顶部添加模块说明

代码格式化

# 安装工具
pip install black isort

# 格式化代码
black packages/ apps/ tests/
isort packages/ apps/ tests/

架构原则

  • 遵循 Clean Architecture
  • 业务逻辑在 Application 层
  • 基础设施在 Adapters 层
  • 保持层次间依赖方向正确

🧪 测试要求

单元测试

  • 所有新功能必须有单元测试
  • 测试覆盖率不低于 80%
  • 使用 pytest fixtures
  • Mock 外部依赖

测试示例

def test_create_workspace_success(use_case, mock_repo):
    \"\"\"测试创建工作空间成功\"\"\"
    request = CreateWorkspaceRequest(
        name="Test",
        owner_user_id="user-123",
    )
    
    response, error = use_case.execute(request)
    
    assert error is None
    assert response.name == "Test"

🔄 Pull Request 流程

1. 创建分支

# 从 main 创建功能分支
git checkout -b feat/your-feature-name

2. 开发和测试

# 编写代码
# 运行测试
pytest tests/ -v

# 提交
git add .
git commit -m "feat: your feature description"

3. 推送和创建 PR

# 推送到你的 fork
git push origin feat/your-feature-name

# 在 GitHub 上创建 Pull Request

4. PR 描述模板

## 变更说明
简要描述此 PR 的目的

## 变更类型
- [ ] 新功能
- [ ] Bug 修复
- [ ] 文档更新
- [ ] 重构
- [ ] 其他

## 测试
- [ ] 添加了单元测试
- [ ] 所有测试通过
- [ ] 手动测试通过

## 截图(如适用)
添加相关截图

## 相关 Issue
Closes #issue_number

🐛 报告 Bug

Bug 报告模板

**描述**
清晰描述 bug

**复现步骤**
1. 进入 '...'
2. 点击 '...'
3. 滚动到 '...'
4. 看到错误

**期望行为**
描述期望发生什么

**实际行为**
描述实际发生了什么

**环境**
- OS: [e.g. Ubuntu 22.04]
- Python: [e.g. 3.12]
- 浏览器: [e.g. Chrome 120]

**额外信息**
添加任何其他相关信息

💡 功能建议

功能请求模板

**功能描述**
简要描述建议的功能

**问题**
此功能解决什么问题?

**建议方案**
描述你期望的解决方案

**替代方案**
考虑过哪些替代方案?

**额外信息**
其他相关信息

📚 文档贡献

文档类型

  • README 和快速开始
  • API 使用指南
  • 部署文档
  • 故障排查
  • 架构说明

文档规范

  • 使用 Markdown 格式
  • 代码示例使用代码块
  • 添加适当的标题层级
  • 包含实际可运行的示例

🎯 优先级

高优先级

  • Bug 修复
  • 安全漏洞修复
  • 性能优化
  • 核心功能增强

中优先级

  • 新功能
  • 代码重构
  • 测试增强
  • 文档改进

低优先级

  • 代码风格调整
  • 次要功能
  • 实验性功能

📞 联系方式


📄 许可证

贡献的代码将使用与项目相同的许可证。


感谢你的贡献!🎉