wx-server/internal/dao/service.go

77 lines
1.7 KiB
Go
Raw Permalink Normal View History

2024-06-04 21:22:50 +08:00
package dao
import (
"fmt"
"mini_server/internal/logger"
"time"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type Service struct {
dsn string
db *gorm.DB
}
var s *Service
// 获取当前时间,精度只精确到秒,去掉毫秒等数据。避免保存到数据库时时间进位
func now_func() time.Time {
tmp := time.Now().Local().Format(time.DateTime)
now, _ := time.ParseInLocation(time.DateTime, tmp, time.Local)
return now
}
// // dsn example: "root:123@tcp(127.0.0.1:3306)/test"
func InitDefaultService(dsn string) error {
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.GormLogger,
NowFunc: now_func,
})
if err != nil {
return fmt.Errorf("open mysql failed, dsn:%v, err:%v", dsn, err)
}
dbs := &Service{dsn: dsn, db: db}
// 自动创建相关的表结构
if err := auto_migrate_all(db); err != nil {
return fmt.Errorf("automigrate failed, err:%v", err)
}
// 数据库连接相关配置
config_connection_info(db)
s = dbs
return nil
}
// 自动创建对应的数据表结构
func auto_migrate_all(db *gorm.DB) error {
return db.AutoMigrate(
//&Character{}, // 后续需要注释掉,避免修改客户创建的数据表
&ChatRecord{},
&File{},
&Draft{},
&PostLike{},
&PostComment{},
&Post{},
&Bluetooth{},
//&UserCharacter{}, // 需要注释掉,避免修改客户创建的数据表
//&User{}, // 需要注释掉,避免修改客户创建的数据表
)
}
// 数据库连接相关配置
func config_connection_info(db *gorm.DB) {
mysqlDb, err := db.DB()
if err != nil {
return
}
mysqlDb.SetMaxIdleConns(10) // 设置连接池的最大限制连接数
mysqlDb.SetMaxOpenConns(100) // 设置连接池中的最大连接数量
}