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); }
public async Task <int> AssignBadge(AssignBadgeDTO assignBadgeDTO) { var assignment = _mapper.Map <BadgeAssignment>(assignBadgeDTO); //var badges = _repository.GetBadgeByCategoryAsync(assignment); await _repository.AssignBadge(assignment); return(assignBadgeDTO.BadgeId); }