예제 #1
0
        public async Task <string> GetLeaderBoardAsync()
        {
            // Gets global leaderboard sorted set from Redis
            var list = await _redisServer.Database.SortedSetRangeByRankWithScoresAsync(leaderboardkey, 0, -1, Order.Descending);

            // If Redis is empty, go Db
            if (list.Length == 0)
            {
                //Gets leaderboard from Db
                var dbList = await _leaderBoardService.GetLeaderBoard();

                // If Db is empty, return null
                if (dbList.Count == 0)
                {
                    return(null);
                }

                // Adds userlist from Db to Redis
                foreach (var user in dbList)
                {
                    // Adds user global leaderboad in Redis
                    await _redisServer.Database.SortedSetAddAsync(leaderboardkey, member : user.user_id.ToString(), score : user.points);

                    // Adds user country leaderboad in Redis
                    await _redisServer.Database.SortedSetAddAsync(user.country, member : user.user_id.ToString(), score : user.points);

                    // Creates a user hashset in Redis
                    await _redisServer.Database.HashSetAsync(key : user.user_id.ToString(), new HashEntry[] { new HashEntry("display_name", user.display_name.ToString()), new HashEntry("points", user.points), new HashEntry("country", user.country) });
                }

                // Get generated leaderboard from Redis
                list = await _redisServer.Database.SortedSetRangeByRankWithScoresAsync(leaderboardkey, 0, -1, Order.Descending);
            }
            return(await FillReturnList(list));
        }
예제 #2
0
 public async Task <ActionResult <LeaderBoardViewModel> > GetLeaderBoard() => Ok(await _leaderBoardService.GetLeaderBoard());