@contractspec/module.learning-journey 1.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +200 -0
  3. package/dist/contracts/index.d.ts +5 -0
  4. package/dist/contracts/index.js +6 -0
  5. package/dist/contracts/models.d.ts +451 -0
  6. package/dist/contracts/models.d.ts.map +1 -0
  7. package/dist/contracts/models.js +388 -0
  8. package/dist/contracts/models.js.map +1 -0
  9. package/dist/contracts/onboarding.d.ts +666 -0
  10. package/dist/contracts/onboarding.d.ts.map +1 -0
  11. package/dist/contracts/onboarding.js +402 -0
  12. package/dist/contracts/onboarding.js.map +1 -0
  13. package/dist/contracts/operations.d.ts +280 -0
  14. package/dist/contracts/operations.d.ts.map +1 -0
  15. package/dist/contracts/operations.js +151 -0
  16. package/dist/contracts/operations.js.map +1 -0
  17. package/dist/contracts/shared.d.ts +5 -0
  18. package/dist/contracts/shared.d.ts.map +1 -0
  19. package/dist/contracts/shared.js +6 -0
  20. package/dist/contracts/shared.js.map +1 -0
  21. package/dist/docs/index.d.ts +1 -0
  22. package/dist/docs/index.js +1 -0
  23. package/dist/docs/learning-journey.docblock.d.ts +1 -0
  24. package/dist/docs/learning-journey.docblock.js +136 -0
  25. package/dist/docs/learning-journey.docblock.js.map +1 -0
  26. package/dist/engines/index.d.ts +4 -0
  27. package/dist/engines/index.js +5 -0
  28. package/dist/engines/srs.d.ts +111 -0
  29. package/dist/engines/srs.d.ts.map +1 -0
  30. package/dist/engines/srs.js +219 -0
  31. package/dist/engines/srs.js.map +1 -0
  32. package/dist/engines/streak.d.ts +100 -0
  33. package/dist/engines/streak.d.ts.map +1 -0
  34. package/dist/engines/streak.js +194 -0
  35. package/dist/engines/streak.js.map +1 -0
  36. package/dist/engines/xp.d.ts +97 -0
  37. package/dist/engines/xp.d.ts.map +1 -0
  38. package/dist/engines/xp.js +213 -0
  39. package/dist/engines/xp.js.map +1 -0
  40. package/dist/entities/ai.d.ts +232 -0
  41. package/dist/entities/ai.d.ts.map +1 -0
  42. package/dist/entities/ai.js +376 -0
  43. package/dist/entities/ai.js.map +1 -0
  44. package/dist/entities/course.d.ts +184 -0
  45. package/dist/entities/course.d.ts.map +1 -0
  46. package/dist/entities/course.js +316 -0
  47. package/dist/entities/course.js.map +1 -0
  48. package/dist/entities/flashcard.d.ts +170 -0
  49. package/dist/entities/flashcard.d.ts.map +1 -0
  50. package/dist/entities/flashcard.js +249 -0
  51. package/dist/entities/flashcard.js.map +1 -0
  52. package/dist/entities/gamification.d.ts +238 -0
  53. package/dist/entities/gamification.d.ts.map +1 -0
  54. package/dist/entities/gamification.js +392 -0
  55. package/dist/entities/gamification.js.map +1 -0
  56. package/dist/entities/index.d.ts +629 -0
  57. package/dist/entities/index.d.ts.map +1 -0
  58. package/dist/entities/index.js +45 -0
  59. package/dist/entities/index.js.map +1 -0
  60. package/dist/entities/learner.d.ts +224 -0
  61. package/dist/entities/learner.d.ts.map +1 -0
  62. package/dist/entities/learner.js +365 -0
  63. package/dist/entities/learner.js.map +1 -0
  64. package/dist/entities/onboarding.d.ts +190 -0
  65. package/dist/entities/onboarding.d.ts.map +1 -0
  66. package/dist/entities/onboarding.js +307 -0
  67. package/dist/entities/onboarding.js.map +1 -0
  68. package/dist/entities/quiz.d.ts +220 -0
  69. package/dist/entities/quiz.d.ts.map +1 -0
  70. package/dist/entities/quiz.js +370 -0
  71. package/dist/entities/quiz.js.map +1 -0
  72. package/dist/events.d.ts +796 -0
  73. package/dist/events.d.ts.map +1 -0
  74. package/dist/events.js +690 -0
  75. package/dist/events.js.map +1 -0
  76. package/dist/index.d.ts +20 -0
  77. package/dist/index.js +22 -0
  78. package/dist/learning-journey.feature.d.ts +12 -0
  79. package/dist/learning-journey.feature.d.ts.map +1 -0
  80. package/dist/learning-journey.feature.js +150 -0
  81. package/dist/learning-journey.feature.js.map +1 -0
  82. package/dist/track-spec.d.ts +129 -0
  83. package/dist/track-spec.d.ts.map +1 -0
  84. package/dist/track-spec.js +0 -0
  85. package/package.json +98 -0
