/// <summary> /// Gets the attached mission sets. /// </summary> /// <param name="userId">The user id.</param> /// <returns>Task{IEnumerable{UserMissionSet}}.</returns> public async Task <IEnumerable <UserMissionSet> > GetActiveMissionSets(string userId) { var user = await _userRepository.GetUser(userId); if (!user.ActiveMissionSetIds.AnyValues()) { return(null); } var activeSets = (await _missionSetRepository.GetMissionSets( new QueryOptions <MissionSet> { Filter = ExpressionHelper.Expr((MissionSet x) => x.Id) .In(user.ActiveMissionSetIds), Expand = new List <string> { "Missions" } })); var setsMissions = activeSets.SelectMany(attachedSet => attachedSet.Missions).Select(m => m.Mission).ToIList(); var missionRequests = (await _missionRequestRepository.GetMissionRequests( new QueryOptions <MissionRequest> { Filter = mr => mr.UserId == userId })).Where( missionRequest => setsMissions.Select(m => m.Id).Contains(missionRequest.MissionId)).ToIList(); var activeUserSets = new List <UserMissionSet>(); foreach (var missionSet in activeSets) { var userSet = new UserMissionSet { Id = missionSet.Id, Name = missionSet.Name }; var missions = new List <UserMission>(); foreach (var mission in missionSet.Missions.OrderBy(m => m.Order).Select(m => m.Mission)) { var convertedMission = ConvertToUserMission(mission, user); missions.Add(convertedMission); } userSet.Missions = missions; activeUserSets.Add(userSet); } SetDisplayStatuses(activeUserSets, user, missionRequests, setsMissions); return(activeUserSets.OrderBy(set => user.MissionSetIds.First(setId => setId.MissionSetId == set.Id).Order)); }
public async Task AssignMissionSetLine(User user) { var currrentAge = DateTime.UtcNow.Year - user.DateOfBirth.Value.Year;// DateOfBirth should not be null var allMissionSets = (await _missionSetRepository.GetMissionSets(new QueryOptions <MissionSet> { Expand = new List <string> { "PersonQualities", "" } })).Where(missionSet => (missionSet.AgeFrom <= currrentAge) && (missionSet.AgeTo >= currrentAge)).ToIList(); //TODO move inside parent filter var missionSets = allMissionSets.Where( missionSet => (missionSet.Id != GameConstants.MissionSet.FirstSetId) && (missionSet.Id != GameConstants.MissionSet.SecondSetId) && (missionSet.Id != GameConstants.MissionSet.ThirdSetId) && (missionSet.Id != GameConstants.MissionSet.LastSetId)).ToIList(); var easySets = missionSets.Where(set => GetEasySetCondition(set.PersonQualities, user)).Select(set => set.Id); var hardSets = missionSets.Where(set => GetHardSetCondition(set.PersonQualities, user)).Select(set => set.Id); var neutralSets = missionSets.Where(set => !easySets.Contains(set.Id) && !hardSets.Contains(set.Id)).Select(set => set.Id); var tempList = new List <string>(); tempList.AddRange(easySets); tempList.AddRange(neutralSets); tempList.AddRange(hardSets); var finalList = GetSetIdsAfterDependenciesCheck(tempList, allMissionSets); var list = new List <MissionSetIdWithOrder>(); for (var i = 0; i < finalList.Count; i++) { list.Add(new MissionSetIdWithOrder { MissionSetId = finalList[i], Order = i }); } user.MissionSetIds = list; }
/// <summary> /// Gets the MissionSets. /// </summary> /// <param name="options">The options.</param> /// <returns>Task{IEnumerable{MissionSet}}.</returns> public Task <List <MissionSet> > GetMissionSets(QueryOptions <MissionSet> options = null) { return(_missionSetRepository.GetMissionSets(options)); }