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)); }
/// <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)); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
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)); }
/// <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); }
/// <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>(); }
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)); }
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()); }
public async Task <IActionResult> GetQuest(string id) { AikaQuest quest = await _questDbAccess.GetQuestById(id); return(Ok(quest)); }