public async Task <Badges> UpdateExperienceAsync(int courseId, ExperienceForListDTO experienceForListDTO)
        {
            var category = await _repository.GetCategoryOfExamAsync(courseId);

            int categoryID = category.CategoryId;

            var experience_current = await _repository.GetUserExperienceByCategoryAsync(experienceForListDTO.UserId, categoryID);

            if (experience_current == null)
            {
                experienceForListDTO.CategoryId = categoryID;
                var exp_to_post = _mapper.Map <Experience>(experienceForListDTO);
                await _repository.AddExperienceAsync(exp_to_post);
            }
            else
            {
                var experience    = _repository.GetExperienceFromBase(experience_current.Id);
                var exp_from_base = experience.ExperiencePoints;

                experienceForListDTO.CategoryId = categoryID;

                var exp_to_add = exp_from_base + experienceForListDTO.ExperiencePoints;
                experienceForListDTO.ExperiencePoints = exp_to_add;
                experience.CategoryId = categoryID;

                var exp = _mapper.Map(experienceForListDTO, experience);
                await _repository.UpdateExperienceAsync(exp);

                // przydzielanie odznaki


                var badges_by_category = await _badgeRepository.GetBadgeByCategoryAsync(exp.CategoryId);

                foreach (var badge in badges_by_category)
                {
                    var assign = await _badgeRepository.GetAssignment(exp.UserId, badge.Id);

                    if (assign == null)
                    {
                        if (exp.ExperiencePoints >= badge.ExperiencePoints)
                        {
                            assignmentBadge = true;
                            BadgeAssignment assignment = new BadgeAssignment();
                            assignment.BadgeId = badge.Id;
                            assignment.UserId  = exp.UserId;

                            obtainedBadgeId = badge.Id;

                            await _badgeRepository.AssignBadge(assignment);
                        }
                    }
                }
                if (assignmentBadge == true)
                {
                    obtainedBadge = await _badgeRepository.GetBadgeAsync(obtainedBadgeId);
                }
            }
            return(obtainedBadge);
        }
Ejemplo n.º 2
0
        public async Task <BadgeForAddDTO> GetBadgeAsync(int id)
        {
            var badge = await _repository.GetBadgeAsync(id);

            return(_mapper.Map <BadgeForAddDTO>(badge));
        }