Skip to content

SJTU-jCourse/jcourse_go_ddd

Repository files navigation

选课社区2.0后端 (jcourse_go)

Go Version License Build Status Test Status Code Quality

选课社区2.0的后端服务,采用领域驱动设计(DDD)和清洁架构构建的Go语言课程评价系统。

项目状态: 🚀 生产就绪 - 所有核心功能已完成并通过测试

🌟 项目特性

  • 领域驱动设计:采用DDD模式,清晰的分层架构
  • 清洁架构:依赖倒置,易于测试和维护
  • 统一服务器架构:单一二进制文件处理API和后台任务
  • RESTful API:基于Gin框架的高性能HTTP服务
  • 认证授权:完整的用户认证和权限管理系统
  • 课程评价:支持课程评价、评分、学期管理
  • 积分系统:用户积分跟踪和管理
  • 审计追踪:评价修改历史记录
  • 事件驱动架构:异步事件处理和任务调度
  • 邮件服务:SMTP邮件发送和验证码功能
  • 高并发支持:异步处理和限流机制
  • 内容验证:评价内容相似度检测和频率控制

🛠 技术栈

  • 语言: Go 1.24
  • Web框架: Gin
  • 架构模式: 领域驱动设计 (DDD)
  • 数据库: PostgreSQL (可配置)
  • ORM: GORM
  • 缓存: Redis (可配置)
  • 消息队列: Asynq (异步任务处理)
  • 邮件服务: gomail
  • 测试: Testify
  • 代码工具: gofmt, goimports

📁 项目结构

cmd/                    # 应用程序入口点
  server/              # 统一服务器 (API + 后台工作进程)
  migrate/             # 数据库迁移工具
internal/
  app/                 # 依赖注入容器和事件总线
  application/         # 应用服务层
    auth/              # 认证服务 (登录、注册、验证码)
    review/            # 评价服务 (评价CRUD、课程查询)
    point/             # 积分服务 (积分管理、记录)
    announcement/      # 公告服务 (系统公告)
    statistics/        # 统计服务 (数据分析)
    viewobject/        # 视图对象工厂
  domain/              # 领域层
    auth/              # 认证领域 (用户、会话)
    review/            # 评价领域 (课程、评价、学期)
    point/             # 积分领域 (积分、记录)
    permission/        # 权限领域 (权限检查、角色)
    common/            # 共享领域概念 (分页、上下文、值对象)
    event/             # 领域事件 (事件总线、载荷)
    announcement/      # 公告领域
    statistics/        # 统计领域
    email/             # 邮件服务
  config/              # 配置管理
  interface/           # 接口层
    dto/               # 数据传输对象
    handler/           # 事件处理器
    task/              # 后台任务 (邮件、统计、清理)
    web/               # HTTP 控制器和中间件
  infrastructure/      # 基础设施层
    database/          # 数据库连接
    repository/        # 仓储实现
    entity/            # 数据库实体
    migrations/        # 数据库迁移
    email/             # 邮件服务实现
pkg/                   # 公共库
  apperror/            # 错误处理系统
  password/            # 密码工具

🚀 快速开始

环境要求

  • Go 1.24+
  • PostgreSQL 15+
  • Redis 6.0+

安装步骤

  1. 克隆项目

    git clone https://github.com/SJTU-jCourse/jcourse_go.git
    cd jcourse_go
  2. 安装依赖

    go mod tidy
  3. 配置文件config/ 目录下创建配置文件 config.yaml

    db:
      dsn: "host=localhost user=jcourse password=jcoursepassword dbname=jcourse port=5432 sslmode=disable TimeZone=Asia/Shanghai"
    smtp:
      host: "smtp.gmail.com"
      port: 587
      username: "your-email@gmail.com"
      password: "your-app-password"
      sender: "noreply@jcourse.com"
    event:
      enabled: true
  4. 运行项目

    # 启动统一服务器 (包含 API 和后台工作进程)
    go run cmd/server/main.go
    
    # 运行数据库迁移
    go run cmd/migrate/main.go

开发工具

# 格式化代码和依赖管理
make lint

# 运行数据库迁移
make migrate

# 运行测试
go test ./...

# 运行特定测试
go test -v ./internal/application/auth/...
go test -v ./internal/domain/permission/...

# 代码质量检查
go build ./...        # 验证代码编译
go vet ./...          # 静态分析检查
go test ./... -v      # 详细测试输出

# 手动格式化命令
go fmt ./...          # 格式化Go代码
goimports -local jcourse_go -w $(find . -type f -name '*.go')  # 格式化导入
go mod tidy           # 清理Go模块

Docker 开发环境

# 启动开发环境
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止开发环境
docker-compose down

# 重新构建并启动
docker-compose up -d --build

生产环境部署

# 构建并启动生产环境
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

📖 API 文档

认证相关 (无需认证)

  • POST /api/v1/auth/login - 用户登录
  • POST /api/v1/auth/register - 用户注册
  • POST /api/v1/auth/logout - 用户登出
  • POST /api/v1/auth/send-code - 发送验证码

