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> 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); }
public async Task AssignBadge(BadgeAssignment badgeAssignment) { _context.BadgeAssignment.Add(badgeAssignment); await _context.SaveChangesAsync(); }