public Task <StoryResult> CreateStory( IOrganizationAccountManager organizationAccountManager, CreateStoryInput input ) { return(CreateStoryInternal(input, organizationAccountManager.OrganizationId)); }
public async Task <StoryResult> CreateStory( IOrganizationProjectManager pm, CreateStoryInput input ) { return(await CreateStoryInternal(input, pm.OrganizationId)); }
public Task <StoryResult> CreateStory( IProviderAgencyOwner agencyOwner, CreateStoryInput input ) { return(CreateStoryInternal(input, agencyOwner.OrganizationId)); }
public async Task <IActionResult> CreateStory( [FromRoute] Guid organizationId, [FromBody] CreateStoryInput input ) { var story = await _storyService .CreateStory(_accountManager, input); return(Ok(story)); }
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); }