コード例 #1
0
        public async Task <IActionResult> UpdateQuest(string id, [FromBody] AikaQuest quest)
        {
            AikaQuest updatedQuest = await _questDbAccess.GetQuestById(id);

            CopyValidQuestProperties(updatedQuest, quest);

            await this.SetModifiedData(_userManager, updatedQuest);

            if (updatedQuest.IsImplemented)
            {
                CompareResult result = await _implementationStatusComparer.CompareQuest(updatedQuest.Id, updatedQuest);

                if (result.CompareDifference != null && result.CompareDifference.Count > 0)
                {
                    updatedQuest.IsImplemented = false;
                }
            }

            await _questDbAccess.UpdateQuest(updatedQuest);

            // Timeline Entry
            await _timelineService.AddTimelineEntry(TimelineEvent.AikaQuestUpdated, updatedQuest.Id, updatedQuest.Name);

            return(Ok(updatedQuest));
        }
コード例 #2
0
        /// <summary>
        /// Compares a quest
        /// </summary>
        /// <param name="questId">Id of the quest</param>
        /// <param name="currentQuest">Current Quest, if null the quest will be loaded</param>
        /// <returns>Compare Result</returns>
        public async Task <CompareResult> CompareQuest(string questId, AikaQuest currentQuest = null)
        {
            if (currentQuest == null)
            {
                currentQuest = await _questDbAccess.GetQuestById(questId);
            }

            AikaQuest oldQuest = await _questSnapshotDbAccess.GetSnapshotById(questId);

            return(CompareObjects(currentQuest, oldQuest));
        }
コード例 #3
0
        /// <summary>
        /// Returns the quest use
        /// </summary>
        /// <param name="parsedData">Parsed data</param>
        /// <param name="errorCollection">Error Collection</param>
        /// <returns>Value Object</returns>
        private async Task <IFlexFieldExportable> GetQuest(AddQuestTextRenderer.AddQuestTextData parsedData, ExportPlaceholderErrorCollection errorCollection)
        {
            AikaQuest quest = await _cachedDbAccess.GetQuestById(parsedData.QuestId);

            if (quest == null)
            {
                errorCollection.AddDialogQuestNotFoundError();
                return(null);
            }

            return(quest);
        }
コード例 #4
0
        /// <summary>
        /// Returns the value object to use
        /// </summary>
        /// <param name="parsedData">Parsed data</param>
        /// <param name="flexFieldObject">Flex field object</param>
        /// <param name="errorCollection">Error Collection</param>
        /// <returns>Value Object</returns>
        protected override async Task <IFlexFieldExportable> GetValueObject(ValueFieldConditionData parsedData, FlexFieldObject flexFieldObject, ExportPlaceholderErrorCollection errorCollection)
        {
            AikaQuest quest = await _cachedDbAccess.GetQuestById(parsedData.SelectedObjectId);

            if (quest == null)
            {
                errorCollection.AddDialogQuestNotFoundError();
                return(null);
            }

            return(quest);
        }
コード例 #5
0
        /// <summary>
        /// Returns the value object to use
        /// </summary>
        /// <param name="parsedData">Parsed data</param>
        /// <param name="npc">Npc</param>
        /// <param name="errorCollection">Error Collection</param>
        /// <returns>Value Object</returns>
        protected override IFlexFieldExportable GetValueObject(ValueFieldConditionData parsedData, KortistoNpc npc, ExportPlaceholderErrorCollection errorCollection)
        {
            AikaQuest quest = _cachedDbAccess.GetQuestById(parsedData.SelectedObjectId).Result;

            if (quest == null)
            {
                errorCollection.AddDialogQuestNotFoundError();
                return(null);
            }

            return(quest);
        }
