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)); }
public async Task <ActionResult <LeaderBoardViewModel> > GetLeaderBoard() => Ok(await _leaderBoardService.GetLeaderBoard());