public async Task <IActionResult> UpdateRanking(int result) { var userId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value); var resultsFromRepo = await _repo.GetQuizzesResults(userId); var resultFromRepo = 0; foreach (var row in resultsFromRepo) { resultFromRepo += row.Result; } resultFromRepo += result; var rankingFromRepo = await _repo.GetRanking(); int rankingCount = 0; foreach (var rowRankingFromRepo in rankingFromRepo) { if (rowRankingFromRepo.UserId == userId) { var rankingRowToDelete = await _repo.GetRankingRow(rowRankingFromRepo.Id); _repo.DeleteFromRepo(rankingRowToDelete); } else { rankingCount++; } } var rankingForCration = new RankingForCreationDto(); var user = await _repo.GetUser(userId); rankingForCration.Username = user.Username; rankingForCration.TotalPoints = resultFromRepo; rankingForCration.userId = userId; if (rankingCount >= 10) { int min = 10000; foreach (var rowRankingFrom in rankingFromRepo) { if (rowRankingFrom.TotalPoints < min) { min = rowRankingFrom.TotalPoints; } } foreach (var rowRankingFrom in rankingFromRepo) { if (rowRankingFrom.TotalPoints == min) { _repo.DeleteFromRepo(rowRankingFrom); break; } } } var ranking = new Ranking(); _mapper.Map(rankingForCration, ranking); _repo.AddToRepo(ranking); if (await _repo.SaveAll()) { return(Ok()); } throw new Exception("Nie udalo się zaktualizować rankingu"); }