- Golang >= 1.24
go build
构建成功后,项目下将出现jcourse_go
可执行文件。
项目使用两种配置方式:
编辑 config/config.yaml
文件:
db:
host: localhost
port: 5432
user: jcourse
password: jcourse
db_name: jcourse_v2
debug: true
server:
debug: true
port: 8888
sqlite:
path: ""
redis:
addr: "localhost:6379"
username: ""
password: ""
db: 0
smtp:
host: "127.0.0.1"
port: 25
username: ""
password: ""
sender: ""
在项目根目录下创建 .env
文件:
# 数据库配置
POSTGRES_HOST=127.0.0.1
POSTGRES_PORT=5432
POSTGRES_USER=jcourse
POSTGRES_PASSWORD=jcourse
POSTGRES_DBNAME=jcourse_v2
# Redis 配置
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_USERNAME=
REDIS_PASSWORD=
# 安全配置
CSRF_KEY=your-csrf-key
SESSION_SECRET=your-session-secret
# 邮件配置
SMTP_HOST=127.0.0.1
SMTP_PORT=25
SMTP_SENDER=
SMTP_USERNAME=
SMTP_PASSWORD=
# 调试模式
DEBUG=true
运行以下命令启动数据库和Redis容器:
docker compose up -d
执行以下命令以初始化数据库:
# 创建数据库表
go run script/migrate/migrate.go
# 从data/2024-2025-1.csv 导入课程数据
go run script/import_from_jwc/import_from_jwc.go
注:data/2024-2024-1.csv
中为虚拟的测试数据,可以参考格式进行修改,但是请不要将真实的课程信息加入Git仓库。
# 启动 API 服务(使用 YAML 配置)
./jcourse_go
# 启动异步任务处理服务(使用 .env 配置)
./worker
后端成功启动后在8888端口运行(API 服务)。
项目采用清洁架构(Clean Architecture)和领域驱动设计(DDD)模式:
api/
:API 服务主程序(HTTP 服务器)worker/
:异步任务处理服务
app/
:应用容器和依赖注入config/
:配置管理application/
:应用层(CQRS 模式)command/
:命令处理(写操作)query/
:查询处理(读操作)vo/
:视图对象
domain/
:领域层(核心业务逻辑)auth/
:认证领域course/
:课程领域email/
:邮件领域event/
:事件领域notification/
:通知领域rating/
:评分领域reaction/
:反应领域review/
:评论领域statistic/
:统计领域user/
:用户领域shared/
:共享领域
infrastructure/
:基础设施层dal/
:数据访问层(数据库连接)entity/
:数据库实体定义repository/
:仓储实现rpc/
:远程过程调用
interface/
:接口层controller/
:HTTP 控制器handler/
:处理器(如 LLM 处理)middleware/
:HTTP 中间件router/
:路由配置task/
:异步任务asynq/
:基于 Asynq 的任务队列base/
:任务基础组件lock/
:分布式锁biz/
:业务相关的异步任务ping/
:ping 任务statistic/
:统计任务
service/
:服务层
apperror/
:应用错误处理util/
:工具函数
import_from_jwc/
:从教务系统导入数据import_from_v1/
:从 v1 版本导入数据migrate/
:数据库迁移load/
:数据加载和扩展teacher/
:教师数据扩展trainingplan/
:培养方案数据扩展
config.yaml
:API 服务的主配置文件(YAML 格式).env
:Worker 服务的环境变量配置文件
项目采用清洁架构(Clean Architecture)和领域驱动设计(DDD)模式:
- 依赖方向:外层依赖内层,内层不依赖外层
- CQRS 模式:读写分离,命令(Command)处理写操作,查询(Query)处理读操作
- 领域驱动:每个业务领域独立,包含实体、值对象、仓储接口等
- 分层架构:
- Domain 层:核心业务逻辑,不依赖任何框架
- Application 层:应用服务,协调领域对象
- Infrastructure 层:技术基础设施,如数据库、缓存等
- Interface 层:对外接口,如 HTTP 控制器、中间件等
- Web 框架:Gin
- ORM:GORM
- 数据库:PostgreSQL (with pgVector extension), SQLite
- 缓存:Redis
- 任务队列:Asynq
- 配置管理:YAML
- 邮件:gomail
- 中文分词:gse
- Docker:容器化部署
项目支持多种数据库:
- PostgreSQL:主数据库,支持向量搜索(pgVector)
- SQLite:轻量级数据库,适用于开发和测试