private async Task <StoryResult> UpdateStoryInternal(Guid storyId, UpdateStoryInput input) { var retVal = new StoryResult { StoryId = storyId }; var entity = await Repository .FirstOrDefaultAsync(x => x.Id == storyId); entity.InjectFrom(input); entity.Updated = DateTimeOffset.UtcNow; entity.ObjectState = ObjectState.Modified; var records = await Repository.UpdateAsync(entity, true); _logger.LogDebug(GetLogMessage("{0} Records updated"), records); if (records > 0) { retVal.Succeeded = true; await Task.Run(() => { RaiseEvent(new StoryUpdatedEvent { StoryId = storyId }); }); } return(retVal); }
private async Task <StoryResult> DeleteStoryInternal(Guid storyId) { _logger.LogInformation(GetLogMessage("Story: {0}"), storyId); var retVal = new StoryResult { StoryId = storyId }; var entity = await Repository.FirstOrDefaultAsync(x => x.Id == storyId); entity.IsDeleted = true; entity.Updated = DateTimeOffset.UtcNow; var result = await Repository.UpdateAsync(entity, true); _logger.LogDebug(GetLogMessage("{0} results updated"), result); if (result > 0) { retVal.Succeeded = true; await Task.Run(() => { RaiseEvent(new StoryDeletedEvent { StoryId = storyId }); }); } return(retVal); }
public async Task <ActionResult <StoryResult> > Related(int id) { var card = await _meredithDbContext.Cards.FirstOrDefaultAsync(c => c.Id == id); if (card is null) { return(NotFound()); } var result = new StoryResult(card.Id, card.Text, card.CallToAction, card.CallToActionUrl, card.BackgroundUrl, card.PosterUrl, card.CardType); return(Ok(result)); }
public async Task <IStoryResult> Play(IStory story, CancellationToken cancellationToken = default(CancellationToken)) { if (cancellationToken == default(CancellationToken)) { cancellationToken = new CancellationTokenSource(TimeSpan.FromMinutes(5)).Token; } var steps = story.StoryFrames.Select(sf => new StoryPlayerStep { StoryFrame = sf, Status = StoryPlayerStepStatus.NotDone, }) .ToArray(); await this.InitializeMessaging(cancellationToken); foreach (var step in steps) { await this.Process(step, cancellationToken); } // At the end there should be no unprocessed received messages if (steps.Last().StoryFrame.Actor == Actor.Bot) { Assert.Empty(this.receivedMessages); } var result = new StoryResult(); foreach (var pair in this.outputValues) { result.OutputValues.Add(pair.Key, pair.Value); } return(result); }
private async Task <StoryResult> AssignStory(Story story, AssignStoryInput input) { _logger.LogInformation(GetLogMessage("Story: {0}"), story.Id); var result = new StoryResult { StoryId = story.Id }; var originalContractorId = story.ContractorId; story.ContractorId = input.ContractorId; story.AssignedDateTime = DateTimeOffset.UtcNow; story.Updated = DateTimeOffset.UtcNow; story.ObjectState = ObjectState.Modified; if (input.ContractorId.HasValue) { _logger.LogDebug(GetLogMessage("assign")); story.Status = StoryStatus.Assigned; } else { _logger.LogDebug(GetLogMessage("unassign")); switch (story.Project.Status) { case ProjectStatus.Pending: story.Status = StoryStatus.Pending; break; case ProjectStatus.Active: story.Status = StoryStatus.Approved; break; case ProjectStatus.Paused: story.Status = StoryStatus.Pending; break; case ProjectStatus.Ended: story.Status = StoryStatus.Archived; break; case ProjectStatus.Inactive: story.Status = StoryStatus.Pending; break; } } story.StatusTransitions.Add(new StoryStatusTransition() { Status = story.Status, ObjectState = ObjectState.Added }); var records = await Repository.UpdateAsync(story, true); _logger.LogDebug(GetLogMessage("{0} Records Updated"), records); if (records > 0) { result.Succeeded = true; if (originalContractorId != story.ContractorId && story.ContractorId.HasValue) { await Task.Run(() => RaiseEvent(new StoryAssignedEvent() { StoryId = story.Id })); } } return(result); }
private async Task <StoryResult> CreateStoryInternal(CreateStoryInput input, Guid organizationId) { _logger.LogInformation(GetLogMessage("Org: {0}"), organizationId); var retVal = new StoryResult(); var project = _projectService.Repository.Queryable() .Include(x => x.Proposal) .Where(x => x.Id == input.ProjectId && x.ProjectManagerOrganizationId == organizationId) .FirstOrDefaultAsync(); var existingStoryCount = Repository.Queryable() .CountAsync(x => x.ProjectId == input.ProjectId); await Task.WhenAll(project, existingStoryCount); if (project.Result == null) { retVal.ErrorMessage = "No project found"; return(retVal); } _logger.LogDebug(GetLogMessage("Project: {0}; Status: {1}"), project.Result.Id, project.Result.Status); var story = new Story { Status = input.ContractorId.HasValue ? StoryStatus.Assigned : StoryStatus.Pending, StoryId = project.Result.Abbreviation + "-" + (existingStoryCount.Result + 1), ObjectState = ObjectState.Added, StoryTemplateId = input.TemplateId, StoryPoints = input.StoryPoints, ContractorId = input.ContractorId, ContractorOrganizationId = input.ContractorId.HasValue ? organizationId : (Guid?)null }; switch (project.Result.Status) { case ProjectStatus.Active: story.CustomerAcceptanceDate = DateTimeOffset.UtcNow; story.Updated = DateTimeOffset.UtcNow; story.ObjectState = ObjectState.Modified; story.Status = StoryStatus.Approved; story.CustomerApprovedHours = story.StoryPoints * project.Result.Proposal.EstimationBasis; break; } story.InjectFrom(input); story.StatusTransitions.Add(new StoryStatusTransition() { Status = story.Status, ObjectState = ObjectState.Added }); var storyRecords = Repository.Insert(story, true); _logger.LogDebug(GetLogMessage("{0} records updated in db."), storyRecords); if (storyRecords > 0) { retVal.StoryId = story.Id; retVal.Succeeded = true; await Task.Run(() => { if (story.Status == StoryStatus.Pending) { RaiseEvent(new StoryCreatedEvent { StoryId = story.Id }); } if (story.ContractorId.HasValue) { RaiseEvent(new StoryAssignedEvent() { StoryId = story.Id }); } if (story.Status == StoryStatus.Approved) { RaiseEvent(new StoryApprovedEvent() { StoryId = story.Id }); } }); } return(retVal); }