71 lines
1.8 KiB
Go
Raw Permalink Normal View History

2025-02-05 18:45:49 +08:00
package svc
2025-02-07 15:18:26 +08:00
import (
2025-02-07 17:01:48 +08:00
"context"
2025-02-07 15:18:26 +08:00
"gitea.youtukeji.com.cn/xiabin/youtu_grpc/app/ranking_management/internal/config"
2025-02-07 17:01:48 +08:00
"gitea.youtukeji.com.cn/xiabin/youtu_grpc/app/ranking_management/internal/logic/rankings"
"gitea.youtukeji.com.cn/xiabin/youtu_grpc/pkg/my_gorm"
"gitea.youtukeji.com.cn/xiabin/youtu_grpc/pkg/my_gorm/gen/dao/query"
"github.com/redis/go-redis/v9"
"gorm.io/driver/mysql"
"gorm.io/gorm"
2025-02-07 15:18:26 +08:00
)
2025-02-05 18:45:49 +08:00
type ServiceContext struct {
2025-02-07 17:01:48 +08:00
Config config.Config
Query *query.Query
RedisRanking *rankings.Ranking
2025-02-05 18:45:49 +08:00
}
func NewServiceContext(c config.Config) *ServiceContext {
2025-02-07 17:01:48 +08:00
svc := &ServiceContext{
2025-02-05 18:45:49 +08:00
Config: c,
}
2025-02-07 17:01:48 +08:00
//初始化redis client
redisClient := redis.NewClient(&redis.Options{
Addr: c.RedisHost,
})
//初始化数据库
//todo
db, err := my_gorm.NewDBWithCache(mysql.Open(c.Mysql.Dsn), &gorm.Config{}, redisClient)
if err != nil {
panic(err)
}
svc.Query = query.Use(db)
//初始化排行榜对象
svc.InitRankings(redisClient)
return svc
}
func (svc *ServiceContext) InitRankings(redisClient *redis.Client) {
//初始化排行榜对象
svc.RedisRanking = rankings.NewRanking(redisClient)
//获取所有不同的排行榜
gs := svc.Query.GameScore
r, err := gs.FindDistinctRanking()
if err != nil {
panic(err)
}
//获取所有排行榜
for _, ranking := range r {
scores, err := gs.Where(gs.AppAccount.Eq(ranking.AppAccount), gs.T.Eq(ranking.T)).Find()
if err != nil {
panic(err)
}
data := make([]redis.Z, 0, len(scores))
for _, score := range scores {
data = append(data, redis.Z{
Score: float64(uint64(score.Score)<<32 + uint64(score.UpdatedAt.Unix())),
Member: score.AppUserID,
})
}
svc.RedisRanking.SetList(context.Background(), rankings.GetRankingsCacheKey(ranking.AppAccount, ranking.T), data...)
}
2025-02-05 18:45:49 +08:00
}