コード例 #6
0
        /// <summary>
        /// Returns the value object to use
        /// </summary>
        /// <param name="parsedData">Parsed data</param>
        /// <param name="npc">Npc</param>
        /// <param name="errorCollection">Error Collection</param>
        /// <returns>Value Object</returns>
        protected override async Task <IFlexFieldExportable> GetValueObject(ValueActionRenderBase.ValueFieldActionData parsedData, KortistoNpc npc, ExportPlaceholderErrorCollection errorCollection)
        {
            AikaQuest quest = await _cachedDbAccess.GetQuestById(parsedData.ObjectId);

            if (quest == null)
            {
                errorCollection.AddDialogQuestNotFoundError();
                return(null);
            }

            return(quest);
        }
コード例 #7
0
        /// <summary>
        /// Returns a quest by its id
        /// </summary>
        /// <param name="questId">Quest id</param>
        /// <returns>Quest</returns>
        public async Task <AikaQuest> GetQuestById(string questId)
        {
            if (_cachedQuest.ContainsKey(questId))
            {
                return(_cachedQuest[questId]);
            }

            AikaQuest quest = await _questDbAccess.GetQuestById(questId);

            _cachedQuest.Add(questId, quest);
            return(quest);
        }
コード例 #8
0
        public async Task <IActionResult> DeleteQuest(string id)
        {
            // Check References
            List <AikaChapterDetail> chapterDetails = await _chapterDetailDbAccess.GetChapterDetailsByQuestId(id);

            if (chapterDetails.Count > 0)
            {
                string usedInChapterDetails = string.Join(", ", chapterDetails.Select(p => p.Name));
                return(StatusCode((int)HttpStatusCode.BadRequest, _localizer["CanNotDeleteQuestUsedInChapterDetail", usedInChapterDetails].Value));
            }

            List <KirjaPage> kirjaPages = await _kirjaPageDbAccess.GetPagesByQuest(id);

            if (kirjaPages.Count > 0)
            {
                string mentionedInPages = string.Join(", ", kirjaPages.Select(p => p.Name));
                return(StatusCode((int)HttpStatusCode.BadRequest, _localizer["CanNotDeleteQuestMentionedInKirjaPage", mentionedInPages].Value));
            }

            List <TaleDialog> taleDialogs = await _taleDbAccess.GetDialogsObjectIsReferenced(id);

            taleDialogs = taleDialogs.Where(t => t.RelatedObjectId != id).ToList();
            if (taleDialogs.Count > 0)
            {
                List <KortistoNpc> npcs = await _kortistoNpcDbAccess.ResolveFlexFieldObjectNames(taleDialogs.Select(t => t.RelatedObjectId).ToList());

                string referencedInDialogs = string.Join(", ", npcs.Select(n => n.Name));
                return(StatusCode((int)HttpStatusCode.BadRequest, _localizer["CanNotDeleteQuestReferencedInTaleDialog", referencedInDialogs].Value));
            }

            List <KortistoNpc> referencedInDailyRoutines = await _kortistoNpcDbAccess.GetNpcsObjectIsReferencedInDailyRoutine(id);

            if (referencedInDailyRoutines.Count > 0)
            {
                string usedInDailyRoutines = string.Join(", ", referencedInDailyRoutines.Select(m => m.Name));
                return(StatusCode((int)HttpStatusCode.BadRequest, _localizer["CanNotDeleteQuestUsedInDailyRoutine", usedInDailyRoutines].Value));
            }

            // Delete Quest
            AikaQuest deletedQuest = await _questDbAccess.GetQuestById(id);

            await _questDbAccess.DeleteQuest(deletedQuest);

            // Delete Marker
            await _kartaMapDbAccess.DeleteMarkersOfQuest(id);

            // Timeline Entry
            await _timelineService.AddTimelineEntry(TimelineEvent.AikaQuestDeleted, deletedQuest.Name);

            return(Ok(id));
        }
