@lssm/module.learning-journey 0.0.0-canary-20251217083314 → 1.41.1

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 (167) hide show
  1. package/dist/contracts/index.js +1 -6
  2. package/dist/contracts/models.js +1 -389
  3. package/dist/contracts/onboarding.js +1 -404
  4. package/dist/contracts/operations.js +1 -151
  5. package/dist/contracts/shared.js +1 -5
  6. package/dist/docs/index.js +1 -1
  7. package/dist/docs/learning-journey.docblock.js +5 -61
  8. package/dist/engines/index.js +1 -5
  9. package/dist/engines/srs.js +1 -219
  10. package/dist/engines/streak.js +1 -193
  11. package/dist/engines/xp.js +1 -212
  12. package/dist/entities/ai.js +1 -376
  13. package/dist/entities/course.js +1 -316
  14. package/dist/entities/flashcard.js +1 -249
  15. package/dist/entities/gamification.js +1 -392
  16. package/dist/entities/index.js +1 -44
  17. package/dist/entities/learner.js +1 -365
  18. package/dist/entities/onboarding.js +1 -307
  19. package/dist/entities/quiz.js +1 -370
  20. package/dist/events.js +1 -583
  21. package/dist/index.js +1 -22
  22. package/dist/learning-journey.feature.js +1 -148
  23. package/package.json +28 -28
  24. package/dist/contracts/index.d.ts +0 -5
  25. package/dist/contracts/models.d.ts +0 -450
  26. package/dist/contracts/onboarding.d.ts +0 -665
  27. package/dist/contracts/operations.d.ts +0 -279
  28. package/dist/contracts/shared.d.ts +0 -4
  29. package/dist/docs/index.d.ts +0 -1
  30. package/dist/docs/learning-journey.docblock.d.ts +0 -1
  31. package/dist/engines/index.d.ts +0 -4
  32. package/dist/engines/srs.d.ts +0 -110
  33. package/dist/engines/streak.d.ts +0 -99
  34. package/dist/engines/xp.d.ts +0 -96
  35. package/dist/entities/ai.d.ts +0 -231
  36. package/dist/entities/course.d.ts +0 -183
  37. package/dist/entities/flashcard.d.ts +0 -169
  38. package/dist/entities/gamification.d.ts +0 -237
  39. package/dist/entities/index.d.ts +0 -628
  40. package/dist/entities/learner.d.ts +0 -223
  41. package/dist/entities/onboarding.d.ts +0 -189
  42. package/dist/entities/quiz.d.ts +0 -219
  43. package/dist/events.d.ts +0 -795
  44. package/dist/index.d.ts +0 -19
  45. package/dist/learning-journey.feature.d.ts +0 -11
  46. package/dist/libs/contracts/dist/capabilities/openbanking.js +0 -88
  47. package/dist/libs/contracts/dist/client/index.js +0 -5
  48. package/dist/libs/contracts/dist/client/react/feature-render.js +0 -2
  49. package/dist/libs/contracts/dist/client/react/form-render.js +0 -4
  50. package/dist/libs/contracts/dist/client/react/index.js +0 -4
  51. package/dist/libs/contracts/dist/contract-registry/index.js +0 -1
  52. package/dist/libs/contracts/dist/contract-registry/schemas.js +0 -60
  53. package/dist/libs/contracts/dist/docs/PUBLISHING.docblock.js +0 -16
  54. package/dist/libs/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +0 -16
  55. package/dist/libs/contracts/dist/docs/index.js +0 -29
  56. package/dist/libs/contracts/dist/docs/presentations.js +0 -71
  57. package/dist/libs/contracts/dist/docs/registry.js +0 -44
  58. package/dist/libs/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +0 -16
  59. package/dist/libs/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +0 -16
  60. package/dist/libs/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +0 -16
  61. package/dist/libs/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +0 -16
  62. package/dist/libs/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +0 -16
  63. package/dist/libs/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js +0 -80
  64. package/dist/libs/contracts/dist/docs/tech/contracts/openapi-export.docblock.js +0 -57
  65. package/dist/libs/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +0 -16
  66. package/dist/libs/contracts/dist/docs/tech/llm/llm-integration.docblock.js +0 -357
  67. package/dist/libs/contracts/dist/docs/tech/mcp-endpoints.docblock.js +0 -37
  68. package/dist/libs/contracts/dist/docs/tech/presentation-runtime.docblock.js +0 -16
  69. package/dist/libs/contracts/dist/docs/tech/schema/README.docblock.js +0 -20
  70. package/dist/libs/contracts/dist/docs/tech/studio/learning-events.docblock.js +0 -48
  71. package/dist/libs/contracts/dist/docs/tech/studio/learning-journeys.docblock.js +0 -79
  72. package/dist/libs/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js +0 -84
  73. package/dist/libs/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +0 -45
  74. package/dist/libs/contracts/dist/docs/tech/studio/project-routing.docblock.js +0 -67
  75. package/dist/libs/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +0 -40
  76. package/dist/libs/contracts/dist/docs/tech/studio/team-invitations.docblock.js +0 -69
  77. package/dist/libs/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +0 -47
  78. package/dist/libs/contracts/dist/docs/tech/studio/workspaces.docblock.js +0 -62
  79. package/dist/libs/contracts/dist/docs/tech/telemetry-ingest.docblock.js +0 -155
  80. package/dist/libs/contracts/dist/docs/tech/templates/runtime.docblock.js +0 -20
  81. package/dist/libs/contracts/dist/docs/tech/vscode-extension.docblock.js +0 -101
  82. package/dist/libs/contracts/dist/docs/tech/workflows/overview.docblock.js +0 -20
  83. package/dist/libs/contracts/dist/events.js +0 -10
  84. package/dist/libs/contracts/dist/experiments/evaluator.js +0 -1
  85. package/dist/libs/contracts/dist/index.js +0 -71
  86. package/dist/libs/contracts/dist/install.js +0 -2
  87. package/dist/libs/contracts/dist/integrations/contracts.js +0 -377
  88. package/dist/libs/contracts/dist/integrations/index.js +0 -18
  89. package/dist/libs/contracts/dist/integrations/openbanking/contracts/accounts.js +0 -228
  90. package/dist/libs/contracts/dist/integrations/openbanking/contracts/balances.js +0 -159
  91. package/dist/libs/contracts/dist/integrations/openbanking/contracts/index.js +0 -3
  92. package/dist/libs/contracts/dist/integrations/openbanking/contracts/transactions.js +0 -210
  93. package/dist/libs/contracts/dist/integrations/openbanking/models.js +0 -242
  94. package/dist/libs/contracts/dist/integrations/openbanking/telemetry.js +0 -13
  95. package/dist/libs/contracts/dist/integrations/providers/elevenlabs.js +0 -52
  96. package/dist/libs/contracts/dist/integrations/providers/gcs-storage.js +0 -75
  97. package/dist/libs/contracts/dist/integrations/providers/gmail.js +0 -87
  98. package/dist/libs/contracts/dist/integrations/providers/google-calendar.js +0 -66
  99. package/dist/libs/contracts/dist/integrations/providers/index.js +0 -11
  100. package/dist/libs/contracts/dist/integrations/providers/mistral.js +0 -68
  101. package/dist/libs/contracts/dist/integrations/providers/postmark.js +0 -68
  102. package/dist/libs/contracts/dist/integrations/providers/powens.js +0 -116
  103. package/dist/libs/contracts/dist/integrations/providers/qdrant.js +0 -73
  104. package/dist/libs/contracts/dist/integrations/providers/registry.js +0 -10
  105. package/dist/libs/contracts/dist/integrations/providers/stripe.js +0 -83
  106. package/dist/libs/contracts/dist/integrations/providers/twilio-sms.js +0 -61
  107. package/dist/libs/contracts/dist/jsonschema.js +0 -1
  108. package/dist/libs/contracts/dist/knowledge/contracts.js +0 -306
  109. package/dist/libs/contracts/dist/knowledge/index.js +0 -7
  110. package/dist/libs/contracts/dist/knowledge/spaces/email-threads.js +0 -34
  111. package/dist/libs/contracts/dist/knowledge/spaces/financial-docs.js +0 -34
  112. package/dist/libs/contracts/dist/knowledge/spaces/financial-overview.js +0 -38
  113. package/dist/libs/contracts/dist/knowledge/spaces/index.js +0 -6
  114. package/dist/libs/contracts/dist/knowledge/spaces/product-canon.js +0 -34
  115. package/dist/libs/contracts/dist/knowledge/spaces/support-faq.js +0 -37
  116. package/dist/libs/contracts/dist/knowledge/spaces/uploaded-docs.js +0 -34
  117. package/dist/libs/contracts/dist/llm/exporters.js +0 -19
  118. package/dist/libs/contracts/dist/llm/index.js +0 -2
  119. package/dist/libs/contracts/dist/llm/prompts.js +0 -1
  120. package/dist/libs/contracts/dist/onboarding-base.js +0 -196
  121. package/dist/libs/contracts/dist/openapi.js +0 -1
  122. package/dist/libs/contracts/dist/ownership.js +0 -21
  123. package/dist/libs/contracts/dist/presentations.js +0 -1
  124. package/dist/libs/contracts/dist/presentations.v2.js +0 -11
  125. package/dist/libs/contracts/dist/prompt.js +0 -1
  126. package/dist/libs/contracts/dist/promptRegistry.js +0 -1
  127. package/dist/libs/contracts/dist/regenerator/index.js +0 -1
  128. package/dist/libs/contracts/dist/regenerator/service.js +0 -6
  129. package/dist/libs/contracts/dist/registry.js +0 -2
  130. package/dist/libs/contracts/dist/resources.js +0 -1
  131. package/dist/libs/contracts/dist/schema/dist/EnumType.js +0 -2
  132. package/dist/libs/contracts/dist/schema/dist/FieldType.js +0 -49
  133. package/dist/libs/contracts/dist/schema/dist/ScalarTypeEnum.js +0 -236
  134. package/dist/libs/contracts/dist/schema/dist/SchemaModel.js +0 -34
  135. package/dist/libs/contracts/dist/schema/dist/entity/defineEntity.js +0 -1
  136. package/dist/libs/contracts/dist/schema/dist/entity/index.js +0 -2
  137. package/dist/libs/contracts/dist/schema/dist/entity/types.js +0 -1
  138. package/dist/libs/contracts/dist/schema/dist/index.js +0 -6
  139. package/dist/libs/contracts/dist/server/graphql-pothos.js +0 -6
  140. package/dist/libs/contracts/dist/server/index.js +0 -8
  141. package/dist/libs/contracts/dist/server/mcp/createMcpServer.js +0 -4
  142. package/dist/libs/contracts/dist/server/mcp/registerPresentations.js +0 -2
  143. package/dist/libs/contracts/dist/server/mcp/registerPrompts.js +0 -1
  144. package/dist/libs/contracts/dist/server/mcp/registerResources.js +0 -2
  145. package/dist/libs/contracts/dist/server/mcp/registerTools.js +0 -1
  146. package/dist/libs/contracts/dist/server/provider-mcp.js +0 -1
  147. package/dist/libs/contracts/dist/server/rest-elysia.js +0 -1
  148. package/dist/libs/contracts/dist/server/rest-express.js +0 -1
  149. package/dist/libs/contracts/dist/server/rest-generic.js +0 -1
  150. package/dist/libs/contracts/dist/server/rest-next-app.js +0 -1
  151. package/dist/libs/contracts/dist/server/rest-next-pages.js +0 -1
  152. package/dist/libs/contracts/dist/spec.js +0 -34
  153. package/dist/libs/contracts/dist/telemetry/index.js +0 -1
  154. package/dist/libs/contracts/dist/telemetry/tracker.js +0 -1
  155. package/dist/libs/contracts/dist/tests/index.js +0 -1
  156. package/dist/libs/contracts/dist/tests/runner.js +0 -2
  157. package/dist/libs/contracts/dist/workflow/index.js +0 -1
  158. package/dist/libs/contracts/dist/workflow/runner.js +0 -1
  159. package/dist/libs/schema/dist/EnumType.js +0 -2
  160. package/dist/libs/schema/dist/FieldType.js +0 -49
  161. package/dist/libs/schema/dist/ScalarTypeEnum.js +0 -236
  162. package/dist/libs/schema/dist/SchemaModel.js +0 -39
  163. package/dist/libs/schema/dist/entity/defineEntity.js +0 -236
  164. package/dist/libs/schema/dist/entity/index.js +0 -2
  165. package/dist/libs/schema/dist/entity/types.js +0 -1
  166. package/dist/libs/schema/dist/index.js +0 -6
  167. package/dist/track-spec.d.ts +0 -128
