예제 #1
0
        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");
        }