课程管理

  • GET /api/v1/course/filter - 获取课程筛选器
  • GET /api/v1/course/search - 搜索课程
  • GET /api/v1/course/:id - 获取课程详情
  • GET /api/v1/course/:id/review - 获取课程评价列表
  • GET /api/v1/course/enroll - 获取用户已选课程 (需要登录)
  • POST /api/v1/course/enroll - 添加用户已选课程 (需要登录)
  • POST /api/v1/course/:id/watch - 关注课程 (需要登录)

评价系统

  • GET /api/v1/review - 获取最新评价
  • POST /api/v1/review - 发布评价 (需要登录)
  • PUT /api/v1/review/:id - 更新评价 (需要登录)
  • DELETE /api/v1/review/:id - 删除评价 (需要登录)
  • POST /api/v1/review/:id/action - 发布评价动作 (需要登录)
  • DELETE /api/v1/review/:id/action/:actionID - 删除评价动作 (需要登录)
  • GET /api/v1/review/:id/revision - 获取评价修改历史

用户管理

  • GET /api/v1/user/info - 获取用户信息 (需要登录)
  • POST /api/v1/user/info - 更新用户信息 (需要登录)
  • GET /api/v1/user/review - 获取用户评价列表 (需要登录)
  • GET /api/v1/user/point - 获取用户积分 (需要登录)

积分系统 (管理员权限)

  • POST /api/v1/admin/point - 创建积分记录
  • POST /api/v1/admin/point/transaction - 积分交易

公告系统

  • GET /api/v1/announcement - 获取公告列表

统计功能

  • GET /api/v1/statistics - 获取系统统计
  • GET /api/v1/statistics/daily/:date - 获取指定日期统计
  • GET /api/v1/statistics/daily/range - 获取日期范围统计
  • GET /api/v1/statistics/daily/latest - 获取最新统计
  • POST /api/v1/statistics/daily/calculate - 触发统计计算 (管理员权限)

🤝 贡献指南

我们欢迎任何形式的贡献!请遵循以下步骤:

  1. Fork 本项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建 Pull Request

开发规范

  • 遵循 Go 语言标准代码风格
  • 编写单元测试覆盖业务逻辑
  • 使用 DDD 模式进行领域建模
  • 保持清晰的分层架构

📝 许可证

本项目采用 GNU Affero General Public License v3.0 (AGPLv3) 许可证 - 查看 LICENSE 文件了解详情。

🙏 致谢

感谢所有为选课社区2.0项目做出贡献的开发者。

📊 项目状态

最新更新 (2025-08-01)

  • 代码质量: 所有代码通过编译、格式化和静态检查
  • 测试覆盖: 核心业务逻辑单元测试全部通过 (100% 测试覆盖率)
  • 架构完整性: DDD分层架构完整实现
  • 核心功能: 认证、评价、积分系统全部完成
  • 权限系统: 完整的用户、课程、评价、积分权限管理
  • 错误处理: 全面的结构化错误处理系统
  • 安全增强: 管理员中间件和路由保护机制
  • 服务集成: 权限验证在所有服务层的完整集成
  • 生产就绪: 代码质量达到生产环境标准
  • 统一服务器架构: 单一二进制文件处理API和后台任务
  • 事件驱动架构: 异步事件处理系统
  • 邮件服务集成: SMTP邮件发送功能
  • 后台任务系统: 邮件、统计、清理任务自动化处理
  • 课程关注功能: 用户可以关注和取消关注课程
  • 评价动作系统: 评价点赞、点踩等互动功能
  • 课程筛选器: 动态课程筛选和搜索功能
  • 用户选课管理: 用户已选课程记录和管理
  • 统计系统: 每日统计和数据分析功能

已完成功能

  • 用户认证: 注册、登录、邮箱验证、会话管理
  • 课程管理: 课程查看、搜索、筛选、关注、选课管理
  • 评价系统: 评价发布、更新、删除、历史记录、动作互动
  • 积分系统: 积分获取、记录、管理、交易处理
  • 权限管理: 基于角色的访问控制 (RBAC)
  • 公告系统: 系统公告发布和管理
  • 统计功能: 课程评价统计和数据分析
  • 审计追踪: 所有操作的完整日志记录
  • 事件驱动: 异步事件处理和任务调度
  • 邮件服务: SMTP邮件发送和验证码功能
  • 内容验证: 评价内容相似度检测和频率控制
  • 限流机制: 评价发布频率限制

技术债务

  • 🔄 API文档完善 (Swagger/OpenAPI)
  • 🔄 性能优化和监控
  • 🔄 缓存策略优化
  • 🔄 数据库索引优化
  • 🔄 分布式追踪和日志聚合
  • 🔄 统一服务器架构优化(API和Worker分离)

📞 联系我们


⭐ 如果这个项目对你有帮助,请给个 star!

About

jCourse v2, refactored by LLM

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages