2025-02-19 14:23:58 +08:00
|
|
|
package orm
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
2025-02-25 14:48:50 +08:00
|
|
|
"log/slog"
|
2025-02-25 15:56:33 +08:00
|
|
|
"proxy-server/server/pkg/env"
|
2025-02-25 14:48:50 +08:00
|
|
|
|
2025-05-15 09:53:23 +08:00
|
|
|
"errors"
|
2025-02-19 14:23:58 +08:00
|
|
|
"gorm.io/driver/postgres"
|
|
|
|
|
"gorm.io/gorm"
|
|
|
|
|
"gorm.io/gorm/logger"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var DB *gorm.DB
|
|
|
|
|
|
|
|
|
|
func Init() {
|
|
|
|
|
dsn := fmt.Sprintf(
|
2025-02-25 15:56:33 +08:00
|
|
|
"host=%s port=%d user=%s password=%s dbname=%s sslmode=disable TimeZone=%s",
|
|
|
|
|
env.DbHost, env.DbPort, env.DbUsername, env.DbPassword, env.DbDatabase, env.DbTimezone,
|
2025-02-19 14:23:58 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
|
|
|
|
|
Logger: logger.Default,
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-10 14:20:46 +08:00
|
|
|
// 配置连接池
|
|
|
|
|
sqlDb, err := db.DB()
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
sqlDb.SetMaxIdleConns(10)
|
|
|
|
|
sqlDb.SetMaxOpenConns(100)
|
|
|
|
|
|
2025-02-19 14:23:58 +08:00
|
|
|
DB = db
|
|
|
|
|
}
|
2025-02-25 14:48:50 +08:00
|
|
|
|
2025-03-08 11:40:52 +08:00
|
|
|
func InitForTest(dsn string) {
|
|
|
|
|
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
|
|
|
|
|
Logger: logger.Default,
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DB = db
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-25 14:48:50 +08:00
|
|
|
func MaySingle[T any](results []T) (*T, error) {
|
|
|
|
|
rsLen := len(results)
|
|
|
|
|
if rsLen == 0 {
|
|
|
|
|
return nil, errors.New("记录为空")
|
|
|
|
|
}
|
|
|
|
|
if rsLen > 1 {
|
|
|
|
|
slog.Warn("记录不唯一", "ids")
|
|
|
|
|
}
|
|
|
|
|
return &results[0], nil
|
|
|
|
|
}
|