@@ -0,0 +1,220 @@
1
+ import * as _contractspec_lib_schema0 from "@contractspec/lib.schema";
2
+
3
+ //#region src/entities/quiz.d.ts
4
+ /**
5
+ * Question type enum.
6
+ */
7
+ declare const QuestionTypeEnum: _contractspec_lib_schema0.EntityEnumDef;
8
+ /**
9
+ * Quiz status enum.
10
+ */
11
+ declare const QuizStatusEnum: _contractspec_lib_schema0.EntityEnumDef;
12
+ /**
13
+ * Attempt status enum.
14
+ */
15
+ declare const AttemptStatusEnum: _contractspec_lib_schema0.EntityEnumDef;
16
+ /**
17
+ * Quiz entity - assessment for a lesson.
18
+ */
19
+ declare const QuizEntity: _contractspec_lib_schema0.EntitySpec<{
20
+ id: _contractspec_lib_schema0.EntityScalarField;
21
+ lessonId: _contractspec_lib_schema0.EntityScalarField;
22
+ title: _contractspec_lib_schema0.EntityScalarField;
23
+ description: _contractspec_lib_schema0.EntityScalarField;
24
+ instructions: _contractspec_lib_schema0.EntityScalarField;
25
+ passingScore: _contractspec_lib_schema0.EntityScalarField;
26
+ timeLimit: _contractspec_lib_schema0.EntityScalarField;
27
+ maxAttempts: _contractspec_lib_schema0.EntityScalarField;
28
+ shuffleQuestions: _contractspec_lib_schema0.EntityScalarField;
29
+ shuffleOptions: _contractspec_lib_schema0.EntityScalarField;
30
+ showCorrectAnswers: _contractspec_lib_schema0.EntityScalarField;
31
+ showExplanations: _contractspec_lib_schema0.EntityScalarField;
32
+ status: _contractspec_lib_schema0.EntityEnumField;
33
+ totalPoints: _contractspec_lib_schema0.EntityScalarField;
34
+ xpReward: _contractspec_lib_schema0.EntityScalarField;
35
+ orgId: _contractspec_lib_schema0.EntityScalarField;
36
+ metadata: _contractspec_lib_schema0.EntityScalarField;
37
+ createdAt: _contractspec_lib_schema0.EntityScalarField;
38
+ updatedAt: _contractspec_lib_schema0.EntityScalarField;
39
+ lesson: _contractspec_lib_schema0.EntityRelationField;
40
+ questions: _contractspec_lib_schema0.EntityRelationField;
41
+ attempts: _contractspec_lib_schema0.EntityRelationField;
42
+ }>;
43
+ /**
44
+ * Question entity - individual quiz question.
45
+ */
46
+ declare const QuestionEntity: _contractspec_lib_schema0.EntitySpec<{
47
+ id: _contractspec_lib_schema0.EntityScalarField;
48
+ quizId: _contractspec_lib_schema0.EntityScalarField;
49
+ type: _contractspec_lib_schema0.EntityEnumField;
50
+ content: _contractspec_lib_schema0.EntityScalarField;
51
+ mediaUrl: _contractspec_lib_schema0.EntityScalarField;
52
+ points: _contractspec_lib_schema0.EntityScalarField;
53
+ codeLanguage: _contractspec_lib_schema0.EntityScalarField;
54
+ codeTemplate: _contractspec_lib_schema0.EntityScalarField;
55
+ testCases: _contractspec_lib_schema0.EntityScalarField;
56
+ explanation: _contractspec_lib_schema0.EntityScalarField;
57
+ hint: _contractspec_lib_schema0.EntityScalarField;
58
+ order: _contractspec_lib_schema0.EntityScalarField;
59
+ skillId: _contractspec_lib_schema0.EntityScalarField;
60
+ metadata: _contractspec_lib_schema0.EntityScalarField;
61
+ createdAt: _contractspec_lib_schema0.EntityScalarField;
62
+ updatedAt: _contractspec_lib_schema0.EntityScalarField;
63
+ quiz: _contractspec_lib_schema0.EntityRelationField;
64
+ options: _contractspec_lib_schema0.EntityRelationField;
65
+ }>;
66
+ /**
67
+ * QuestionOption entity - answer option for a question.
68
+ */
69
+ declare const QuestionOptionEntity: _contractspec_lib_schema0.EntitySpec<{
70
+ id: _contractspec_lib_schema0.EntityScalarField;
71
+ questionId: _contractspec_lib_schema0.EntityScalarField;
72
+ content: _contractspec_lib_schema0.EntityScalarField;
73
+ matchContent: _contractspec_lib_schema0.EntityScalarField;
74
+ isCorrect: _contractspec_lib_schema0.EntityScalarField;
75
+ feedback: _contractspec_lib_schema0.EntityScalarField;
76
+ order: _contractspec_lib_schema0.EntityScalarField;
77
+ metadata: _contractspec_lib_schema0.EntityScalarField;
78
+ createdAt: _contractspec_lib_schema0.EntityScalarField;
79
+ updatedAt: _contractspec_lib_schema0.EntityScalarField;
80
+ question: _contractspec_lib_schema0.EntityRelationField;
81
+ }>;
82
+ /**
83
+ * QuizAttempt entity - a learner's quiz attempt.
84
+ */
85
+ declare const QuizAttemptEntity: _contractspec_lib_schema0.EntitySpec<{
86
+ id: _contractspec_lib_schema0.EntityScalarField;
87
+ learnerId: _contractspec_lib_schema0.EntityScalarField;
88
+ quizId: _contractspec_lib_schema0.EntityScalarField;
89
+ status: _contractspec_lib_schema0.EntityEnumField;
90
+ score: _contractspec_lib_schema0.EntityScalarField;
91
+ percentageScore: _contractspec_lib_schema0.EntityScalarField;
92
+ passed: _contractspec_lib_schema0.EntityScalarField;
93
+ totalQuestions: _contractspec_lib_schema0.EntityScalarField;
94
+ answeredQuestions: _contractspec_lib_schema0.EntityScalarField;
95
+ correctAnswers: _contractspec_lib_schema0.EntityScalarField;
96
+ answers: _contractspec_lib_schema0.EntityScalarField;
97
+ xpEarned: _contractspec_lib_schema0.EntityScalarField;
98
+ timeSpent: _contractspec_lib_schema0.EntityScalarField;
99
+ startedAt: _contractspec_lib_schema0.EntityScalarField;
100
+ completedAt: _contractspec_lib_schema0.EntityScalarField;
101
+ attemptNumber: _contractspec_lib_schema0.EntityScalarField;
102
+ metadata: _contractspec_lib_schema0.EntityScalarField;
103
+ createdAt: _contractspec_lib_schema0.EntityScalarField;
104
+ updatedAt: _contractspec_lib_schema0.EntityScalarField;
105
+ learner: _contractspec_lib_schema0.EntityRelationField;
106
+ quiz: _contractspec_lib_schema0.EntityRelationField;
107
+ }>;
108
+ /**
109
+ * SkillAssessment entity - maps quiz performance to skills.
110
+ */
111
+ declare const SkillAssessmentEntity: _contractspec_lib_schema0.EntitySpec<{
112
+ id: _contractspec_lib_schema0.EntityScalarField;
113
+ learnerId: _contractspec_lib_schema0.EntityScalarField;
114
+ skillId: _contractspec_lib_schema0.EntityScalarField;
115
+ skillName: _contractspec_lib_schema0.EntityScalarField;
116
+ level: _contractspec_lib_schema0.EntityScalarField;
117
+ score: _contractspec_lib_schema0.EntityScalarField;
118
+ confidence: _contractspec_lib_schema0.EntityScalarField;
119
+ questionsAnswered: _contractspec_lib_schema0.EntityScalarField;
120
+ questionsCorrect: _contractspec_lib_schema0.EntityScalarField;
121
+ assessedAt: _contractspec_lib_schema0.EntityScalarField;
122
+ createdAt: _contractspec_lib_schema0.EntityScalarField;
123
+ updatedAt: _contractspec_lib_schema0.EntityScalarField;
124
+ learner: _contractspec_lib_schema0.EntityRelationField;
125
+ }>;
126
+ declare const quizEntities: (_contractspec_lib_schema0.EntitySpec<{
127
+ id: _contractspec_lib_schema0.EntityScalarField;
128
+ lessonId: _contractspec_lib_schema0.EntityScalarField;
129
+ title: _contractspec_lib_schema0.EntityScalarField;
130
+ description: _contractspec_lib_schema0.EntityScalarField;
131
+ instructions: _contractspec_lib_schema0.EntityScalarField;
132
+ passingScore: _contractspec_lib_schema0.EntityScalarField;
133
+ timeLimit: _contractspec_lib_schema0.EntityScalarField;
134
+ maxAttempts: _contractspec_lib_schema0.EntityScalarField;
135
+ shuffleQuestions: _contractspec_lib_schema0.EntityScalarField;
136
+ shuffleOptions: _contractspec_lib_schema0.EntityScalarField;
137
+ showCorrectAnswers: _contractspec_lib_schema0.EntityScalarField;
138
+ showExplanations: _contractspec_lib_schema0.EntityScalarField;
139
+ status: _contractspec_lib_schema0.EntityEnumField;
140
+ totalPoints: _contractspec_lib_schema0.EntityScalarField;
141
+ xpReward: _contractspec_lib_schema0.EntityScalarField;
142
+ orgId: _contractspec_lib_schema0.EntityScalarField;
143
+ metadata: _contractspec_lib_schema0.EntityScalarField;
144
+ createdAt: _contractspec_lib_schema0.EntityScalarField;
145
+ updatedAt: _contractspec_lib_schema0.EntityScalarField;
146
+ lesson: _contractspec_lib_schema0.EntityRelationField;
147
+ questions: _contractspec_lib_schema0.EntityRelationField;
148
+ attempts: _contractspec_lib_schema0.EntityRelationField;
149
+ }> | _contractspec_lib_schema0.EntitySpec<{
150
+ id: _contractspec_lib_schema0.EntityScalarField;
151
+ quizId: _contractspec_lib_schema0.EntityScalarField;
152
+ type: _contractspec_lib_schema0.EntityEnumField;
153
+ content: _contractspec_lib_schema0.EntityScalarField;
154
+ mediaUrl: _contractspec_lib_schema0.EntityScalarField;
155
+ points: _contractspec_lib_schema0.EntityScalarField;
156
+ codeLanguage: _contractspec_lib_schema0.EntityScalarField;
157
+ codeTemplate: _contractspec_lib_schema0.EntityScalarField;
158
+ testCases: _contractspec_lib_schema0.EntityScalarField;
159
+ explanation: _contractspec_lib_schema0.EntityScalarField;
160
+ hint: _contractspec_lib_schema0.EntityScalarField;
161
+ order: _contractspec_lib_schema0.EntityScalarField;
162
+ skillId: _contractspec_lib_schema0.EntityScalarField;
163
+ metadata: _contractspec_lib_schema0.EntityScalarField;
164
+ createdAt: _contractspec_lib_schema0.EntityScalarField;
165
+ updatedAt: _contractspec_lib_schema0.EntityScalarField;
166
+ quiz: _contractspec_lib_schema0.EntityRelationField;
167
+ options: _contractspec_lib_schema0.EntityRelationField;
168
+ }> | _contractspec_lib_schema0.EntitySpec<{
169
+ id: _contractspec_lib_schema0.EntityScalarField;
170
+ questionId: _contractspec_lib_schema0.EntityScalarField;
171
+ content: _contractspec_lib_schema0.EntityScalarField;
172
+ matchContent: _contractspec_lib_schema0.EntityScalarField;
173
+ isCorrect: _contractspec_lib_schema0.EntityScalarField;
174
+ feedback: _contractspec_lib_schema0.EntityScalarField;
175
+ order: _contractspec_lib_schema0.EntityScalarField;
176
+ metadata: _contractspec_lib_schema0.EntityScalarField;
177
+ createdAt: _contractspec_lib_schema0.EntityScalarField;
178
+ updatedAt: _contractspec_lib_schema0.EntityScalarField;
179
+ question: _contractspec_lib_schema0.EntityRelationField;
180
+ }> | _contractspec_lib_schema0.EntitySpec<{
181
+ id: _contractspec_lib_schema0.EntityScalarField;
182
+ learnerId: _contractspec_lib_schema0.EntityScalarField;
183
+ quizId: _contractspec_lib_schema0.EntityScalarField;
184
+ status: _contractspec_lib_schema0.EntityEnumField;
185
+ score: _contractspec_lib_schema0.EntityScalarField;
186
+ percentageScore: _contractspec_lib_schema0.EntityScalarField;
187
+ passed: _contractspec_lib_schema0.EntityScalarField;
188
+ totalQuestions: _contractspec_lib_schema0.EntityScalarField;
189
+ answeredQuestions: _contractspec_lib_schema0.EntityScalarField;
190
+ correctAnswers: _contractspec_lib_schema0.EntityScalarField;
191
+ answers: _contractspec_lib_schema0.EntityScalarField;
192
+ xpEarned: _contractspec_lib_schema0.EntityScalarField;
193
+ timeSpent: _contractspec_lib_schema0.EntityScalarField;
194
+ startedAt: _contractspec_lib_schema0.EntityScalarField;
195
+ completedAt: _contractspec_lib_schema0.EntityScalarField;
196
+ attemptNumber: _contractspec_lib_schema0.EntityScalarField;
197
+ metadata: _contractspec_lib_schema0.EntityScalarField;
198
+ createdAt: _contractspec_lib_schema0.EntityScalarField;
199
+ updatedAt: _contractspec_lib_schema0.EntityScalarField;
200
+ learner: _contractspec_lib_schema0.EntityRelationField;
201
+ quiz: _contractspec_lib_schema0.EntityRelationField;
202
+ }> | _contractspec_lib_schema0.EntitySpec<{
203
+ id: _contractspec_lib_schema0.EntityScalarField;
204
+ learnerId: _contractspec_lib_schema0.EntityScalarField;
205
+ skillId: _contractspec_lib_schema0.EntityScalarField;
206
+ skillName: _contractspec_lib_schema0.EntityScalarField;
207
+ level: _contractspec_lib_schema0.EntityScalarField;
208
+ score: _contractspec_lib_schema0.EntityScalarField;
209
+ confidence: _contractspec_lib_schema0.EntityScalarField;
210
+ questionsAnswered: _contractspec_lib_schema0.EntityScalarField;
211
+ questionsCorrect: _contractspec_lib_schema0.EntityScalarField;
212
+ assessedAt: _contractspec_lib_schema0.EntityScalarField;
213
+ createdAt: _contractspec_lib_schema0.EntityScalarField;
214
+ updatedAt: _contractspec_lib_schema0.EntityScalarField;
215
+ learner: _contractspec_lib_schema0.EntityRelationField;
216
+ }>)[];
217
+ declare const quizEnums: _contractspec_lib_schema0.EntityEnumDef[];
218
+ //#endregion
219
+ export { AttemptStatusEnum, QuestionEntity, QuestionOptionEntity, QuestionTypeEnum, QuizAttemptEntity, QuizEntity, QuizStatusEnum, SkillAssessmentEntity, quizEntities, quizEnums };
220
+ //# sourceMappingURL=quiz.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quiz.d.ts","names":[],"sources":["../../src/entities/quiz.ts"],"sourcesContent":[],"mappings":";;;;;;AAUa,cAAA,gBAYX,EAAA,yBAAA,CAZ2B,aAY3B;AAKF;AAUA;AAUA;AA+FE,cAnHW,cAmHX,EA9GA,yBAAA,CALyB,aAmHzB;;;;cAzGW,mBAKX,yBAAA,CAL4B;;;;cAUjB,sCAAU;MA+FrB,yBAAA,CAAA;;;;;;;;;;;;;0DA/FqB;EAAA,QAAA,6CAAA;EAoGV,KAAA,6CAwEX;EAAA,QAAA,6CAAA;;;;;;;;;;cAxEW,0CAAc;MAwEzB,yBAAA,CAAA;;;;;;;2DAxEyB;EAAA,SAAA,6CAAA;EA6Ed,WAAA,6CAiDX;EAAA,IAAA,6CAAA;;;;;;;;;;;;AAjD+B,cAApB,oBAAoB,4BAAA,UAAA,CAAA;EAsDpB,EAAA,EALX,yBAAA,CAAA,iBAiFA;EAAA,UAAA,6CAAA;;;;;;;;;;;;;;cA5EW,6CAAiB;MA4E5B,yBAAA,CAAA;;;;;;qDA5E4B;EAAA,cAAA,6CAAA;EAiFjB,iBAAA,6CA2CX;EAAA,cAAA,6CAAA;;;;;;;;;;;;;;;AAEF;AAMC,cAnDY,qBAmDZ,4BAnDiC,UAmDjC,CAAA;MARC,yBAAA,CAAA;;;;;;;;;;;;;;cAEW,yCAAY;MAMxB,yBAAA,CAAA;;;;;;wDANwB;EAAA,WAAA,6CAAA;;;;;;;;;;;;;;;;MAAA,yBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQzB,CAAA,CAAA,uCAA8E,CAAA;;;;;;;;;;;;;;;cAAjE,WAAiE,yBAAA,CAAxD,aAAA"}
@@ -0,0 +1,370 @@
1
+ import { defineEntity, defineEntityEnum, field, index } from "@contractspec/lib.schema";
2
+
3
+ //#region src/entities/quiz.ts
4
+ /**
5
+ * Question type enum.
6
+ */
7
+ const QuestionTypeEnum = defineEntityEnum({
8
+ name: "QuestionType",
9
+ values: [
10
+ "MULTIPLE_CHOICE",
11
+ "TRUE_FALSE",
12
+ "FILL_BLANK",
13
+ "MATCHING",
14
+ "SHORT_ANSWER",
15
+ "CODE"
16
+ ],
17
+ schema: "lssm_learning",
18
+ description: "Type of quiz question."
19
+ });
20
+ /**
21
+ * Quiz status enum.
22
+ */
23
+ const QuizStatusEnum = defineEntityEnum({
24
+ name: "QuizStatus",
25
+ values: [
26
+ "DRAFT",
27
+ "PUBLISHED",
28
+ "ARCHIVED"
29
+ ],
30
+ schema: "lssm_learning",
31
+ description: "Publication status of a quiz."
32
+ });
33
+ /**
34
+ * Attempt status enum.
35
+ */
36
+ const AttemptStatusEnum = defineEntityEnum({
37
+ name: "AttemptStatus",
38
+ values: [
39
+ "IN_PROGRESS",
40
+ "COMPLETED",
41
+ "TIMED_OUT",
42
+ "ABANDONED"
43
+ ],
44
+ schema: "lssm_learning",
45
+ description: "Status of a quiz attempt."
46
+ });
47
+ /**
48
+ * Quiz entity - assessment for a lesson.
49
+ */
50
+ const QuizEntity = defineEntity({
51
+ name: "Quiz",
52
+ description: "A quiz assessment.",
53
+ schema: "lssm_learning",
54
+ map: "quiz",
55
+ fields: {
56
+ id: field.id({ description: "Unique quiz identifier" }),
57
+ lessonId: field.foreignKey({
58
+ isOptional: true,
59
+ description: "Associated lesson"
60
+ }),
61
+ title: field.string({ description: "Quiz title" }),
62
+ description: field.string({
63
+ isOptional: true,
64
+ description: "Quiz description"
65
+ }),
66
+ instructions: field.string({
67
+ isOptional: true,
68
+ description: "Quiz instructions"
69
+ }),
70
+ passingScore: field.int({
71
+ default: 70,
72
+ description: "Passing score percentage"
73
+ }),
74
+ timeLimit: field.int({
75
+ isOptional: true,
76
+ description: "Time limit in seconds"
77
+ }),
78
+ maxAttempts: field.int({
79
+ isOptional: true,
80
+ description: "Maximum attempts allowed"
81
+ }),
82
+ shuffleQuestions: field.boolean({
83
+ default: false,
84
+ description: "Shuffle question order"
85
+ }),
86
+ shuffleOptions: field.boolean({
87
+ default: false,
88
+ description: "Shuffle answer options"
89
+ }),
90
+ showCorrectAnswers: field.boolean({
91
+ default: true,
92
+ description: "Show correct answers after"
93
+ }),
94
+ showExplanations: field.boolean({
95
+ default: true,
96
+ description: "Show explanations after"
97
+ }),
98
+ status: field.enum("QuizStatus", {
99
+ default: "DRAFT",
100
+ description: "Publication status"
101
+ }),
102
+ totalPoints: field.int({
103
+ default: 0,
104
+ description: "Total points available"
105
+ }),
106
+ xpReward: field.int({
107
+ default: 20,
108
+ description: "XP for passing"
109
+ }),
110
+ orgId: field.string({
111
+ isOptional: true,
112
+ description: "Organization scope"
113
+ }),
114
+ metadata: field.json({
115
+ isOptional: true,
116
+ description: "Additional metadata"
117
+ }),
118
+ createdAt: field.createdAt(),
119
+ updatedAt: field.updatedAt(),
120
+ lesson: field.belongsTo("Lesson", ["lessonId"], ["id"], { onDelete: "Cascade" }),
121
+ questions: field.hasMany("Question"),
122
+ attempts: field.hasMany("QuizAttempt")
123
+ },
124
+ indexes: [
125
+ index.on(["lessonId"]),
126
+ index.on(["status"]),
127
+ index.on(["orgId"])
128
+ ],
129
+ enums: [QuizStatusEnum]
130
+ });
131
+ /**
132
+ * Question entity - individual quiz question.
133
+ */
134
+ const QuestionEntity = defineEntity({
135
+ name: "Question",
136
+ description: "A quiz question.",
137
+ schema: "lssm_learning",
138
+ map: "question",
139
+ fields: {
140
+ id: field.id({ description: "Unique question identifier" }),
141
+ quizId: field.foreignKey({ description: "Parent quiz" }),
142
+ type: field.enum("QuestionType", { description: "Question type" }),
143
+ content: field.string({ description: "Question text" }),
144
+ mediaUrl: field.string({
145
+ isOptional: true,
146
+ description: "Question media"
147
+ }),
148
+ points: field.int({
149
+ default: 1,
150
+ description: "Points for correct answer"
151
+ }),
152
+ codeLanguage: field.string({
153
+ isOptional: true,
154
+ description: "Programming language"
155
+ }),
156
+ codeTemplate: field.string({
157
+ isOptional: true,
158
+ description: "Starter code template"
159
+ }),
160
+ testCases: field.json({
161
+ isOptional: true,
162
+ description: "Test cases for code validation"
163
+ }),
164
+ explanation: field.string({
165
+ isOptional: true,
166
+ description: "Explanation of correct answer"
167
+ }),
168
+ hint: field.string({
169
+ isOptional: true,
170
+ description: "Hint for the question"
171
+ }),
172
+ order: field.int({
173
+ default: 0,
174
+ description: "Display order"
175
+ }),
176
+ skillId: field.string({
177
+ isOptional: true,
178
+ description: "Associated skill"
179
+ }),
180
+ metadata: field.json({
181
+ isOptional: true,
182
+ description: "Additional metadata"
183
+ }),
184
+ createdAt: field.createdAt(),
185
+ updatedAt: field.updatedAt(),
186
+ quiz: field.belongsTo("Quiz", ["quizId"], ["id"], { onDelete: "Cascade" }),
187
+ options: field.hasMany("QuestionOption")
188
+ },
189
+ indexes: [
190
+ index.on(["quizId", "order"]),
191
+ index.on(["type"]),
192
+ index.on(["skillId"])
193
+ ],
194
+ enums: [QuestionTypeEnum]
195
+ });
196
+ /**
197
+ * QuestionOption entity - answer option for a question.
198
+ */
199
+ const QuestionOptionEntity = defineEntity({
200
+ name: "QuestionOption",
201
+ description: "An answer option for a question.",
202
+ schema: "lssm_learning",
203
+ map: "question_option",
204
+ fields: {
205
+ id: field.id({ description: "Unique option identifier" }),
206
+ questionId: field.foreignKey({ description: "Parent question" }),
207
+ content: field.string({ description: "Option text" }),
208
+ matchContent: field.string({
209
+ isOptional: true,
210
+ description: "Match pair content"
211
+ }),
212
+ isCorrect: field.boolean({
213
+ default: false,
214
+ description: "Whether option is correct"
215
+ }),
216
+ feedback: field.string({
217
+ isOptional: true,
218
+ description: "Feedback when selected"
219
+ }),
220
+ order: field.int({
221
+ default: 0,
222
+ description: "Display order"
223
+ }),
224
+ metadata: field.json({
225
+ isOptional: true,
226
+ description: "Additional metadata"
227
+ }),
228
+ createdAt: field.createdAt(),
229
+ updatedAt: field.updatedAt(),
230
+ question: field.belongsTo("Question", ["questionId"], ["id"], { onDelete: "Cascade" })
231
+ },
232
+ indexes: [index.on(["questionId", "order"])]
233
+ });
234
+ /**
235
+ * QuizAttempt entity - a learner's quiz attempt.
236
+ */
237
+ const QuizAttemptEntity = defineEntity({
238
+ name: "QuizAttempt",
239
+ description: "A learner quiz attempt.",
240
+ schema: "lssm_learning",
241
+ map: "quiz_attempt",
242
+ fields: {
243
+ id: field.id({ description: "Unique attempt identifier" }),
244
+ learnerId: field.foreignKey({ description: "Learner" }),
245
+ quizId: field.foreignKey({ description: "Quiz" }),
246
+ status: field.enum("AttemptStatus", {
247
+ default: "IN_PROGRESS",
248
+ description: "Attempt status"
249
+ }),
250
+ score: field.int({
251
+ isOptional: true,
252
+ description: "Score achieved"
253
+ }),
254
+ percentageScore: field.int({
255
+ isOptional: true,
256
+ description: "Percentage score"
257
+ }),
258
+ passed: field.boolean({
259
+ isOptional: true,
260
+ description: "Whether passed"
261
+ }),
262
+ totalQuestions: field.int({
263
+ default: 0,
264
+ description: "Total questions"
265
+ }),
266
+ answeredQuestions: field.int({
267
+ default: 0,
268
+ description: "Questions answered"
269
+ }),
270
+ correctAnswers: field.int({
271
+ default: 0,
272
+ description: "Correct answers"
273
+ }),
274
+ answers: field.json({
275
+ isOptional: true,
276
+ description: "Submitted answers"
277
+ }),
278
+ xpEarned: field.int({
279
+ default: 0,
280
+ description: "XP earned"
281
+ }),
282
+ timeSpent: field.int({
283
+ default: 0,
284
+ description: "Time spent in seconds"
285
+ }),
286
+ startedAt: field.dateTime({ description: "When started" }),
287
+ completedAt: field.dateTime({
288
+ isOptional: true,
289
+ description: "When completed"
290
+ }),
291
+ attemptNumber: field.int({
292
+ default: 1,
293
+ description: "Which attempt this is"
294
+ }),
295
+ metadata: field.json({
296
+ isOptional: true,
297
+ description: "Additional metadata"
298
+ }),
299
+ createdAt: field.createdAt(),
300
+ updatedAt: field.updatedAt(),
301
+ learner: field.belongsTo("Learner", ["learnerId"], ["id"], { onDelete: "Cascade" }),
302
+ quiz: field.belongsTo("Quiz", ["quizId"], ["id"], { onDelete: "Cascade" })
303
+ },
304
+ indexes: [
305
+ index.on(["learnerId", "quizId"]),
306
+ index.on(["learnerId", "status"]),
307
+ index.on(["quizId", "status"])
308
+ ],
309
+ enums: [AttemptStatusEnum]
310
+ });
311
+ /**
312
+ * SkillAssessment entity - maps quiz performance to skills.
313
+ */
314
+ const SkillAssessmentEntity = defineEntity({
315
+ name: "SkillAssessment",
316
+ description: "Assessment of a skill based on quiz performance.",
317
+ schema: "lssm_learning",
318
+ map: "skill_assessment",
319
+ fields: {
320
+ id: field.id({ description: "Unique assessment identifier" }),
321
+ learnerId: field.foreignKey({ description: "Learner" }),
322
+ skillId: field.string({ description: "Skill identifier" }),
323
+ skillName: field.string({ description: "Skill name" }),
324
+ level: field.int({
325
+ default: 1,
326
+ description: "Proficiency level (1-5)"
327
+ }),
328
+ score: field.int({
329
+ default: 0,
330
+ description: "Assessment score (0-100)"
331
+ }),
332
+ confidence: field.decimal({
333
+ default: .5,
334
+ description: "Confidence in assessment"
335
+ }),
336
+ questionsAnswered: field.int({
337
+ default: 0,
338
+ description: "Total questions answered"
339
+ }),
340
+ questionsCorrect: field.int({
341
+ default: 0,
342
+ description: "Total correct"
343
+ }),
344
+ assessedAt: field.dateTime({ description: "Last assessment time" }),
345
+ createdAt: field.createdAt(),
346
+ updatedAt: field.updatedAt(),
347
+ learner: field.belongsTo("Learner", ["learnerId"], ["id"], { onDelete: "Cascade" })
348
+ },
349
+ indexes: [
350
+ index.unique(["learnerId", "skillId"], { name: "skill_assessment_unique" }),
351
+ index.on(["learnerId", "level"]),
352
+ index.on(["skillId"])
353
+ ]
354
+ });
355
+ const quizEntities = [
356
+ QuizEntity,
357
+ QuestionEntity,
358
+ QuestionOptionEntity,
359
+ QuizAttemptEntity,
360
+ SkillAssessmentEntity
361
+ ];
362
+ const quizEnums = [
363
+ QuestionTypeEnum,
364
+ QuizStatusEnum,
365
+ AttemptStatusEnum
366
+ ];
367
+
368
+ //#endregion
369
+ export { AttemptStatusEnum, QuestionEntity, QuestionOptionEntity, QuestionTypeEnum, QuizAttemptEntity, QuizEntity, QuizStatusEnum, SkillAssessmentEntity, quizEntities, quizEnums };
370
+ //# sourceMappingURL=quiz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quiz.js","names":[],"sources":["../../src/entities/quiz.ts"],"sourcesContent":["import {\n defineEntity,\n defineEntityEnum,\n field,\n index,\n} from '@contractspec/lib.schema';\n\n/**\n * Question type enum.\n */\nexport const QuestionTypeEnum = defineEntityEnum({\n name: 'QuestionType',\n values: [\n 'MULTIPLE_CHOICE',\n 'TRUE_FALSE',\n 'FILL_BLANK',\n 'MATCHING',\n 'SHORT_ANSWER',\n 'CODE',\n ] as const,\n schema: 'lssm_learning',\n description: 'Type of quiz question.',\n});\n\n/**\n * Quiz status enum.\n */\nexport const QuizStatusEnum = defineEntityEnum({\n name: 'QuizStatus',\n values: ['DRAFT', 'PUBLISHED', 'ARCHIVED'] as const,\n schema: 'lssm_learning',\n description: 'Publication status of a quiz.',\n});\n\n/**\n * Attempt status enum.\n */\nexport const AttemptStatusEnum = defineEntityEnum({\n name: 'AttemptStatus',\n values: ['IN_PROGRESS', 'COMPLETED', 'TIMED_OUT', 'ABANDONED'] as const,\n schema: 'lssm_learning',\n description: 'Status of a quiz attempt.',\n});\n\n/**\n * Quiz entity - assessment for a lesson.\n */\nexport const QuizEntity = defineEntity({\n name: 'Quiz',\n description: 'A quiz assessment.',\n schema: 'lssm_learning',\n map: 'quiz',\n fields: {\n id: field.id({ description: 'Unique quiz identifier' }),\n lessonId: field.foreignKey({\n isOptional: true,\n description: 'Associated lesson',\n }),\n\n // Basic info\n title: field.string({ description: 'Quiz title' }),\n description: field.string({\n isOptional: true,\n description: 'Quiz description',\n }),\n instructions: field.string({\n isOptional: true,\n description: 'Quiz instructions',\n }),\n\n // Settings\n passingScore: field.int({\n default: 70,\n description: 'Passing score percentage',\n }),\n timeLimit: field.int({\n isOptional: true,\n description: 'Time limit in seconds',\n }),\n maxAttempts: field.int({\n isOptional: true,\n description: 'Maximum attempts allowed',\n }),\n\n // Display options\n shuffleQuestions: field.boolean({\n default: false,\n description: 'Shuffle question order',\n }),\n shuffleOptions: field.boolean({\n default: false,\n description: 'Shuffle answer options',\n }),\n showCorrectAnswers: field.boolean({\n default: true,\n description: 'Show correct answers after',\n }),\n showExplanations: field.boolean({\n default: true,\n description: 'Show explanations after',\n }),\n\n // Status\n status: field.enum('QuizStatus', {\n default: 'DRAFT',\n description: 'Publication status',\n }),\n\n // Scoring\n totalPoints: field.int({\n default: 0,\n description: 'Total points available',\n }),\n\n // XP\n xpReward: field.int({ default: 20, description: 'XP for passing' }),\n\n // Organization scope\n orgId: field.string({\n isOptional: true,\n description: 'Organization scope',\n }),\n\n // Metadata\n metadata: field.json({\n isOptional: true,\n description: 'Additional metadata',\n }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n\n // Relations\n lesson: field.belongsTo('Lesson', ['lessonId'], ['id'], {\n onDelete: 'Cascade',\n }),\n questions: field.hasMany('Question'),\n attempts: field.hasMany('QuizAttempt'),\n },\n indexes: [index.on(['lessonId']), index.on(['status']), index.on(['orgId'])],\n enums: [QuizStatusEnum],\n});\n\n/**\n * Question entity - individual quiz question.\n */\nexport const QuestionEntity = defineEntity({\n name: 'Question',\n description: 'A quiz question.',\n schema: 'lssm_learning',\n map: 'question',\n fields: {\n id: field.id({ description: 'Unique question identifier' }),\n quizId: field.foreignKey({ description: 'Parent quiz' }),\n\n // Question content\n type: field.enum('QuestionType', { description: 'Question type' }),\n content: field.string({ description: 'Question text' }),\n\n // Media\n mediaUrl: field.string({ isOptional: true, description: 'Question media' }),\n\n // Scoring\n points: field.int({ default: 1, description: 'Points for correct answer' }),\n\n // For code questions\n codeLanguage: field.string({\n isOptional: true,\n description: 'Programming language',\n }),\n codeTemplate: field.string({\n isOptional: true,\n description: 'Starter code template',\n }),\n testCases: field.json({\n isOptional: true,\n description: 'Test cases for code validation',\n }),\n\n // Feedback\n explanation: field.string({\n isOptional: true,\n description: 'Explanation of correct answer',\n }),\n hint: field.string({\n isOptional: true,\n description: 'Hint for the question',\n }),\n\n // Ordering\n order: field.int({ default: 0, description: 'Display order' }),\n\n // Skill mapping\n skillId: field.string({\n isOptional: true,\n description: 'Associated skill',\n }),\n\n // Metadata\n metadata: field.json({\n isOptional: true,\n description: 'Additional metadata',\n }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n\n // Relations\n quiz: field.belongsTo('Quiz', ['quizId'], ['id'], { onDelete: 'Cascade' }),\n options: field.hasMany('QuestionOption'),\n },\n indexes: [\n index.on(['quizId', 'order']),\n index.on(['type']),\n index.on(['skillId']),\n ],\n enums: [QuestionTypeEnum],\n});\n\n/**\n * QuestionOption entity - answer option for a question.\n */\nexport const QuestionOptionEntity = defineEntity({\n name: 'QuestionOption',\n description: 'An answer option for a question.',\n schema: 'lssm_learning',\n map: 'question_option',\n fields: {\n id: field.id({ description: 'Unique option identifier' }),\n questionId: field.foreignKey({ description: 'Parent question' }),\n\n // Content\n content: field.string({ description: 'Option text' }),\n\n // For matching questions\n matchContent: field.string({\n isOptional: true,\n description: 'Match pair content',\n }),\n\n // Correctness\n isCorrect: field.boolean({\n default: false,\n description: 'Whether option is correct',\n }),\n\n // Feedback\n feedback: field.string({\n isOptional: true,\n description: 'Feedback when selected',\n }),\n\n // Ordering\n order: field.int({ default: 0, description: 'Display order' }),\n\n // Metadata\n metadata: field.json({\n isOptional: true,\n description: 'Additional metadata',\n }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n\n // Relations\n question: field.belongsTo('Question', ['questionId'], ['id'], {\n onDelete: 'Cascade',\n }),\n },\n indexes: [index.on(['questionId', 'order'])],\n});\n\n/**\n * QuizAttempt entity - a learner's quiz attempt.\n */\nexport const QuizAttemptEntity = defineEntity({\n name: 'QuizAttempt',\n description: 'A learner quiz attempt.',\n schema: 'lssm_learning',\n map: 'quiz_attempt',\n fields: {\n id: field.id({ description: 'Unique attempt identifier' }),\n learnerId: field.foreignKey({ description: 'Learner' }),\n quizId: field.foreignKey({ description: 'Quiz' }),\n\n // Status\n status: field.enum('AttemptStatus', {\n default: 'IN_PROGRESS',\n description: 'Attempt status',\n }),\n\n // Results\n score: field.int({ isOptional: true, description: 'Score achieved' }),\n percentageScore: field.int({\n isOptional: true,\n description: 'Percentage score',\n }),\n passed: field.boolean({ isOptional: true, description: 'Whether passed' }),\n\n // Question tracking\n totalQuestions: field.int({ default: 0, description: 'Total questions' }),\n answeredQuestions: field.int({\n default: 0,\n description: 'Questions answered',\n }),\n correctAnswers: field.int({ default: 0, description: 'Correct answers' }),\n\n // Answers\n answers: field.json({ isOptional: true, description: 'Submitted answers' }),\n\n // XP\n xpEarned: field.int({ default: 0, description: 'XP earned' }),\n\n // Time tracking\n timeSpent: field.int({ default: 0, description: 'Time spent in seconds' }),\n\n // Timeline\n startedAt: field.dateTime({ description: 'When started' }),\n completedAt: field.dateTime({\n isOptional: true,\n description: 'When completed',\n }),\n\n // Attempt number\n attemptNumber: field.int({\n default: 1,\n description: 'Which attempt this is',\n }),\n\n // Metadata\n metadata: field.json({\n isOptional: true,\n description: 'Additional metadata',\n }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n\n // Relations\n learner: field.belongsTo('Learner', ['learnerId'], ['id'], {\n onDelete: 'Cascade',\n }),\n quiz: field.belongsTo('Quiz', ['quizId'], ['id'], { onDelete: 'Cascade' }),\n },\n indexes: [\n index.on(['learnerId', 'quizId']),\n index.on(['learnerId', 'status']),\n index.on(['quizId', 'status']),\n ],\n enums: [AttemptStatusEnum],\n});\n\n/**\n * SkillAssessment entity - maps quiz performance to skills.\n */\nexport const SkillAssessmentEntity = defineEntity({\n name: 'SkillAssessment',\n description: 'Assessment of a skill based on quiz performance.',\n schema: 'lssm_learning',\n map: 'skill_assessment',\n fields: {\n id: field.id({ description: 'Unique assessment identifier' }),\n learnerId: field.foreignKey({ description: 'Learner' }),\n\n // Skill\n skillId: field.string({ description: 'Skill identifier' }),\n skillName: field.string({ description: 'Skill name' }),\n\n // Assessment\n level: field.int({ default: 1, description: 'Proficiency level (1-5)' }),\n score: field.int({ default: 0, description: 'Assessment score (0-100)' }),\n confidence: field.decimal({\n default: 0.5,\n description: 'Confidence in assessment',\n }),\n\n // Stats\n questionsAnswered: field.int({\n default: 0,\n description: 'Total questions answered',\n }),\n questionsCorrect: field.int({ default: 0, description: 'Total correct' }),\n\n // Timestamps\n assessedAt: field.dateTime({ description: 'Last assessment time' }),\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n\n // Relations\n learner: field.belongsTo('Learner', ['learnerId'], ['id'], {\n onDelete: 'Cascade',\n }),\n },\n indexes: [\n index.unique(['learnerId', 'skillId'], { name: 'skill_assessment_unique' }),\n index.on(['learnerId', 'level']),\n index.on(['skillId']),\n ],\n});\n\nexport const quizEntities = [\n QuizEntity,\n QuestionEntity,\n QuestionOptionEntity,\n QuizAttemptEntity,\n SkillAssessmentEntity,\n];\n\nexport const quizEnums = [QuestionTypeEnum, QuizStatusEnum, AttemptStatusEnum];\n"],"mappings":"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"}