You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.3 KiB

package data
import (
"customer/internal/biz"
"customer/internal/conf"
"fmt"
"github.com/go-kratos/kratos/v2/log"
"github.com/google/wire"
"github.com/redis/go-redis/v9"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// ProviderSet is data providers.
var ProviderSet = wire.NewSet(NewData, NewGreeterRepo, NewCustomerData)
// Data .
type Data struct {
// TODO wrapped database client
Rdb *redis.Client
Mdb *gorm.DB //mysql
}
// NewData .
func NewData(c *conf.Data, logger log.Logger) (*Data, func(), error) {
data := &Data{}
//初始化rdb
//c就是解析之后的配置信息
redisURL := fmt.Sprintf("redis://%s/1?dial_timeout=%d", c.Redis.Addr, 1)
options, err := redis.ParseURL(redisURL)
if err != nil {
data.Rdb = nil
log.Fatal(err)
}
//建立客户端
data.Rdb = redis.NewClient(options)
//2.初始化Mdb
dsn := c.Database.Source
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
data.Mdb = nil
log.Fatal(err)
}
data.Mdb = db
//迁移表
migrateTable(db)
cleanup := func() {
_ = data.Rdb.Close()
log.NewHelper(logger).Info("closing the data resources")
}
return data, cleanup, nil
}
func migrateTable(db *gorm.DB) {
if err := db.AutoMigrate(&biz.Customer{}); err != nil {
log.Info("customer table migrate error,err:", err)
}
}