59 lines
1.3 KiB
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
|
|
}
|