private async Task CopyWorkflows(CancellationToken cancellationToken, Data.Entities.Application newApplication) { var workflowSequences = await _dataContext.WorkflowSequences.AsNoTracking() .Where(seq => seq.WorkflowId == newApplication.WorkflowId).ToListAsync(cancellationToken); var groupedSequences = workflowSequences.GroupBy(seq => new { seq.SequenceNo, seq.IsActive }).ToList(); var newApplicationSequences = groupedSequences.Select(seq => new ApplicationSequence { ApplicationId = newApplication.Id, SequenceNo = seq.Key.SequenceNo, IsActive = seq.Key.IsActive }).ToList(); await _dataContext.ApplicationSequences.AddRangeAsync(newApplicationSequences, cancellationToken); _logger.LogInformation($"Created ApplicationSequence entities for Application: {newApplication.Id}"); var sectionIds = groupedSequences.SelectMany(seq => seq).Select(seq => seq.SectionId).ToList(); var workflowSections = await _dataContext.WorkflowSections.AsNoTracking() .Where(sec => sectionIds.Contains(sec.Id)).ToListAsync(cancellationToken: cancellationToken); var newApplicationSections = new List <ApplicationSection>(); foreach (var sequence in groupedSequences) { var applicationSequence = newApplicationSequences.Single(appSeq => appSeq.SequenceNo == sequence.Key.SequenceNo); foreach (var sectionDetails in sequence) { var workflowSection = workflowSections.Single(wSec => wSec.Id == sectionDetails.SectionId); var newSection = new ApplicationSection { Id = Guid.NewGuid(), SequenceId = applicationSequence.Id, Title = workflowSection.Title, LinkTitle = workflowSection.LinkTitle, ApplicationId = newApplication.Id, DisplayType = workflowSection.DisplayType, QnAData = workflowSection.QnAData, SectionNo = sectionDetails.SectionNo, SequenceNo = sectionDetails.SequenceNo }; foreach (var page in newSection.QnAData.Pages) { page.SectionId = newSection.Id; page.SequenceId = newSection.SequenceId; } newApplicationSections.Add(newSection); } } await _dataContext.ApplicationSections.AddRangeAsync(newApplicationSections, cancellationToken); _logger.LogInformation($"Created ApplicationSection entities for Application: {newApplication.Id}"); }
private void RemovePages(Data.Entities.Application application, ApplicationSection section) { var applicationData = JObject.Parse(application.ApplicationData); RemoveInactivePages(section); RemovePagesBasedOnNotRequiredConditions(section, applicationData); }
public async Task <IActionResult> Post([FromBody] ApplicationPostModel model) { if (await ApplicationManager.Applications.AnyAsync(x => x.Name == model.Name || x.ApplicationId == model.AppId)) { return(BadRequest(new ApiErrorResult <ApiError>(new ApiError(ApiErrorCodes.BadArgument, "存在重复的名称或应用程序Id。")))); } var app = new Data.Entities.Application { Id = await IdentityGenerator.GenerateAsync(), Name = model.Name, ApplicationId = model.AppId, Description = model.Description, Enabled = model.Enabled }; var result = await ApplicationManager.CreateApplicationAsync(app); if (result.Succeeded) { return(StatusCode(201, new ApiResult <ObjectCreationOutputModel <long> >(new ObjectCreationOutputModel <long>(app.Id, $"{Request.Scheme}://{Request.Host.Value}/api/applications/{app.Id}")))); } throw new NotImplementedException(); }
private async Task CopyFileUploads(Data.Entities.Application currentApplication, Data.Entities.Application newApplication, CancellationToken cancellationToken) { var sections = await _dataContext.ApplicationSections.AsNoTracking().Where(sec => sec.ApplicationId == currentApplication.Id).ToListAsync(); var newSections = await _dataContext.ApplicationSections.AsNoTracking().Where(sec => sec.ApplicationId == newApplication.Id).ToListAsync(); foreach (var section in sections) { var newSection = newSections.FirstOrDefault(s => s.SectionNo == section.SectionNo && s.SequenceNo == section.SequenceNo); if (newSection is null) { continue; } // Go through each page that has a FileUpload question and copy any files across foreach (var pageWithFileUpload in section.QnAData.Pages.Where(p => p.Questions.Any(q => "FileUpload".Equals(q.Input?.Type)))) { foreach (var pageOfAnswer in pageWithFileUpload.PageOfAnswers) { foreach (var answer in pageOfAnswer.Answers) { if (!string.IsNullOrWhiteSpace(answer.Value)) { var originalFileUrl = $"{section.ApplicationId.ToString().ToLower()}/{section.SequenceId.ToString().ToLower()}/{section.Id.ToString().ToLower()}/{pageWithFileUpload.PageId.ToLower()}/{answer.QuestionId.ToLower()}/{answer.Value}"; var snapshotFileUrl = $"{newSection.ApplicationId.ToString().ToLower()}/{newSection.SequenceId.ToString().ToLower()}/{newSection.Id.ToString().ToLower()}/{pageWithFileUpload.PageId.ToLower()}/{answer.QuestionId.ToLower()}/{answer.Value}"; await CopyFileInAzureStorage(originalFileUrl, snapshotFileUrl); } } } } } _logger.LogInformation($"Copied over file uploads for Application: {newApplication.Id}"); }
public static ApplicationGetOutputModel FromApplication(Data.Entities.Application app) { return(new ApplicationDetailGetOutputModel { Id = app.Id, ApplicationId = app.ApplicationId, Name = app.Name, Enabled = app.Enabled, Description = app.Description }); }
public async Task GetSectionAndPage(Guid applicationId, Guid sectionId, string pageId) { Application = await _dataContext.Applications.SingleOrDefaultAsync(app => app.Id == applicationId); Section = await _dataContext.ApplicationSections.SingleOrDefaultAsync(sec => sec.Id == sectionId && sec.ApplicationId == applicationId); if (Section != null) { QnaData = new QnAData(Section.QnAData); Page = QnaData.Pages.SingleOrDefault(p => p.PageId == pageId); } }
public static ApplicationDetailGetOutputModel FromApplication(Data.Entities.Application app, int eventCount) { return(new ApplicationDetailGetOutputModel { Id = app.Id, ApplicationId = app.ApplicationId, Name = app.Name, Enabled = app.Enabled, Description = app.Description, EventCount = eventCount, UserList = app.Users.Select(x => x.UserId).ToList() }); }
private async Task <Data.Entities.Application> CreateNewApplication(StartApplicationRequest request, Workflow latestWorkflow, CancellationToken cancellationToken, string applicationData) { var newApplication = new Data.Entities.Application { ApplicationStatus = ApplicationStatus.InProgress, WorkflowId = latestWorkflow.Id, Reference = request.UserReference, CreatedAt = SystemTime.UtcNow(), ApplicationData = applicationData }; _dataContext.Applications.Add(newApplication); _logger.LogInformation($"Created Application entity: {newApplication.Id}"); return(newApplication); }
private async Task CopySections(Data.Entities.Application currentApplication, Data.Entities.Application newApplication, CancellationToken cancellationToken) { var sections = await _dataContext.ApplicationSections.AsNoTracking() .Where(sec => sec.ApplicationId == currentApplication.Id).ToListAsync(cancellationToken: cancellationToken); var newApplicationSequences = await _dataContext.ApplicationSequences.AsNoTracking() .Where(seq => seq.ApplicationId == newApplication.Id).ToListAsync(cancellationToken); var newApplicationSections = new List <ApplicationSection>(); foreach (var sequence in newApplicationSequences) { // Copy over all sections into the new Application Sequence foreach (var section in sections.Where(sec => sec.SequenceNo == sequence.SequenceNo)) { var newSection = new ApplicationSection { Id = Guid.NewGuid(), SequenceId = sequence.Id, Title = section.Title, LinkTitle = section.LinkTitle, ApplicationId = newApplication.Id, DisplayType = section.DisplayType, QnAData = section.QnAData, SectionNo = section.SectionNo, SequenceNo = section.SequenceNo }; // Adjust page info appropriately foreach (var page in newSection.QnAData.Pages) { page.SectionId = newSection.Id; page.SequenceId = newSection.SequenceId; } newApplicationSections.Add(newSection); } } await _dataContext.ApplicationSections.AddRangeAsync(newApplicationSections, cancellationToken); await _dataContext.SaveChangesAsync(cancellationToken); _logger.LogInformation($"Created ApplicationSection entities for Application: {newApplication.Id}"); }
private async Task CopySequences(Data.Entities.Application currentApplication, Data.Entities.Application newApplication, CancellationToken cancellationToken) { var sequences = await _dataContext.ApplicationSequences.AsNoTracking() .Where(seq => seq.ApplicationId == currentApplication.Id).ToListAsync(cancellationToken); var newApplicationSequences = sequences.Select(seq => new ApplicationSequence { ApplicationId = newApplication.Id, SequenceNo = seq.SequenceNo, IsActive = seq.IsActive }).ToList(); await _dataContext.ApplicationSequences.AddRangeAsync(newApplicationSequences, cancellationToken); await _dataContext.SaveChangesAsync(cancellationToken); _logger.LogInformation($"Created ApplicationSequence entities for Application: {newApplication.Id}"); }
private async Task <Data.Entities.Application> CreateNewApplication(Data.Entities.Application application, CancellationToken cancellationToken) { var newApplication = new Data.Entities.Application { ApplicationStatus = application.ApplicationStatus, WorkflowId = application.WorkflowId, Reference = application.Reference, CreatedAt = SystemTime.UtcNow(), ApplicationData = application.ApplicationData }; _dataContext.Applications.Add(newApplication); await _dataContext.SaveChangesAsync(cancellationToken); _logger.LogInformation($"Created Application entity: {newApplication.Id}"); return(newApplication); }
protected void UpdateApplicationData(string pageId, List <Answer> submittedAnswers, ApplicationSection section, Data.Entities.Application application) { if (application != null) { var applicationData = JObject.Parse(application.ApplicationData ?? "{}"); var page = section?.QnAData?.Pages.SingleOrDefault(p => p.PageId == pageId); if (page != null) { var questionTagsWhichHaveBeenUpdated = new List <string>(); var answers = GetAnswersFromRequest(submittedAnswers); foreach (var question in page.Questions) { SetApplicationDataField(question, answers, applicationData); if (!string.IsNullOrWhiteSpace(question.QuestionTag)) { questionTagsWhichHaveBeenUpdated.Add(question.QuestionTag); } if (question.Input.Options != null) { foreach (var option in question.Input.Options.Where(o => o.FurtherQuestions != null)) { foreach (var furtherQuestion in option.FurtherQuestions) { SetApplicationDataField(furtherQuestion, answers, applicationData); if (!string.IsNullOrWhiteSpace(furtherQuestion.QuestionTag)) { questionTagsWhichHaveBeenUpdated.Add(furtherQuestion.QuestionTag); } } } } } application.ApplicationData = applicationData.ToString(Formatting.None); SetStatusOfAllPagesBasedOnUpdatedQuestionTags(application, questionTagsWhichHaveBeenUpdated); _tagProcessingService.ClearDeactivatedTags(application.Id, section.Id); } } }