public async Task <IActionResult> AssignStory([FromRoute] Guid organizationId, [FromRoute] Guid storyId, [FromBody] AssignStoryInput input) { var story = await _storyService.AssignStory(_agencyOwner, storyId, input); return(Ok(story)); }
public async Task <StoryResult> AssignStory(IOrganizationProjectManager pm, Guid storyId, AssignStoryInput input) { _logger.LogInformation(GetLogMessage("Project Manager {0}; Assigning Story: {1}"), pm.OrganizationId, storyId); var story = await Repository .Queryable() .Include(x => x.Project) .ForOrganizationProjectManager(pm) .Where(x => x.Id == storyId) .FirstOrDefaultAsync(); story.ContractorOrganizationId = input.ContractorId != null ? pm.OrganizationId : (Guid?)null; return(await AssignStory(story, input)); }
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); }