feat: 对接 PostgreSQL 存储层
This commit is contained in:
@@ -22,6 +22,7 @@ import (
|
||||
"github.com/hhs/camtalk/internal/session"
|
||||
"github.com/hhs/camtalk/internal/store"
|
||||
"github.com/hhs/camtalk/internal/ws"
|
||||
migrations "github.com/hhs/camtalk/migrations"
|
||||
)
|
||||
|
||||
// Version 通过构建时 -ldflags 注入,如:
|
||||
@@ -50,27 +51,39 @@ func main() {
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
var userRepo store.UserRepository
|
||||
var msgRepo store.MessageRepository
|
||||
|
||||
if cfg.Storage.Driver == "postgres" {
|
||||
pool, err := store.NewPostgresPool(ctx, cfg.Storage.DSN)
|
||||
if err != nil {
|
||||
logger.Log.Fatalw("failed to connect to postgres", "error", err)
|
||||
}
|
||||
defer pool.Close()
|
||||
logger.Log.Infow("postgres connected", "driver", cfg.Storage.Driver)
|
||||
// TODO: Phase 2 - 初始化 UserRepository 和 MessageRepository
|
||||
_ = pool
|
||||
|
||||
// 执行数据库迁移
|
||||
if err := store.RunMigrations(ctx, pool, migrations.FS); err != nil {
|
||||
logger.Log.Fatalw("failed to run migrations", "error", err)
|
||||
}
|
||||
|
||||
userRepo = store.NewPgUserRepository(pool)
|
||||
msgRepo = store.NewPgMessageRepository(pool)
|
||||
logger.Log.Infow("postgres storage initialized", "driver", cfg.Storage.Driver)
|
||||
} else {
|
||||
userRepo = store.NewMemUserRepository()
|
||||
logger.Log.Info("using in-memory storage")
|
||||
}
|
||||
|
||||
// 初始化 UserRepository(内存模式用于无 DB 场景)
|
||||
var userRepo store.UserRepository
|
||||
userRepo = store.NewMemUserRepository()
|
||||
|
||||
// 初始化 Session Manager(MVP 默认内存实现)
|
||||
// 初始化 Session Manager
|
||||
var sessionMgr session.Manager
|
||||
// TODO: 当 Redis 配置非空时切换为 RedisManager
|
||||
var sessionOpts []session.Option
|
||||
if msgRepo != nil {
|
||||
sessionOpts = append(sessionOpts, session.WithMessageRepository(msgRepo))
|
||||
}
|
||||
sessionMgr = session.NewMemoryManager(
|
||||
time.Duration(cfg.Session.TTL)*time.Minute,
|
||||
cfg.Session.MaxHistory,
|
||||
sessionOpts...,
|
||||
)
|
||||
defer sessionMgr.(*session.MemoryManager).Stop()
|
||||
|
||||
@@ -141,7 +154,7 @@ func main() {
|
||||
authHandler.RegisterRoutes(apiGroup)
|
||||
|
||||
// Conversation REST 端点
|
||||
convHandler := api.NewConversationHandler(sessionMgr, tokenMgr)
|
||||
convHandler := api.NewConversationHandler(sessionMgr, tokenMgr, msgRepo)
|
||||
convHandler.RegisterRoutes(apiGroup)
|
||||
|
||||
// WebSocket
|
||||
|
||||
Reference in New Issue
Block a user