go-kratos/app/ucenter/internal/data/data.go

59 lines
1.3 KiB
Go

package data
import (
"context"
"ky-go-kratos/app/ucenter/internal/conf"
"ky-go-kratos/app/ucenter/internal/data/ent"
"github.com/go-kratos/kratos/v2/log"
"github.com/google/wire"
"github.com/redis/go-redis/v9"
"go.mongodb.org/mongo-driver/mongo"
)
var ProviderSet = wire.NewSet(NewData, NewEntClient, NewUserRepo)
type Data struct {
// TODO wrapped database client
Redis *redis.Client // 通用缓存
Session *redis.Client // 会话
Queue *redis.Client // 队列
Lock *redis.Client // 分布式锁
Task *redis.Client // 任务调度/异步处理
Mongo *mongo.Database // MongoDB
}
// NewData .
func NewData(c *conf.Data, logger log.Logger) (*Data, func(), error) {
cleanup := func() {
log.NewHelper(logger).Info("closing the data resources")
}
// Redis
Redis := NewRedis(c, 0)
Session := NewRedis(c, 1)
Queue := NewRedis(c, 2)
Lock := NewRedis(c, 3)
Task := NewRedis(c, 4)
// MongoDB
Mongo := NewMongoDB(c)
return &Data{
Redis: Redis,
Session: Session,
Queue: Queue,
Lock: Lock,
Task: Task,
Mongo: Mongo,
}, cleanup, nil
}
func NewEntClient(c *conf.Data) (*ent.Client, error) {
// MySQL
db := OpenMysql(c)
client := ent.NewClient(ent.Driver(db))
if err := client.Schema.Create(context.Background()); err != nil {
log.Fatalf("failed creating schema resources: %v", err)
}
return client, nil
}