@@ -1,370 +1 @@
1
- import { defineEntity, defineEntityEnum, field, index } from "../libs/schema/dist/entity/defineEntity.js";
2
- import "../libs/schema/dist/index.js";
3
-
4
- //#region src/entities/quiz.ts
5
- /**
6
- * Question type enum.
7
- */
8
- const QuestionTypeEnum = defineEntityEnum({
9
- name: "QuestionType",
10
- values: [
11
- "MULTIPLE_CHOICE",
12
- "TRUE_FALSE",
13
- "FILL_BLANK",
14
- "MATCHING",
15
- "SHORT_ANSWER",
16
- "CODE"
17
- ],
18
- schema: "lssm_learning",
19
- description: "Type of quiz question."
20
- });
21
- /**
22
- * Quiz status enum.
23
- */
24
- const QuizStatusEnum = defineEntityEnum({
25
- name: "QuizStatus",
26
- values: [
27
- "DRAFT",
28
- "PUBLISHED",
29
- "ARCHIVED"
30
- ],
31
- schema: "lssm_learning",
32
- description: "Publication status of a quiz."
33
- });
34
- /**
35
- * Attempt status enum.
36
- */
37
- const AttemptStatusEnum = defineEntityEnum({
38
- name: "AttemptStatus",
39
- values: [
40
- "IN_PROGRESS",
41
- "COMPLETED",
42
- "TIMED_OUT",
43
- "ABANDONED"
44
- ],
45
- schema: "lssm_learning",
46
- description: "Status of a quiz attempt."
47
- });
48
- /**
49
- * Quiz entity - assessment for a lesson.
50
- */
51
- const QuizEntity = defineEntity({
52
- name: "Quiz",
53
- description: "A quiz assessment.",
54
- schema: "lssm_learning",
55
- map: "quiz",
56
- fields: {
57
- id: field.id({ description: "Unique quiz identifier" }),
58
- lessonId: field.foreignKey({
59
- isOptional: true,
60
- description: "Associated lesson"
61
- }),
62
- title: field.string({ description: "Quiz title" }),
63
- description: field.string({
64
- isOptional: true,
65
- description: "Quiz description"
66
- }),
67
- instructions: field.string({
68
- isOptional: true,
69
- description: "Quiz instructions"
70
- }),
71
- passingScore: field.int({
72
- default: 70,
73
- description: "Passing score percentage"
74
- }),
75
- timeLimit: field.int({
76
- isOptional: true,
77
- description: "Time limit in seconds"
78
- }),
79
- maxAttempts: field.int({
80
- isOptional: true,
81
- description: "Maximum attempts allowed"
82
- }),
83
- shuffleQuestions: field.boolean({
84
- default: false,
85
- description: "Shuffle question order"
86
- }),
87
- shuffleOptions: field.boolean({
88
- default: false,
89
- description: "Shuffle answer options"
90
- }),
91
- showCorrectAnswers: field.boolean({
92
- default: true,
93
- description: "Show correct answers after"
94
- }),
95
- showExplanations: field.boolean({
96
- default: true,
97
- description: "Show explanations after"
98
- }),
99
- status: field.enum("QuizStatus", {
100
- default: "DRAFT",
101
- description: "Publication status"
102
- }),
103
- totalPoints: field.int({
104
- default: 0,
105
- description: "Total points available"
106
- }),
107
- xpReward: field.int({
108
- default: 20,
109
- description: "XP for passing"
110
- }),
111
- orgId: field.string({
112
- isOptional: true,
113
- description: "Organization scope"
114
- }),
115
- metadata: field.json({
116
- isOptional: true,
117
- description: "Additional metadata"
118
- }),
119
- createdAt: field.createdAt(),
120
- updatedAt: field.updatedAt(),
121
- lesson: field.belongsTo("Lesson", ["lessonId"], ["id"], { onDelete: "Cascade" }),
122
- questions: field.hasMany("Question"),
123
- attempts: field.hasMany("QuizAttempt")
124
- },
125
- indexes: [
126
- index.on(["lessonId"]),
127
- index.on(["status"]),
128
- index.on(["orgId"])
129
- ],
130
- enums: [QuizStatusEnum]
131
- });
132
- /**
133
- * Question entity - individual quiz question.
134
- */
135
- const QuestionEntity = defineEntity({
136
- name: "Question",
137
- description: "A quiz question.",
138
- schema: "lssm_learning",
139
- map: "question",
140
- fields: {
141
- id: field.id({ description: "Unique question identifier" }),
142
- quizId: field.foreignKey({ description: "Parent quiz" }),
143
- type: field.enum("QuestionType", { description: "Question type" }),
144
- content: field.string({ description: "Question text" }),
145
- mediaUrl: field.string({
146
- isOptional: true,
147
- description: "Question media"
148
- }),
149
- points: field.int({
150
- default: 1,
151
- description: "Points for correct answer"
152
- }),
153
- codeLanguage: field.string({
154
- isOptional: true,
155
- description: "Programming language"
156
- }),
157
- codeTemplate: field.string({
158
- isOptional: true,
159
- description: "Starter code template"
160
- }),
161
- testCases: field.json({
162
- isOptional: true,
163
- description: "Test cases for code validation"
164
- }),
165
- explanation: field.string({
166
- isOptional: true,
167
- description: "Explanation of correct answer"
168
- }),
169
- hint: field.string({
170
- isOptional: true,
171
- description: "Hint for the question"
172
- }),
173
- order: field.int({
174
- default: 0,
175
- description: "Display order"
176
- }),
177
- skillId: field.string({
178
- isOptional: true,
179
- description: "Associated skill"
180
- }),
181
- metadata: field.json({
182
- isOptional: true,
183
- description: "Additional metadata"
184
- }),
185
- createdAt: field.createdAt(),
186
- updatedAt: field.updatedAt(),
187
- quiz: field.belongsTo("Quiz", ["quizId"], ["id"], { onDelete: "Cascade" }),
188
- options: field.hasMany("QuestionOption")
189
- },
190
- indexes: [
191
- index.on(["quizId", "order"]),
192
- index.on(["type"]),
193
- index.on(["skillId"])
194
- ],
195
- enums: [QuestionTypeEnum]
196
- });
197
- /**
198
- * QuestionOption entity - answer option for a question.
199
- */
200
- const QuestionOptionEntity = defineEntity({
201
- name: "QuestionOption",
202
- description: "An answer option for a question.",
203
- schema: "lssm_learning",
204
- map: "question_option",
205
- fields: {
206
- id: field.id({ description: "Unique option identifier" }),
207
- questionId: field.foreignKey({ description: "Parent question" }),
208
- content: field.string({ description: "Option text" }),
209
- matchContent: field.string({
210
- isOptional: true,
211
- description: "Match pair content"
212
- }),
213
- isCorrect: field.boolean({
214
- default: false,
215
- description: "Whether option is correct"
216
- }),
217
- feedback: field.string({
218
- isOptional: true,
219
- description: "Feedback when selected"
220
- }),
221
- order: field.int({
222
- default: 0,
223
- description: "Display order"
224
- }),
225
- metadata: field.json({
226
- isOptional: true,
227
- description: "Additional metadata"
228
- }),
229
- createdAt: field.createdAt(),
230
- updatedAt: field.updatedAt(),
231
- question: field.belongsTo("Question", ["questionId"], ["id"], { onDelete: "Cascade" })
232
- },
233
- indexes: [index.on(["questionId", "order"])]
234
- });
235
- /**
236
- * QuizAttempt entity - a learner's quiz attempt.
237
- */
238
- const QuizAttemptEntity = defineEntity({
239
- name: "QuizAttempt",
240
- description: "A learner quiz attempt.",
241
- schema: "lssm_learning",
242
- map: "quiz_attempt",
243
- fields: {
244
- id: field.id({ description: "Unique attempt identifier" }),
245
- learnerId: field.foreignKey({ description: "Learner" }),
246
- quizId: field.foreignKey({ description: "Quiz" }),
247
- status: field.enum("AttemptStatus", {
248
- default: "IN_PROGRESS",
249
- description: "Attempt status"
250
- }),
251
- score: field.int({
252
- isOptional: true,
253
- description: "Score achieved"
254
- }),
255
- percentageScore: field.int({
256
- isOptional: true,
257
- description: "Percentage score"
258
- }),
259
- passed: field.boolean({
260
- isOptional: true,
261
- description: "Whether passed"
262
- }),
263
- totalQuestions: field.int({
264
- default: 0,
265
- description: "Total questions"
266
- }),
267
- answeredQuestions: field.int({
268
- default: 0,
269
- description: "Questions answered"
270
- }),
271
- correctAnswers: field.int({
272
- default: 0,
273
- description: "Correct answers"
274
- }),
275
- answers: field.json({
276
- isOptional: true,
277
- description: "Submitted answers"
278
- }),
279
- xpEarned: field.int({
280
- default: 0,
281
- description: "XP earned"
282
- }),
283
- timeSpent: field.int({
284
- default: 0,
285
- description: "Time spent in seconds"
286
- }),
287
- startedAt: field.dateTime({ description: "When started" }),
288
- completedAt: field.dateTime({
289
- isOptional: true,
290
- description: "When completed"
291
- }),
292
- attemptNumber: field.int({
293
- default: 1,
294
- description: "Which attempt this is"
295
- }),
296
- metadata: field.json({
297
- isOptional: true,
298
- description: "Additional metadata"
299
- }),
300
- createdAt: field.createdAt(),
301
- updatedAt: field.updatedAt(),
302
- learner: field.belongsTo("Learner", ["learnerId"], ["id"], { onDelete: "Cascade" }),
303
- quiz: field.belongsTo("Quiz", ["quizId"], ["id"], { onDelete: "Cascade" })
304
- },
305
- indexes: [
306
- index.on(["learnerId", "quizId"]),
307
- index.on(["learnerId", "status"]),
308
- index.on(["quizId", "status"])
309
- ],
310
- enums: [AttemptStatusEnum]
311
- });
312
- /**
313
- * SkillAssessment entity - maps quiz performance to skills.
314
- */
315
- const SkillAssessmentEntity = defineEntity({
316
- name: "SkillAssessment",
317
- description: "Assessment of a skill based on quiz performance.",
318
- schema: "lssm_learning",
319
- map: "skill_assessment",
320
- fields: {
321
- id: field.id({ description: "Unique assessment identifier" }),
322
- learnerId: field.foreignKey({ description: "Learner" }),
323
- skillId: field.string({ description: "Skill identifier" }),
324
- skillName: field.string({ description: "Skill name" }),
325
- level: field.int({
326
- default: 1,
327
- description: "Proficiency level (1-5)"
328
- }),
329
- score: field.int({
330
- default: 0,
331
- description: "Assessment score (0-100)"
332
- }),
333
- confidence: field.decimal({
334
- default: .5,
335
- description: "Confidence in assessment"
336
- }),
337
- questionsAnswered: field.int({
338
- default: 0,
339
- description: "Total questions answered"
340
- }),
341
- questionsCorrect: field.int({
342
- default: 0,
343
- description: "Total correct"
344
- }),
345
- assessedAt: field.dateTime({ description: "Last assessment time" }),
346
- createdAt: field.createdAt(),
347
- updatedAt: field.updatedAt(),
348
- learner: field.belongsTo("Learner", ["learnerId"], ["id"], { onDelete: "Cascade" })
349
- },
350
- indexes: [
351
- index.unique(["learnerId", "skillId"], { name: "skill_assessment_unique" }),
352
- index.on(["learnerId", "level"]),
353
- index.on(["skillId"])
354
- ]
355
- });
356
- const quizEntities = [
357
- QuizEntity,
358
- QuestionEntity,
359
- QuestionOptionEntity,
360
- QuizAttemptEntity,
361
- SkillAssessmentEntity
362
- ];
363
- const quizEnums = [
364
- QuestionTypeEnum,
365
- QuizStatusEnum,
366
- AttemptStatusEnum
367
- ];
368
-
369
- //#endregion
370
- export { AttemptStatusEnum, QuestionEntity, QuestionOptionEntity, QuestionTypeEnum, QuizAttemptEntity, QuizEntity, QuizStatusEnum, SkillAssessmentEntity, quizEntities, quizEnums };
1
+ import{defineEntity as e,defineEntityEnum as t,field as n,index as r}from"@lssm/lib.schema";const i=t({name:`QuestionType`,values:[`MULTIPLE_CHOICE`,`TRUE_FALSE`,`FILL_BLANK`,`MATCHING`,`SHORT_ANSWER`,`CODE`],schema:`lssm_learning`,description:`Type of quiz question.`}),a=t({name:`QuizStatus`,values:[`DRAFT`,`PUBLISHED`,`ARCHIVED`],schema:`lssm_learning`,description:`Publication status of a quiz.`}),o=t({name:`AttemptStatus`,values:[`IN_PROGRESS`,`COMPLETED`,`TIMED_OUT`,`ABANDONED`],schema:`lssm_learning`,description:`Status of a quiz attempt.`}),s=e({name:`Quiz`,description:`A quiz assessment.`,schema:`lssm_learning`,map:`quiz`,fields:{id:n.id({description:`Unique quiz identifier`}),lessonId:n.foreignKey({isOptional:!0,description:`Associated lesson`}),title:n.string({description:`Quiz title`}),description:n.string({isOptional:!0,description:`Quiz description`}),instructions:n.string({isOptional:!0,description:`Quiz instructions`}),passingScore:n.int({default:70,description:`Passing score percentage`}),timeLimit:n.int({isOptional:!0,description:`Time limit in seconds`}),maxAttempts:n.int({isOptional:!0,description:`Maximum attempts allowed`}),shuffleQuestions:n.boolean({default:!1,description:`Shuffle question order`}),shuffleOptions:n.boolean({default:!1,description:`Shuffle answer options`}),showCorrectAnswers:n.boolean({default:!0,description:`Show correct answers after`}),showExplanations:n.boolean({default:!0,description:`Show explanations after`}),status:n.enum(`QuizStatus`,{default:`DRAFT`,description:`Publication status`}),totalPoints:n.int({default:0,description:`Total points available`}),xpReward:n.int({default:20,description:`XP for passing`}),orgId:n.string({isOptional:!0,description:`Organization scope`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),lesson:n.belongsTo(`Lesson`,[`lessonId`],[`id`],{onDelete:`Cascade`}),questions:n.hasMany(`Question`),attempts:n.hasMany(`QuizAttempt`)},indexes:[r.on([`lessonId`]),r.on([`status`]),r.on([`orgId`])],enums:[a]}),c=e({name:`Question`,description:`A quiz question.`,schema:`lssm_learning`,map:`question`,fields:{id:n.id({description:`Unique question identifier`}),quizId:n.foreignKey({description:`Parent quiz`}),type:n.enum(`QuestionType`,{description:`Question type`}),content:n.string({description:`Question text`}),mediaUrl:n.string({isOptional:!0,description:`Question media`}),points:n.int({default:1,description:`Points for correct answer`}),codeLanguage:n.string({isOptional:!0,description:`Programming language`}),codeTemplate:n.string({isOptional:!0,description:`Starter code template`}),testCases:n.json({isOptional:!0,description:`Test cases for code validation`}),explanation:n.string({isOptional:!0,description:`Explanation of correct answer`}),hint:n.string({isOptional:!0,description:`Hint for the question`}),order:n.int({default:0,description:`Display order`}),skillId:n.string({isOptional:!0,description:`Associated skill`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),quiz:n.belongsTo(`Quiz`,[`quizId`],[`id`],{onDelete:`Cascade`}),options:n.hasMany(`QuestionOption`)},indexes:[r.on([`quizId`,`order`]),r.on([`type`]),r.on([`skillId`])],enums:[i]}),l=e({name:`QuestionOption`,description:`An answer option for a question.`,schema:`lssm_learning`,map:`question_option`,fields:{id:n.id({description:`Unique option identifier`}),questionId:n.foreignKey({description:`Parent question`}),content:n.string({description:`Option text`}),matchContent:n.string({isOptional:!0,description:`Match pair content`}),isCorrect:n.boolean({default:!1,description:`Whether option is correct`}),feedback:n.string({isOptional:!0,description:`Feedback when selected`}),order:n.int({default:0,description:`Display order`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),question:n.belongsTo(`Question`,[`questionId`],[`id`],{onDelete:`Cascade`})},indexes:[r.on([`questionId`,`order`])]}),u=e({name:`QuizAttempt`,description:`A learner quiz attempt.`,schema:`lssm_learning`,map:`quiz_attempt`,fields:{id:n.id({description:`Unique attempt identifier`}),learnerId:n.foreignKey({description:`Learner`}),quizId:n.foreignKey({description:`Quiz`}),status:n.enum(`AttemptStatus`,{default:`IN_PROGRESS`,description:`Attempt status`}),score:n.int({isOptional:!0,description:`Score achieved`}),percentageScore:n.int({isOptional:!0,description:`Percentage score`}),passed:n.boolean({isOptional:!0,description:`Whether passed`}),totalQuestions:n.int({default:0,description:`Total questions`}),answeredQuestions:n.int({default:0,description:`Questions answered`}),correctAnswers:n.int({default:0,description:`Correct answers`}),answers:n.json({isOptional:!0,description:`Submitted answers`}),xpEarned:n.int({default:0,description:`XP earned`}),timeSpent:n.int({default:0,description:`Time spent in seconds`}),startedAt:n.dateTime({description:`When started`}),completedAt:n.dateTime({isOptional:!0,description:`When completed`}),attemptNumber:n.int({default:1,description:`Which attempt this is`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),learner:n.belongsTo(`Learner`,[`learnerId`],[`id`],{onDelete:`Cascade`}),quiz:n.belongsTo(`Quiz`,[`quizId`],[`id`],{onDelete:`Cascade`})},indexes:[r.on([`learnerId`,`quizId`]),r.on([`learnerId`,`status`]),r.on([`quizId`,`status`])],enums:[o]}),d=e({name:`SkillAssessment`,description:`Assessment of a skill based on quiz performance.`,schema:`lssm_learning`,map:`skill_assessment`,fields:{id:n.id({description:`Unique assessment identifier`}),learnerId:n.foreignKey({description:`Learner`}),skillId:n.string({description:`Skill identifier`}),skillName:n.string({description:`Skill name`}),level:n.int({default:1,description:`Proficiency level (1-5)`}),score:n.int({default:0,description:`Assessment score (0-100)`}),confidence:n.decimal({default:.5,description:`Confidence in assessment`}),questionsAnswered:n.int({default:0,description:`Total questions answered`}),questionsCorrect:n.int({default:0,description:`Total correct`}),assessedAt:n.dateTime({description:`Last assessment time`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),learner:n.belongsTo(`Learner`,[`learnerId`],[`id`],{onDelete:`Cascade`})},indexes:[r.unique([`learnerId`,`skillId`],{name:`skill_assessment_unique`}),r.on([`learnerId`,`level`]),r.on([`skillId`])]}),f=[s,c,l,u,d],p=[i,a,o];export{o as AttemptStatusEnum,c as QuestionEntity,l as QuestionOptionEntity,i as QuestionTypeEnum,u as QuizAttemptEntity,s as QuizEntity,a as QuizStatusEnum,d as SkillAssessmentEntity,f as quizEntities,p as quizEnums};