コード例 #1
0
        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);
        }
コード例 #2
0
        public async Task <int> AddOrUpdateExperienceAsync(ExperienceAddDTO experienceAddDTO)
        {
            bool isBadgeAssigned = false;

            int experiencePoints;
            var mappedExperience = _mapper.Map <Experience>(experienceAddDTO);
            var experienceExist  = await _repository.FindExperienceAsync(experienceAddDTO.UserId, experienceAddDTO.CategoryId);

            if (experienceExist)
            {
                var experienceFromDB = await _repository.GetExperienceAsync(experienceAddDTO.UserId, experienceAddDTO.CategoryId);

                experienceFromDB.ExperiencePoints += experienceAddDTO.ExperiencePoints;
                experiencePoints = experienceFromDB.ExperiencePoints;
                await _repository.UpdateExperienceAsync(experienceFromDB);
            }
            else
            {
                await _repository.AddExperienceAsync(mappedExperience);

                experiencePoints = mappedExperience.ExperiencePoints;
            }


            var badges = await _repository.GetAllBadgesAsync();

            var assignedBadges = await GetUserAssignedBadgesAsync(mappedExperience.UserId);

            var mappedBadges = _mapper.Map <List <Badge> >(assignedBadges);

            foreach (var badge in badges)
            {
                if (experiencePoints >= badge.ExperiencePoints && badge.BadgeAssignment.Count == 0)
                {
                    isBadgeAssigned = true;
                    badgeAssignedId = badge.Id;
                    BadgeAssignment assignment = new BadgeAssignment();
                    assignment.UserId         = mappedExperience.UserId;
                    assignment.BadgeId        = badge.Id;
                    assignment.AssignmentDate = DateTime.Now;
                    await _repository.AssignBadgeAsync(assignment);
                }
            }
            if (isBadgeAssigned == true)
            {
                return(badgeAssignedId);
            }
            return(999);
        }
コード例 #3
0
 public async Task AssignBadge(BadgeAssignment badgeAssignment)
 {
     _context.BadgeAssignment.Add(badgeAssignment);
     await _context.SaveChangesAsync();
 }