feat(im): Task 0 - IM 模型定义 + 数据库表迁移 + 常量定义

- 新增 3 个 GORM 模型:Conversation / ConversationMember / Message
- 新增 IM 常量:会话类型、消息类型、消息状态、撤回时限
- main.go 添加 IM 表 AutoMigrate
- init.sql 追加 IM 模块 DDL(含索引和全文搜索 GIN 索引)

Made-with: Cursor
This commit is contained in:
bujinyuan
2026-03-03 10:41:42 +08:00
parent 1f390fce56
commit 6ab04fb902
6 changed files with 227 additions and 6 deletions

View File

@@ -10,10 +10,11 @@ import (
"syscall"
"time"
"github.com/echochat/backend/app/im/model"
"github.com/echochat/backend/app/provider"
"github.com/echochat/backend/config"
"github.com/echochat/backend/pkg/logs"
"github.com/echochat/backend/pkg/middleware"
"github.com/echochat/backend/app/provider"
"github.com/echochat/backend/router"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
@@ -50,13 +51,23 @@ func main() {
logs.Fatal(ctx, "main", "初始化应用失败", zap.Error(err))
}
// 4. 创建 Gin Engine
// 4. IM 数据库表自动迁移(开发阶段使用,生产环境配合 init.sql
if err := app.DB.AutoMigrate(
&model.Conversation{},
&model.ConversationMember{},
&model.Message{},
); err != nil {
logs.Fatal(ctx, "main", "IM 表迁移失败", zap.Error(err))
}
logs.Info(ctx, "main", "IM 表迁移完成")
// 5. 创建 Gin Engine
if cfg.Server.Mode == "release" {
gin.SetMode(gin.ReleaseMode)
}
engine := gin.New()
// 5. 注册中间件顺序Trace → Logger → CORS → Recovery
// 6. 注册中间件顺序Trace → Logger → CORS → Recovery
engine.Use(
middleware.Trace(),
middleware.Logger(),
@@ -64,10 +75,10 @@ func main() {
middleware.Recovery(),
)
// 6. 注册路由(由 router.Setup 统一汇总各模块路由)
// 7. 注册路由(由 router.Setup 统一汇总各模块路由)
router.Setup(engine, app)
// 7. 启动 HTTP 服务(优雅关闭)
// 8. 启动 HTTP 服务(优雅关闭)
addr := fmt.Sprintf(":%d", cfg.Server.Port)
srv := &http.Server{
Addr: addr,