56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Package database 提供统一的数据存储接口
 | 
						||
// 定义存储接口规范,支持多种存储后端实现
 | 
						||
// 当前支持PostgreSQL实现
 | 
						||
package database
 | 
						||
 | 
						||
import (
 | 
						||
	"fmt"
 | 
						||
 | 
						||
	"git.huangwc.com/pig/pig-farm-controller/internal/infra/config"
 | 
						||
	"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
 | 
						||
	"gorm.io/gorm"
 | 
						||
)
 | 
						||
 | 
						||
// Storage 代表统一的存储接口
 | 
						||
// 所有存储实现都需要实现此接口定义的方法
 | 
						||
type Storage interface {
 | 
						||
	// Connect 建立与存储后端的连接
 | 
						||
	Connect() error
 | 
						||
 | 
						||
	// Disconnect 断开与存储后端的连接
 | 
						||
	Disconnect() error
 | 
						||
 | 
						||
	// GetDB 获取数据库实例
 | 
						||
	GetDB() *gorm.DB
 | 
						||
 | 
						||
	// Migrate 执行数据库迁移
 | 
						||
	// 参数为需要迁移的 GORM 模型
 | 
						||
	Migrate(models ...interface{}) error
 | 
						||
}
 | 
						||
 | 
						||
// NewStorage 创建并返回一个存储实例
 | 
						||
// 根据配置返回相应的存储实现
 | 
						||
func NewStorage(cfg config.DatabaseConfig, logger *logs.Logger) Storage {
 | 
						||
	// 构建数据库连接字符串
 | 
						||
	connectionString := fmt.Sprintf(
 | 
						||
		"user=%s password=%s dbname=%s host=%s port=%d sslmode=%s",
 | 
						||
		cfg.Username,
 | 
						||
		cfg.Password,
 | 
						||
		cfg.DBName,
 | 
						||
		cfg.Host,
 | 
						||
		cfg.Port,
 | 
						||
		cfg.SSLMode,
 | 
						||
	)
 | 
						||
 | 
						||
	// 当前默认返回PostgreSQL存储实现,并将 logger 注入
 | 
						||
	// 当前默认返回PostgreSQL存储实现,并将 logger 注入
 | 
						||
	return NewPostgresStorage(
 | 
						||
		connectionString,
 | 
						||
		cfg.IsTimescaleDB, // <--- 添加 IsTimescaleDB
 | 
						||
		cfg.MaxOpenConns,
 | 
						||
		cfg.MaxIdleConns,
 | 
						||
		cfg.ConnMaxLifetime,
 | 
						||
		logger,
 | 
						||
	)
 | 
						||
}
 |