コード例 #9
0
        /// <summary>
        /// Returns the scriban flex field object for the export
        /// </summary>
        /// <param name="parsedData">Parsed condition</param>
        /// <param name="project">Project</param>
        /// <param name="errorCollection">Error Collection</param>
        /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param>
        /// <param name="exportSettings">Export Settings</param>
        /// <returns>Scriban export object</returns>
        protected override async Task <ScribanFlexFieldObject> GetScribanFlexFieldObject(ValueFieldConditionData parsedData, GoNorthProject project, ExportPlaceholderErrorCollection errorCollection, FlexFieldObject flexFieldObject, ExportSettings exportSettings)
        {
            AikaQuest quest = await _cachedDbAccess.GetQuestById(parsedData.SelectedObjectId);

            if (quest == null)
            {
                errorCollection.AddDialogQuestNotFoundError();
                return(null);
            }

            ScribanExportQuest convertedQuest = FlexFieldValueCollectorUtil.BuildFlexFieldValueObject <ScribanExportQuest>(null, null, quest, exportSettings, errorCollection);

            return(convertedQuest);
        }
コード例 #10
0
ファイル: AikaApiController.cs プロジェクト: xenonsin/GoNorth
        /// <summary>
        /// Copies the valid quest properties to a target quest
        /// </summary>
        /// <param name="targetQuest">Target quest to copy to</param>
        /// <param name="sourceQuest">Source quest to copy from</param>
        private void CopyValidQuestProperties(AikaQuest targetQuest, AikaQuest sourceQuest)
        {
            targetQuest.Name        = sourceQuest.Name;
            targetQuest.Description = sourceQuest.Description;
            targetQuest.IsMainQuest = sourceQuest.IsMainQuest;

            targetQuest.Fields = sourceQuest.Fields;

            FlexFieldApiUtil.SetFieldIdsForNewFields(targetQuest.Fields);

            targetQuest.Start     = GetStartNodeList(sourceQuest.Start);
            targetQuest.Text      = sourceQuest.Text != null ? sourceQuest.Text : new List <AikaTextNode>();
            targetQuest.Finish    = sourceQuest.Finish != null ? sourceQuest.Finish : new List <AikaFinish>();
            targetQuest.Condition = sourceQuest.Condition != null ? sourceQuest.Condition : new List <ConditionNode>();
            targetQuest.Action    = sourceQuest.Action != null ? sourceQuest.Action : new List <ActionNode>();
            targetQuest.AllDone   = sourceQuest.AllDone != null ? sourceQuest.AllDone : new List <AikaAllDone>();
            targetQuest.Link      = sourceQuest.Link != null ? sourceQuest.Link : new List <NodeLink>();
        }
コード例 #11
0
        public async Task <IActionResult> CreateQuest([FromBody] AikaQuest quest)
        {
            GoNorthProject defaultProject = await _projectDbAccess.GetDefaultProject();

            AikaQuest newQuest = new AikaQuest();

            newQuest.ProjectId = defaultProject.Id;

            CopyValidQuestProperties(newQuest, quest);

            await this.SetModifiedData(_userManager, newQuest);

            newQuest = await _questDbAccess.CreateQuest(newQuest);

            // Timeline Entry
            await _timelineService.AddTimelineEntry(TimelineEvent.AikaQuestCreated, newQuest.Id, newQuest.Name);

            return(Ok(newQuest));
        }
コード例 #12
0
        public async Task <IActionResult> FlagQuestAsImplemented(string questId)
        {
            // Check Data
            AikaQuest quest = await _questDbAccess.GetQuestById(questId);

            if (quest == null)
            {
                return(StatusCode((int)HttpStatusCode.NotFound));
            }

            // Flag quest as implemented
            quest.IsImplemented = true;
            await _questSnapshotDbAccess.SaveSnapshot(quest);

            await _questDbAccess.UpdateQuest(quest);

            // Add Timeline entry
            await _timelineService.AddTimelineEntry(TimelineEvent.ImplementedQuest, quest.Id, quest.Name);

            return(Ok());
        }
コード例 #13
0
        public async Task <IActionResult> GetQuest(string id)
        {
            AikaQuest quest = await _questDbAccess.GetQuestById(id);

            return(Ok(quest));
        }