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 }