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());
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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);
        }