Exemple #1
0
        /// <summary>
        /// The add mission draft.
        /// </summary>
        /// <param name="missionDraft">
        /// The mission draft.
        /// </param>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        public async Task <IdResult> AddMissionDraft(MissionDraft missionDraft)
        {
            missionDraft.Id = Guid.NewGuid().ToString();
            await Task.Factory.StartNew(() => _allMissionDrafts.Add(missionDraft));

            return(new IdResult(missionDraft.Id));
        }
        /// <summary>
        ///     Updates the mission draft.
        /// </summary>
        /// <param name="mission">
        ///     The mission.
        /// </param>
        /// <returns>
        ///     Task{OperationResult}.
        /// </returns>
        public async Task <OperationResult> UpdateMissionDraft(MissionDraft mission)
        {
            var draftRelatedEntities =
                await
                _azureManager.GetEntitiesAsync(
                    new TableQuery <MissionDraftAzure>().Where(mission.Id.GetFilterById()));

            var missionDraftAzure = draftRelatedEntities.FirstOrDefault(m => !m.IsPersonQualityLink);

            if (missionDraftAzure == null)
            {
                return(new OperationResult(OperationResultStatus.Error, "Can't find mission draft for update"));
            }

            var newMissionDraft = mission.ToAzureModel();

            newMissionDraft.PhotoUrl = await _imagesProvider.SaveImageToProductionBlobOnUpdate(missionDraftAzure.PhotoUrl, newMissionDraft.PhotoUrl, BlobContainer.MissionDraftImages);

            newMissionDraft.CopyToTableEntity(missionDraftAzure);
            var entitiesToDelete = draftRelatedEntities.Where(m => m.IsPersonQualityLink).ToList();
            var entitiesToAdd    = GeneratePersonQualityLinks(mission);
            var entitiesToUpdate = AzureTableExtensions.FilterUpdatableLinks(entitiesToAdd, entitiesToDelete);

            entitiesToUpdate.Add(missionDraftAzure);

            return(await _azureManager.UpdateEntityBatchAsync(entitiesToUpdate, entitiesToAdd, entitiesToDelete));
        }
Exemple #3
0
        internal static MissionDraftUi ConvertToUi(this MissionDraft missionDraftDomain)
        {
            if (missionDraftDomain == null)
            {
                return(null);
            }

            return(new MissionDraftUi
            {
                AddDate = missionDraftDomain.AddDate,
                AgeFrom = missionDraftDomain.AgeFrom,
                AgeTo = missionDraftDomain.AgeTo,
                Author = missionDraftDomain.Author,
                CorrectAnswers = missionDraftDomain.CorrectAnswers,
                Description = missionDraftDomain.Description,
                Difficulty = missionDraftDomain.Difficulty,
                Id = missionDraftDomain.Id,
                Name = missionDraftDomain.Name,
                PhotoUrl = missionDraftDomain.PhotoUrl,
                PersonQualitiesWithScores =
                    missionDraftDomain.PersonQualities?.Select(
                        p =>
                        new PersonQualityIdWithScore
                {
                    PersonQualityId = p.PersonQualityId,
                    Score = p.Score
                }).ToList(),
            });
        }
Exemple #4
0
        /// <summary>
        ///     Converts MissionDraft to MissionDraftAzure.
        /// </summary>
        /// <param name="missionDraft">The mission draft.</param>
        /// <returns>MissionDraftAzure.</returns>
        public static MissionDraftAzure ToAzureModel(this MissionDraft missionDraft)
        {
            var azureModel = new MissionDraftAzure();

            missionDraft.CopyTo(azureModel);
            SetMissionDependentPropertiesToAzureModel(missionDraft, azureModel);
            return(azureModel);
        }
Exemple #5
0
        /// <summary>
        /// The update mission draft.
        /// </summary>
        /// <param name="missionDraft">
        /// The mission draft.
        /// </param>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        public async Task <OperationResult> UpdateMissionDraft(MissionDraft missionDraft)
        {
            var existingMissionDraft = await Task.FromResult(_allMissionDrafts.FirstOrDefault(md => md.Id == missionDraft.Id));

            if (existingMissionDraft == null)
            {
                return(OperationResult.NotFound);
            }

            missionDraft.CopyTo(existingMissionDraft);
            return(new OperationResult(OperationResultStatus.Success));
        }
