1+ import { Resolvers } from "../.mesh" ;
2+ import { AssessmentItemType , CallbackAfterAssessmentMutation , handleAssessmentMutationThenCallback } from "./lib" ;
3+ import { QuestionTypes } from "./quiz" ;
4+
5+ const resolvers : Resolvers = {
6+ SubmissionMutation : {
7+ addTask : {
8+ /**
9+ * @param root { assessmentId: <UUID> } ???
10+ * @param _args GraqhQL function parameters defined in submissions.graphqls file
11+ * @param context Browser context (https request headers, etc.)
12+ * @param info GraphQL info/ introspection object
13+ * @param params logger, currentUser, query, token, service objects, etc.
14+ * @returns resolved mutation
15+ */
16+ async resolve ( root , _args , context , info ) {
17+ return handleAssessmentMutationThenCallback ( {
18+ assessmentType : AssessmentItemType . SubmissionAssessment ,
19+ type : null ,
20+ mutationName : "_internal_noauth_addTask" ,
21+ callback : handleSubmissionMutationCallback ,
22+ root,
23+ _args,
24+ context,
25+ info,
26+ } ) ;
27+ } ,
28+ } ,
29+ updateTask : {
30+ /**
31+ * @param root { assessmentId: <UUID> } ???
32+ * @param _args GraqhQL function parameters defined in submissions.graphqls file
33+ * @param context Browser context (https request headers, etc.)
34+ * @param info GraphQL info/ introspection object
35+ * @param params logger, currentUser, query, token, service objects, etc.
36+ * @returns resolved mutation
37+ */
38+ async resolve ( root , _args , context , info ) {
39+ return handleAssessmentMutationThenCallback ( {
40+ assessmentType : AssessmentItemType . SubmissionAssessment ,
41+ type : null ,
42+ mutationName : "_internal_noauth_updateTask" ,
43+ callback : handleSubmissionMutationCallback ,
44+ root,
45+ _args,
46+ context,
47+ info,
48+ isUpdate : true ,
49+ } ) ;
50+ } ,
51+ }
52+ }
53+ }
54+
55+ const handleSubmissionMutationCallback : CallbackAfterAssessmentMutation < AssessmentItemType . SubmissionAssessment > = async ( {
56+
57+ logger,
58+ root,
59+ _args,
60+ context,
61+ info,
62+ isUpdate,
63+ mutationName,
64+ returnItem,
65+ contentUpdated,
66+ } ) => {
67+ logger . log ( 4 , true , `mutating submission item with id "${ returnItem . id } "...` ) ;
68+ try {
69+ const submissionMutated = await mutateSubmissionAssessmentInMediaService (
70+ logger ,
71+ root ,
72+ context ,
73+ info ,
74+ mutationName ,
75+ contentUpdated ,
76+ _args . assessmentId
77+ ) ;
78+ const modifiedTask = submissionMutated [ mutationName ] . tasks . find (
79+ ( taskFetched ) => taskFetched . itemId === returnItem . id
80+ ) ;
81+ logger . log ( 4 , false , `task content ${ isUpdate ? "updated" : "added" } :` , modifiedTask ) ;
82+
83+ logger . log ( 5 , true , "finished" ) ;
84+ return {
85+ assessmentId : submissionMutated [ mutationName ] . assessmentId ,
86+ tasks : submissionMutated [ mutationName ] . tasks ,
87+ modifiedTask : modifiedTask ,
88+ } ;
89+ } catch ( error ) {
90+ console . error ( "Error mutating submission:" , error ) ;
91+ }
92+ } ;
93+
94+ const mutateSubmissionAssessmentInMediaService = async (
95+ logger ,
96+ root ,
97+ context ,
98+ info ,
99+ mutationName ,
100+ taskInput ,
101+ assessmentId
102+ ) => {
103+ const selectionSetMutationName = /* GraphQL */ `${ mutationName } (input: {
104+ itemId: "${ taskInput . itemId } ",
105+ maxScore: ${ taskInput . maxScore } ,
106+ name: "${ taskInput . name } ",
107+ number: ${ taskInput . number }
108+ })` ;
109+ logger . log ( 4 , false , "mutation content" , selectionSetMutationName ) ;
110+
111+ return await context . MediaService . Mutation . mutateSubmission ( {
112+ root,
113+ args : { assessmentId : assessmentId } ,
114+ selectionSet : /* GraphQL */ `{
115+ ${ selectionSetMutationName } {
116+ assessmentId
117+ courseId
118+ endDate
119+ tasks {
120+ name,
121+ itemId,
122+ maxScore,
123+ number
124+ }
125+ }
126+ }` ,
127+ context,
128+ info,
129+ } ) ;
130+ } ;
131+
132+ export default resolvers ;
0 commit comments