Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
386 changes: 171 additions & 215 deletions api/package-lock.json

Large diffs are not rendered by default.

24 changes: 12 additions & 12 deletions api/src/prompt/prompt.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,16 @@ const byInternalIdLoader = new PrimaryKeyLoader({
})

const byRequirementIdLoader = new OneToManyLoader({
fetch: async (requirementIds: string[]) => {
return await getRequirementPrompts({ requirementIds })
fetch: async (requirementIds: string[], filters?: RequirementPromptFilter) => {
return await getRequirementPrompts({ ...filters, requirementIds })
},
extractKey: row => row.requirementId,
idLoader: byInternalIdLoader
})

const byAppRequestInternalIdLoader = new OneToManyLoader({
fetch: async (appRequestIds: string[]) => {
return await getRequirementPrompts({ appRequestIds })
fetch: async (appRequestIds: string[], filters?: RequirementPromptFilter) => {
return await getRequirementPrompts({ ...filters, appRequestIds })
},
extractKey: (row: RequirementPrompt) => row.appRequestId,
idLoader: [byInternalIdLoader]
Expand Down Expand Up @@ -83,14 +83,14 @@ export class RequirementPromptServiceInternal extends BaseService<RequirementPro
return await this.findByInternalId(Number(id))
}

async findByAppRequest (appRequest: AppRequest) {
const prompts = await this.loaders.get(byAppRequestInternalIdLoader).load(appRequest.id)
async findByAppRequest (appRequest: AppRequest, filters?: RequirementPromptFilter) {
const prompts = await this.loaders.get(byAppRequestInternalIdLoader, filters).load(appRequest.id)
for (const prompt of prompts) prompt.appRequestTags = appRequest.tags
return prompts
}

async findByApplicationRequirement (requirement: ApplicationRequirement) {
const prompts = await this.loaders.get(byRequirementIdLoader).load(requirement.id)
async findByApplicationRequirement (requirement: ApplicationRequirement, filters?: RequirementPromptFilter) {
const prompts = await this.loaders.get(byRequirementIdLoader, filters).load(requirement.id)
for (const prompt of prompts) prompt.appRequestTags = requirement.appRequestTags
return prompts
}
Expand All @@ -108,13 +108,13 @@ export class RequirementPromptService extends AuthService<RequirementPrompt> {
return await this.findByInternalId(Number(id))
}

async findByAppRequest (appRequest: AppRequest) {
const prompts = await this.raw.findByAppRequest(appRequest)
async findByAppRequest (appRequest: AppRequest, filters?: RequirementPromptFilter) {
const prompts = await this.raw.findByAppRequest(appRequest, filters)
return this.removeUnauthorized(prompts)
}

async findByApplicationRequirement (requirement: ApplicationRequirement) {
const prompts = await this.raw.findByApplicationRequirement(requirement)
async findByApplicationRequirement (requirement: ApplicationRequirement, filters?: RequirementPromptFilter) {
const prompts = await this.raw.findByApplicationRequirement(requirement, filters)
return this.removeUnauthorized(prompts)
}

Expand Down
6 changes: 3 additions & 3 deletions api/src/requirement/requirement.resolver.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Arg, Ctx, FieldResolver, ID, Mutation, Query, Resolver, Root } from 'type-graphql'
import { Context, ValidatedResponse } from '@txstate-mws/graphql-server'
import { requirementRegistry, Requirement, ApplicationRequirement, Prompt, promptRegistry, RequirementPrompt, RequirementPromptService, Application, ApplicationService, Configuration, ConfigurationService, RQContext, PeriodProgramRequirement, PromptService, JsonData, PeriodPromptService, PeriodPrompt, PeriodWorkflowStage, ProgramService, PeriodRequirementService, PeriodService, ApplicationRequirementService } from '../internal.js'
import { requirementRegistry, Requirement, ApplicationRequirement, Prompt, promptRegistry, RequirementPrompt, RequirementPromptService, Application, ApplicationService, Configuration, ConfigurationService, RQContext, PeriodProgramRequirement, PromptService, JsonData, PeriodPromptService, PeriodPrompt, PeriodWorkflowStage, ProgramService, PeriodRequirementService, PeriodService, ApplicationRequirementService, RequirementPromptFilter } from '../internal.js'

@Resolver(of => Requirement)
export class RequirementResolver {
Expand All @@ -18,8 +18,8 @@ export class RequirementResolver {
@Resolver(of => ApplicationRequirement)
export class ApplicationRequirementResolver {
@FieldResolver(returns => [RequirementPrompt])
async prompts (@Ctx() ctx: Context, @Root() requirement: ApplicationRequirement) {
return await ctx.svc(RequirementPromptService).findByApplicationRequirement(requirement)
async prompts (@Ctx() ctx: Context, @Root() requirement: ApplicationRequirement, @Arg('filter', { nullable: true }) filter?: RequirementPromptFilter) {
return await ctx.svc(RequirementPromptService).findByApplicationRequirement(requirement, filter)
}

@FieldResolver(returns => Application)
Expand Down
10 changes: 10 additions & 0 deletions demos/src/default/definitions/prompts/cat.prompts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,16 @@ export const applicant_seems_nice_prompt: PromptDefinition<NicePromptData> = {
navTitle: 'Niceness',
description: 'Reviewer will indicate whether the applicant seems nice.',
schema: NicePromptSchema,
fetch: async (appRequest, config, data) => {
// Simulate delayed fetching
await new Promise(resolve => setTimeout(resolve, 1000))
return { ratings: [0, 1, 2, 3, 4, 5] }
},
preload: async (appRequest, config, data) => {
// Simulate delayed preloading
await new Promise(resolve => setTimeout(resolve, 1000))
return { seemsNice: false }
},
validate: (data, config) => {
const messages = []
if (data.seemsNice == null) {
Expand Down
Loading