Exemple #6
0
        /// <summary>
        ///     Converts MissionDraftAzure to MissionDraft..
        /// </summary>
        /// <param name="azureModel">The azure model.</param>
        /// <returns>MissionDraft.</returns>
        public static MissionDraft FromAzureModel(this MissionDraftAzure azureModel)
        {
            if (azureModel == null)
            {
                return(null);
            }

            var domainModel = new MissionDraft();

            azureModel.CopyTo(domainModel);
            SetMissionDependentPropertiesFromAzuremodel(domainModel, azureModel);
            return(domainModel);
        }
        /// <summary>
        ///     Adds the mission draft.
        /// </summary>
        /// <param name="mission">
        ///     The mission.
        /// </param>
        /// <returns>
        ///     Task{AddResult}.
        /// </returns>
        public async Task <IdResult> AddMissionDraft(MissionDraft mission)
        {
            mission.Id = Guid.NewGuid().ToString();
            var missionDraft = mission.ToAzureModel();
            var typeLinks    = GeneratePersonQualityLinks(mission);

            missionDraft.PhotoUrl = await _imagesProvider.SaveImageToProductionBlobOnAdd(missionDraft.PhotoUrl, BlobContainer.MissionDraftImages);

            if (!typeLinks.Any())
            {
                return(await _azureManager.AddEntityAsync(missionDraft));
            }

            typeLinks.Insert(0, missionDraft);
            return(await _azureManager.AddEntityBatchAsync(typeLinks));
        }
        private List <MissionDraftAzure> GeneratePersonQualityLinks(MissionDraft mission)
        {
            if (mission.PersonQualities == null)
            {
                return(new List <MissionDraftAzure>());
            }

            return(mission.PersonQualities.Where(
                       t =>
                       !string.IsNullOrEmpty(t.PersonQualityId))
                   .GroupBy(p => p.PersonQualityId)
                   .Select(
                       t =>
                       MissionDraftAzure.CreateLinkToPersonQuality(
                           mission.Id,
                           t.First().PersonQualityId,
                           t.First().Score))
                   .ToList());
        }
        /// <summary>
        /// Converts to domain.
        /// </summary>
        /// <returns>
        /// MissionDraft.
        /// </returns>
        internal new MissionDraft ConvertToDomain()
        {
            var draft = new MissionDraft
            {
                AddDate        = AddDate,
                AgeFrom        = AgeFrom,
                AgeTo          = AgeTo,
                Author         = Author,
                CorrectAnswers = CorrectAnswers,
                Description    = Description,
                Difficulty     = Difficulty,
                Id             = Id,
                Name           = Name,
                PhotoUrl       = PhotoUrl
            };

            if (PersonQualitiesWithScores != null)
            {
                draft.PersonQualities =
                    PersonQualitiesWithScores.Where(ptws => ptws.PersonQualityId != null)
                    .GroupBy(ptws => ptws.PersonQualityId)
                    .Select(grp => grp.First())
                    .Select(
                        ptws =>
                {
                    var personQualityWithScore = new PersonQualityIdWithScore
                    {
                        PersonQualityId = ptws.PersonQualityId,
                        Score           = ptws.Score
                    };
                    return(personQualityWithScore);
                }).ToList();
            }

            return(draft);
        }
 /// <summary>
 /// The add new mission draft.
 /// </summary>
 /// <param name="missionDraft">
 /// The mission draft.
 /// </param>
 /// <returns>
 /// The <see cref="Task"/>.
 /// </returns>
 public Task <IdResult> AddNewMissionDraft(MissionDraft missionDraft)
 {
     return(_missionDraftRepository.AddMissionDraft(missionDraft));
 }
 /// <summary>
 /// The update mission draft.
 /// </summary>
 /// <param name="missionDraft">
 /// The mission draft.
 /// </param>
 /// <returns>
 /// The <see cref="Task"/>.
 /// </returns>
 public Task <OperationResult> UpdateMissionDraft(MissionDraft missionDraft)
 {
     return(_missionDraftRepository.UpdateMissionDraft(missionDraft));
 }