public async Task <APIGatewayProxyResponse> LeaderBoard(APIGatewayProxyRequest request) { LeaderboardSearchRequest leaderboardRequest = JsonConvert.DeserializeObject <LeaderboardSearchRequest>(request.Body); // ask to dynamo ask for my selected data // var requestModel = JsonConvert.DeserializeObject<Leaderboard>(request.Body); List <User> users = await _dynamoRepository.GetLeaderboard(leaderboardRequest); return(new APIGatewayProxyResponse { Headers = GetCorsHeaders(), StatusCode = 200, Body = JsonConvert.SerializeObject(users) }); }
public async Task <List <User> > GetLeaderboard(LeaderboardSearchRequest request) { var bevanList = await GetBevanList(); Console.WriteLine("Non-filtered Bevan list count " + bevanList.Count()); //Filter on channel bevanList = bevanList .Where(b => b.Channel.Equals(request.Channel)) .Where(b => b.Timestamp >= request.StartDate && b.Timestamp <= request.EndDate); Console.WriteLine("Filtered Bevan list count " + bevanList.Count()); var Users = await getUsers(); var userRet = new List <User>(); foreach (var bevanData in bevanList) { var receiverUser = Users.FirstOrDefault(u => u.id.Equals(bevanData.ReceiverId)); var giverUser = Users.FirstOrDefault(u => u.id.Equals(bevanData.GiverId)); //sum of bevans of receiver user var sumOfBevans = request.Type == 0 ? bevanList.Where(b => b.ReceiverId.Equals(receiverUser?.id)).Sum(a => a.Count) : bevanList.Where(b => b.GiverId.Equals(receiverUser?.id)).Sum(a => a.Count); if (receiverUser != null) { receiverUser.totalbevans = sumOfBevans; userRet.Add(receiverUser); } //sum of bevans of giver user sumOfBevans = request.Type == 0 ? bevanList.Where(b => b.ReceiverId.Equals(giverUser?.id)).Sum(a => a.Count) : bevanList.Where(b => b.GiverId.Equals(giverUser?.id)).Sum(a => a.Count); if (giverUser != null) { giverUser.totalbevans = sumOfBevans; userRet.Add(giverUser); } } Console.WriteLine("Leaderboard users count" + userRet.Count()); return(userRet.Distinct().OrderByDescending(x => x.totalbevans).ToList()); }