选课社区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+
-
克隆项目
git clone https://github.com/SJTU-jCourse/jcourse_go.git cd jcourse_go -
安装依赖
go mod tidy
-
配置文件 在
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
-
运行项目
# 启动统一服务器 (包含 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-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 downPOST /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- 触发统计计算 (管理员权限)
我们欢迎任何形式的贡献!请遵循以下步骤:
- Fork 本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
- 遵循 Go 语言标准代码风格
- 编写单元测试覆盖业务逻辑
- 使用 DDD 模式进行领域建模
- 保持清晰的分层架构
本项目采用 GNU Affero General Public License v3.0 (AGPLv3) 许可证 - 查看 LICENSE 文件了解详情。
感谢所有为选课社区2.0项目做出贡献的开发者。
- ✅ 代码质量: 所有代码通过编译、格式化和静态检查
- ✅ 测试覆盖: 核心业务逻辑单元测试全部通过 (100% 测试覆盖率)
- ✅ 架构完整性: DDD分层架构完整实现
- ✅ 核心功能: 认证、评价、积分系统全部完成
- ✅ 权限系统: 完整的用户、课程、评价、积分权限管理
- ✅ 错误处理: 全面的结构化错误处理系统
- ✅ 安全增强: 管理员中间件和路由保护机制
- ✅ 服务集成: 权限验证在所有服务层的完整集成
- ✅ 生产就绪: 代码质量达到生产环境标准
- ✅ 统一服务器架构: 单一二进制文件处理API和后台任务
- ✅ 事件驱动架构: 异步事件处理系统
- ✅ 邮件服务集成: SMTP邮件发送功能
- ✅ 后台任务系统: 邮件、统计、清理任务自动化处理
- ✅ 课程关注功能: 用户可以关注和取消关注课程
- ✅ 评价动作系统: 评价点赞、点踩等互动功能
- ✅ 课程筛选器: 动态课程筛选和搜索功能
- ✅ 用户选课管理: 用户已选课程记录和管理
- ✅ 统计系统: 每日统计和数据分析功能
- ✅ 用户认证: 注册、登录、邮箱验证、会话管理
- ✅ 课程管理: 课程查看、搜索、筛选、关注、选课管理
- ✅ 评价系统: 评价发布、更新、删除、历史记录、动作互动
- ✅ 积分系统: 积分获取、记录、管理、交易处理
- ✅ 权限管理: 基于角色的访问控制 (RBAC)
- ✅ 公告系统: 系统公告发布和管理
- ✅ 统计功能: 课程评价统计和数据分析
- ✅ 审计追踪: 所有操作的完整日志记录
- ✅ 事件驱动: 异步事件处理和任务调度
- ✅ 邮件服务: SMTP邮件发送和验证码功能
- ✅ 内容验证: 评价内容相似度检测和频率控制
- ✅ 限流机制: 评价发布频率限制
- 🔄 API文档完善 (Swagger/OpenAPI)
- 🔄 性能优化和监控
- 🔄 缓存策略优化
- 🔄 数据库索引优化
- 🔄 分布式追踪和日志聚合
- 🔄 统一服务器架构优化(API和Worker分离)
- 项目地址: https://github.com/SJTU-jCourse/jcourse_go
- 问题反馈: Issues
⭐ 如果这个项目对你有帮助,请给个 star!