private async Task <List <MissionSetAzure> > GenerateMissionDependentLinks(MissionSet missionSet, MissionSetAzure missionSetAzure) { if (missionSet.Missions == null) { return(new List <MissionSetAzure>()); } var orderedMissionIds = missionSet.Missions.OrderBy(m => m.Order) .Where(t => !string.IsNullOrEmpty(t.Mission?.Id)) .Select(m => m.Mission.Id) .Distinct() .ToList(); var query = new QueryOptions <Mission> { Expand = new List <string> { "PersonQualities" }, }; var missions = (await MissionRepository.GetMissions(query)).Where(m => orderedMissionIds.Contains(m.Id)).ToList(); var validOrderedMissionIds = orderedMissionIds.Where(o => missions.Any(m => m.Id == o)); byte order = 0; var missionLinks = validOrderedMissionIds.Select(t => MissionSetAzure.CreateMissionLink(missionSet.Id, t, order++)); var personQualitiesLinks = GeneratePersonQualitiesLinks(missionSet, missions); var allLinks = missionLinks.Concat(personQualitiesLinks); FillAgesForMissionSet(missions, missionSetAzure); await RefreshBackReferencesForMissions(missions, missionSet.Id); return(allLinks.ToList()); }
/// <summary> /// To the azure model. /// </summary> /// <param name="missionSet">The mission set.</param> /// <returns>MissionSetAzure.</returns> public static MissionSetAzure ToAzureModel(this MissionSet missionSet) { var azureModel = new MissionSetAzure(); missionSet.CopyTo(azureModel); azureModel.AgeFrom = missionSet.AgeFrom; azureModel.AgeTo = missionSet.AgeTo; return(azureModel); }
/// <summary> /// Froms the azure model. /// </summary> /// <param name="azureModel">The azure model.</param> /// <returns>MissionSet.</returns> public static MissionSet FromAzureModel(this MissionSetAzure azureModel) { if (azureModel == null) { return(null); } var domainModel = new MissionSet(); azureModel.CopyTo(domainModel); domainModel.AgeFrom = (byte?)azureModel.AgeFrom; domainModel.AgeTo = (byte?)azureModel.AgeTo; return(domainModel); }
private void FillAgesForMissionSet(IList <Mission> missions, MissionSetAzure missionSetAzure) { var fromAges = missions.Where(m => m.AgeFrom.HasValue && m.AgeFrom > 0) .Select(m => m.AgeFrom) .Distinct() .OrderByDescending(m => m); missionSetAzure.AgeFrom = fromAges.FirstOrDefault(); var toAges = missions.Where(m => m.AgeTo.HasValue && m.AgeTo > 0).Select(m => m.AgeTo).Distinct().OrderBy(m => m); missionSetAzure.AgeTo = toAges.FirstOrDefault(); }
private IEnumerable <MissionSetAzure> GeneratePersonQualitiesLinks( MissionSet missionSet, IEnumerable <Mission> missions) { var allPersonQualitiesGrouped = missions.Where(m => m.PersonQualities != null) .SelectMany(m => m.PersonQualities) .GroupBy(p => p.PersonQualityId); var personQualitiesLinks = allPersonQualitiesGrouped.Select( g => MissionSetAzure.CreateLinkToPersonQuality( missionSet.Id, g.Key, g.Sum(p => p.Score))); return(personQualitiesLinks); }