@lssm/module.learning-journey 0.0.0-canary-20251217080011 → 1.41.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 (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 -29
  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,316 +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/course.ts
5
- /**
6
- * Course difficulty enum.
7
- */
8
- const CourseDifficultyEnum = defineEntityEnum({
9
- name: "CourseDifficulty",
10
- values: [
11
- "BEGINNER",
12
- "INTERMEDIATE",
13
- "ADVANCED",
14
- "EXPERT"
15
- ],
16
- schema: "lssm_learning",
17
- description: "Difficulty level of a course."
18
- });
19
- /**
20
- * Course status enum.
21
- */
22
- const CourseStatusEnum = defineEntityEnum({
23
- name: "CourseStatus",
24
- values: [
25
- "DRAFT",
26
- "PUBLISHED",
27
- "ARCHIVED"
28
- ],
29
- schema: "lssm_learning",
30
- description: "Publication status of a course."
31
- });
32
- /**
33
- * Lesson type enum.
34
- */
35
- const LessonTypeEnum = defineEntityEnum({
36
- name: "LessonType",
37
- values: [
38
- "CONTENT",
39
- "VIDEO",
40
- "INTERACTIVE",
41
- "QUIZ",
42
- "PRACTICE",
43
- "PROJECT"
44
- ],
45
- schema: "lssm_learning",
46
- description: "Type of lesson content."
47
- });
48
- /**
49
- * Content type enum.
50
- */
51
- const ContentTypeEnum = defineEntityEnum({
52
- name: "ContentType",
53
- values: [
54
- "MARKDOWN",
55
- "VIDEO",
56
- "AUDIO",
57
- "EMBED",
58
- "SCORM",
59
- "CUSTOM"
60
- ],
61
- schema: "lssm_learning",
62
- description: "Type of lesson content format."
63
- });
64
- /**
65
- * Course entity - defines a learning course.
66
- */
67
- const CourseEntity = defineEntity({
68
- name: "Course",
69
- description: "A structured learning course.",
70
- schema: "lssm_learning",
71
- map: "course",
72
- fields: {
73
- id: field.id({ description: "Unique course identifier" }),
74
- title: field.string({ description: "Course title" }),
75
- slug: field.string({
76
- isUnique: true,
77
- description: "URL-friendly slug"
78
- }),
79
- description: field.string({
80
- isOptional: true,
81
- description: "Course description"
82
- }),
83
- summary: field.string({
84
- isOptional: true,
85
- description: "Short summary"
86
- }),
87
- difficulty: field.enum("CourseDifficulty", {
88
- default: "BEGINNER",
89
- description: "Difficulty level"
90
- }),
91
- category: field.string({
92
- isOptional: true,
93
- description: "Course category"
94
- }),
95
- tags: field.json({
96
- isOptional: true,
97
- description: "Tags for discovery"
98
- }),
99
- prerequisites: field.json({
100
- isOptional: true,
101
- description: "Required course IDs"
102
- }),
103
- requiredSkills: field.json({
104
- isOptional: true,
105
- description: "Required skill levels"
106
- }),
107
- estimatedDuration: field.int({
108
- isOptional: true,
109
- description: "Estimated duration in minutes"
110
- }),
111
- thumbnailUrl: field.string({
112
- isOptional: true,
113
- description: "Thumbnail image URL"
114
- }),
115
- coverImageUrl: field.string({
116
- isOptional: true,
117
- description: "Cover image URL"
118
- }),
119
- promoVideoUrl: field.string({
120
- isOptional: true,
121
- description: "Promo video URL"
122
- }),
123
- status: field.enum("CourseStatus", {
124
- default: "DRAFT",
125
- description: "Publication status"
126
- }),
127
- publishedAt: field.dateTime({
128
- isOptional: true,
129
- description: "When published"
130
- }),
131
- authorId: field.string({ description: "Author user ID" }),
132
- orgId: field.string({
133
- isOptional: true,
134
- description: "Organization scope"
135
- }),
136
- isPublic: field.boolean({
137
- default: false,
138
- description: "Whether course is publicly accessible"
139
- }),
140
- isFeatured: field.boolean({
141
- default: false,
142
- description: "Whether course is featured"
143
- }),
144
- certificateEnabled: field.boolean({
145
- default: false,
146
- description: "Award certificate on completion"
147
- }),
148
- metadata: field.json({
149
- isOptional: true,
150
- description: "Additional metadata"
151
- }),
152
- createdAt: field.createdAt(),
153
- updatedAt: field.updatedAt(),
154
- modules: field.hasMany("CourseModule"),
155
- enrollments: field.hasMany("Enrollment")
156
- },
157
- indexes: [
158
- index.on(["orgId", "status"]),
159
- index.on(["category"]),
160
- index.on(["difficulty"]),
161
- index.on(["authorId"])
162
- ],
163
- enums: [CourseDifficultyEnum, CourseStatusEnum]
164
- });
165
- /**
166
- * CourseModule entity - a section within a course.
167
- */
168
- const CourseModuleEntity = defineEntity({
169
- name: "CourseModule",
170
- description: "A module (section) within a course.",
171
- schema: "lssm_learning",
172
- map: "course_module",
173
- fields: {
174
- id: field.id({ description: "Unique module identifier" }),
175
- courseId: field.foreignKey({ description: "Parent course" }),
176
- title: field.string({ description: "Module title" }),
177
- description: field.string({
178
- isOptional: true,
179
- description: "Module description"
180
- }),
181
- order: field.int({
182
- default: 0,
183
- description: "Display order"
184
- }),
185
- unlockCondition: field.json({
186
- isOptional: true,
187
- description: "Conditions to unlock module"
188
- }),
189
- prerequisiteModuleIds: field.json({
190
- isOptional: true,
191
- description: "Required modules to complete first"
192
- }),
193
- estimatedDuration: field.int({
194
- isOptional: true,
195
- description: "Estimated duration in minutes"
196
- }),
197
- createdAt: field.createdAt(),
198
- updatedAt: field.updatedAt(),
199
- course: field.belongsTo("Course", ["courseId"], ["id"], { onDelete: "Cascade" }),
200
- lessons: field.hasMany("Lesson"),
201
- completions: field.hasMany("ModuleCompletion")
202
- },
203
- indexes: [index.on(["courseId", "order"])]
204
- });
205
- /**
206
- * Lesson entity - individual learning unit.
207
- */
208
- const LessonEntity = defineEntity({
209
- name: "Lesson",
210
- description: "An individual lesson within a module.",
211
- schema: "lssm_learning",
212
- map: "lesson",
213
- fields: {
214
- id: field.id({ description: "Unique lesson identifier" }),
215
- moduleId: field.foreignKey({ description: "Parent module" }),
216
- title: field.string({ description: "Lesson title" }),
217
- description: field.string({
218
- isOptional: true,
219
- description: "Lesson description"
220
- }),
221
- type: field.enum("LessonType", {
222
- default: "CONTENT",
223
- description: "Lesson type"
224
- }),
225
- order: field.int({
226
- default: 0,
227
- description: "Display order"
228
- }),
229
- estimatedDuration: field.int({
230
- isOptional: true,
231
- description: "Estimated duration in minutes"
232
- }),
233
- xpReward: field.int({
234
- default: 10,
235
- description: "XP awarded on completion"
236
- }),
237
- isFree: field.boolean({
238
- default: false,
239
- description: "Whether lesson is free preview"
240
- }),
241
- isRequired: field.boolean({
242
- default: true,
243
- description: "Whether lesson is required for completion"
244
- }),
245
- metadata: field.json({
246
- isOptional: true,
247
- description: "Additional metadata"
248
- }),
249
- createdAt: field.createdAt(),
250
- updatedAt: field.updatedAt(),
251
- module: field.belongsTo("CourseModule", ["moduleId"], ["id"], { onDelete: "Cascade" }),
252
- contents: field.hasMany("LessonContent"),
253
- progress: field.hasMany("LessonProgress"),
254
- quizzes: field.hasMany("Quiz")
255
- },
256
- indexes: [index.on(["moduleId", "order"]), index.on(["type"])],
257
- enums: [LessonTypeEnum]
258
- });
259
- /**
260
- * LessonContent entity - content blocks within a lesson.
261
- */
262
- const LessonContentEntity = defineEntity({
263
- name: "LessonContent",
264
- description: "Content block within a lesson.",
265
- schema: "lssm_learning",
266
- map: "lesson_content",
267
- fields: {
268
- id: field.id({ description: "Unique content identifier" }),
269
- lessonId: field.foreignKey({ description: "Parent lesson" }),
270
- contentType: field.enum("ContentType", { description: "Content format" }),
271
- content: field.string({
272
- isOptional: true,
273
- description: "Text content (markdown, etc.)"
274
- }),
275
- mediaUrl: field.string({
276
- isOptional: true,
277
- description: "Media URL for video/audio"
278
- }),
279
- embedData: field.json({
280
- isOptional: true,
281
- description: "Embed data for external content"
282
- }),
283
- order: field.int({
284
- default: 0,
285
- description: "Display order"
286
- }),
287
- duration: field.int({
288
- isOptional: true,
289
- description: "Content duration in seconds"
290
- }),
291
- metadata: field.json({
292
- isOptional: true,
293
- description: "Additional metadata"
294
- }),
295
- createdAt: field.createdAt(),
296
- updatedAt: field.updatedAt(),
297
- lesson: field.belongsTo("Lesson", ["lessonId"], ["id"], { onDelete: "Cascade" })
298
- },
299
- indexes: [index.on(["lessonId", "order"])],
300
- enums: [ContentTypeEnum]
301
- });
302
- const courseEntities = [
303
- CourseEntity,
304
- CourseModuleEntity,
305
- LessonEntity,
306
- LessonContentEntity
307
- ];
308
- const courseEnums = [
309
- CourseDifficultyEnum,
310
- CourseStatusEnum,
311
- LessonTypeEnum,
312
- ContentTypeEnum
313
- ];
314
-
315
- //#endregion
316
- export { ContentTypeEnum, CourseDifficultyEnum, CourseEntity, CourseModuleEntity, CourseStatusEnum, LessonContentEntity, LessonEntity, LessonTypeEnum, courseEntities, courseEnums };
1
+ import{defineEntity as e,defineEntityEnum as t,field as n,index as r}from"@lssm/lib.schema";const i=t({name:`CourseDifficulty`,values:[`BEGINNER`,`INTERMEDIATE`,`ADVANCED`,`EXPERT`],schema:`lssm_learning`,description:`Difficulty level of a course.`}),a=t({name:`CourseStatus`,values:[`DRAFT`,`PUBLISHED`,`ARCHIVED`],schema:`lssm_learning`,description:`Publication status of a course.`}),o=t({name:`LessonType`,values:[`CONTENT`,`VIDEO`,`INTERACTIVE`,`QUIZ`,`PRACTICE`,`PROJECT`],schema:`lssm_learning`,description:`Type of lesson content.`}),s=t({name:`ContentType`,values:[`MARKDOWN`,`VIDEO`,`AUDIO`,`EMBED`,`SCORM`,`CUSTOM`],schema:`lssm_learning`,description:`Type of lesson content format.`}),c=e({name:`Course`,description:`A structured learning course.`,schema:`lssm_learning`,map:`course`,fields:{id:n.id({description:`Unique course identifier`}),title:n.string({description:`Course title`}),slug:n.string({isUnique:!0,description:`URL-friendly slug`}),description:n.string({isOptional:!0,description:`Course description`}),summary:n.string({isOptional:!0,description:`Short summary`}),difficulty:n.enum(`CourseDifficulty`,{default:`BEGINNER`,description:`Difficulty level`}),category:n.string({isOptional:!0,description:`Course category`}),tags:n.json({isOptional:!0,description:`Tags for discovery`}),prerequisites:n.json({isOptional:!0,description:`Required course IDs`}),requiredSkills:n.json({isOptional:!0,description:`Required skill levels`}),estimatedDuration:n.int({isOptional:!0,description:`Estimated duration in minutes`}),thumbnailUrl:n.string({isOptional:!0,description:`Thumbnail image URL`}),coverImageUrl:n.string({isOptional:!0,description:`Cover image URL`}),promoVideoUrl:n.string({isOptional:!0,description:`Promo video URL`}),status:n.enum(`CourseStatus`,{default:`DRAFT`,description:`Publication status`}),publishedAt:n.dateTime({isOptional:!0,description:`When published`}),authorId:n.string({description:`Author user ID`}),orgId:n.string({isOptional:!0,description:`Organization scope`}),isPublic:n.boolean({default:!1,description:`Whether course is publicly accessible`}),isFeatured:n.boolean({default:!1,description:`Whether course is featured`}),certificateEnabled:n.boolean({default:!1,description:`Award certificate on completion`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),modules:n.hasMany(`CourseModule`),enrollments:n.hasMany(`Enrollment`)},indexes:[r.on([`orgId`,`status`]),r.on([`category`]),r.on([`difficulty`]),r.on([`authorId`])],enums:[i,a]}),l=e({name:`CourseModule`,description:`A module (section) within a course.`,schema:`lssm_learning`,map:`course_module`,fields:{id:n.id({description:`Unique module identifier`}),courseId:n.foreignKey({description:`Parent course`}),title:n.string({description:`Module title`}),description:n.string({isOptional:!0,description:`Module description`}),order:n.int({default:0,description:`Display order`}),unlockCondition:n.json({isOptional:!0,description:`Conditions to unlock module`}),prerequisiteModuleIds:n.json({isOptional:!0,description:`Required modules to complete first`}),estimatedDuration:n.int({isOptional:!0,description:`Estimated duration in minutes`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),course:n.belongsTo(`Course`,[`courseId`],[`id`],{onDelete:`Cascade`}),lessons:n.hasMany(`Lesson`),completions:n.hasMany(`ModuleCompletion`)},indexes:[r.on([`courseId`,`order`])]}),u=e({name:`Lesson`,description:`An individual lesson within a module.`,schema:`lssm_learning`,map:`lesson`,fields:{id:n.id({description:`Unique lesson identifier`}),moduleId:n.foreignKey({description:`Parent module`}),title:n.string({description:`Lesson title`}),description:n.string({isOptional:!0,description:`Lesson description`}),type:n.enum(`LessonType`,{default:`CONTENT`,description:`Lesson type`}),order:n.int({default:0,description:`Display order`}),estimatedDuration:n.int({isOptional:!0,description:`Estimated duration in minutes`}),xpReward:n.int({default:10,description:`XP awarded on completion`}),isFree:n.boolean({default:!1,description:`Whether lesson is free preview`}),isRequired:n.boolean({default:!0,description:`Whether lesson is required for completion`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),module:n.belongsTo(`CourseModule`,[`moduleId`],[`id`],{onDelete:`Cascade`}),contents:n.hasMany(`LessonContent`),progress:n.hasMany(`LessonProgress`),quizzes:n.hasMany(`Quiz`)},indexes:[r.on([`moduleId`,`order`]),r.on([`type`])],enums:[o]}),d=e({name:`LessonContent`,description:`Content block within a lesson.`,schema:`lssm_learning`,map:`lesson_content`,fields:{id:n.id({description:`Unique content identifier`}),lessonId:n.foreignKey({description:`Parent lesson`}),contentType:n.enum(`ContentType`,{description:`Content format`}),content:n.string({isOptional:!0,description:`Text content (markdown, etc.)`}),mediaUrl:n.string({isOptional:!0,description:`Media URL for video/audio`}),embedData:n.json({isOptional:!0,description:`Embed data for external content`}),order:n.int({default:0,description:`Display order`}),duration:n.int({isOptional:!0,description:`Content duration in seconds`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),lesson:n.belongsTo(`Lesson`,[`lessonId`],[`id`],{onDelete:`Cascade`})},indexes:[r.on([`lessonId`,`order`])],enums:[s]}),f=[c,l,u,d],p=[i,a,o,s];export{s as ContentTypeEnum,i as CourseDifficultyEnum,c as CourseEntity,l as CourseModuleEntity,a as CourseStatusEnum,d as LessonContentEntity,u as LessonEntity,o as LessonTypeEnum,f as courseEntities,p as courseEnums};
@@ -1,249 +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/flashcard.ts
5
- /**
6
- * Card rating enum for SRS.
7
- */
8
- const CardRatingEnum = defineEntityEnum({
9
- name: "CardRating",
10
- values: [
11
- "AGAIN",
12
- "HARD",
13
- "GOOD",
14
- "EASY"
15
- ],
16
- schema: "lssm_learning",
17
- description: "Rating for a flashcard review."
18
- });
19
- /**
20
- * Deck entity - collection of flashcards.
21
- */
22
- const DeckEntity = defineEntity({
23
- name: "Deck",
24
- description: "A collection of flashcards.",
25
- schema: "lssm_learning",
26
- map: "deck",
27
- fields: {
28
- id: field.id({ description: "Unique deck identifier" }),
29
- ownerId: field.foreignKey({ description: "Deck owner (learner)" }),
30
- title: field.string({ description: "Deck title" }),
31
- description: field.string({
32
- isOptional: true,
33
- description: "Deck description"
34
- }),
35
- category: field.string({
36
- isOptional: true,
37
- description: "Deck category"
38
- }),
39
- tags: field.json({
40
- isOptional: true,
41
- description: "Tags for discovery"
42
- }),
43
- isPublic: field.boolean({
44
- default: false,
45
- description: "Whether deck is publicly visible"
46
- }),
47
- cardCount: field.int({
48
- default: 0,
49
- description: "Number of cards"
50
- }),
51
- coverImageUrl: field.string({
52
- isOptional: true,
53
- description: "Cover image URL"
54
- }),
55
- orgId: field.string({
56
- isOptional: true,
57
- description: "Organization scope"
58
- }),
59
- newCardsPerDay: field.int({
60
- default: 20,
61
- description: "New cards to introduce per day"
62
- }),
63
- reviewsPerDay: field.int({
64
- default: 100,
65
- description: "Maximum reviews per day"
66
- }),
67
- metadata: field.json({
68
- isOptional: true,
69
- description: "Additional metadata"
70
- }),
71
- createdAt: field.createdAt(),
72
- updatedAt: field.updatedAt(),
73
- owner: field.belongsTo("Learner", ["ownerId"], ["id"], { onDelete: "Cascade" }),
74
- cards: field.hasMany("Card")
75
- },
76
- indexes: [
77
- index.on(["ownerId"]),
78
- index.on(["isPublic", "category"]),
79
- index.on(["orgId"])
80
- ]
81
- });
82
- /**
83
- * Card entity - individual flashcard.
84
- */
85
- const CardEntity = defineEntity({
86
- name: "Card",
87
- description: "An individual flashcard.",
88
- schema: "lssm_learning",
89
- map: "card",
90
- fields: {
91
- id: field.id({ description: "Unique card identifier" }),
92
- deckId: field.foreignKey({ description: "Parent deck" }),
93
- front: field.string({ description: "Front of card (question)" }),
94
- back: field.string({ description: "Back of card (answer)" }),
95
- hints: field.json({
96
- isOptional: true,
97
- description: "Hints for the card"
98
- }),
99
- explanation: field.string({
100
- isOptional: true,
101
- description: "Detailed explanation"
102
- }),
103
- frontMediaUrl: field.string({
104
- isOptional: true,
105
- description: "Media for front"
106
- }),
107
- backMediaUrl: field.string({
108
- isOptional: true,
109
- description: "Media for back"
110
- }),
111
- audioUrl: field.string({
112
- isOptional: true,
113
- description: "Audio pronunciation"
114
- }),
115
- tags: field.json({
116
- isOptional: true,
117
- description: "Card tags"
118
- }),
119
- difficulty: field.int({
120
- default: 0,
121
- description: "Card difficulty (0-5)"
122
- }),
123
- order: field.int({
124
- default: 0,
125
- description: "Card order in deck"
126
- }),
127
- isSuspended: field.boolean({
128
- default: false,
129
- description: "Whether card is suspended"
130
- }),
131
- metadata: field.json({
132
- isOptional: true,
133
- description: "Additional metadata"
134
- }),
135
- createdAt: field.createdAt(),
136
- updatedAt: field.updatedAt(),
137
- deck: field.belongsTo("Deck", ["deckId"], ["id"], { onDelete: "Cascade" }),
138
- reviews: field.hasMany("CardReview"),
139
- schedules: field.hasMany("CardSchedule")
140
- },
141
- indexes: [index.on(["deckId", "order"]), index.on(["isSuspended"])]
142
- });
143
- /**
144
- * CardReview entity - records individual reviews.
145
- */
146
- const CardReviewEntity = defineEntity({
147
- name: "CardReview",
148
- description: "A single review of a flashcard.",
149
- schema: "lssm_learning",
150
- map: "card_review",
151
- fields: {
152
- id: field.id({ description: "Unique review identifier" }),
153
- learnerId: field.foreignKey({ description: "Reviewer" }),
154
- cardId: field.foreignKey({ description: "Reviewed card" }),
155
- rating: field.enum("CardRating", { description: "Review rating" }),
156
- responseTimeMs: field.int({
157
- isOptional: true,
158
- description: "Time to respond in ms"
159
- }),
160
- intervalBefore: field.int({ description: "Interval before review (days)" }),
161
- easeFactorBefore: field.decimal({ description: "Ease factor before review" }),
162
- intervalAfter: field.int({ description: "Interval after review (days)" }),
163
- easeFactorAfter: field.decimal({ description: "Ease factor after review" }),
164
- reviewType: field.string({
165
- default: "\"review\"",
166
- description: "Type: new, learning, review, relearning"
167
- }),
168
- reviewedAt: field.dateTime({ description: "When reviewed" }),
169
- createdAt: field.createdAt(),
170
- learner: field.belongsTo("Learner", ["learnerId"], ["id"], { onDelete: "Cascade" }),
171
- card: field.belongsTo("Card", ["cardId"], ["id"], { onDelete: "Cascade" })
172
- },
173
- indexes: [
174
- index.on(["learnerId", "reviewedAt"]),
175
- index.on(["cardId", "reviewedAt"]),
176
- index.on(["rating"])
177
- ],
178
- enums: [CardRatingEnum]
179
- });
180
- /**
181
- * CardSchedule entity - SRS scheduling per learner/card.
182
- */
183
- const CardScheduleEntity = defineEntity({
184
- name: "CardSchedule",
185
- description: "SRS schedule for a learner/card pair.",
186
- schema: "lssm_learning",
187
- map: "card_schedule",
188
- fields: {
189
- id: field.id({ description: "Unique schedule identifier" }),
190
- learnerId: field.foreignKey({ description: "Learner" }),
191
- cardId: field.foreignKey({ description: "Card" }),
192
- interval: field.int({
193
- default: 0,
194
- description: "Current interval in days"
195
- }),
196
- easeFactor: field.decimal({
197
- default: 2.5,
198
- description: "Ease factor (SM-2)"
199
- }),
200
- repetitions: field.int({
201
- default: 0,
202
- description: "Number of successful repetitions"
203
- }),
204
- nextReviewAt: field.dateTime({ description: "When next review is due" }),
205
- lastReviewAt: field.dateTime({
206
- isOptional: true,
207
- description: "When last reviewed"
208
- }),
209
- learningStep: field.int({
210
- default: 0,
211
- description: "Current learning step"
212
- }),
213
- isGraduated: field.boolean({
214
- default: false,
215
- description: "Whether card has graduated"
216
- }),
217
- isRelearning: field.boolean({
218
- default: false,
219
- description: "Whether card is being relearned"
220
- }),
221
- lapses: field.int({
222
- default: 0,
223
- description: "Number of times card was forgotten"
224
- }),
225
- reviewCount: field.int({
226
- default: 0,
227
- description: "Total review count"
228
- }),
229
- createdAt: field.createdAt(),
230
- updatedAt: field.updatedAt(),
231
- learner: field.belongsTo("Learner", ["learnerId"], ["id"], { onDelete: "Cascade" }),
232
- card: field.belongsTo("Card", ["cardId"], ["id"], { onDelete: "Cascade" })
233
- },
234
- indexes: [
235
- index.unique(["learnerId", "cardId"], { name: "card_schedule_unique" }),
236
- index.on(["learnerId", "nextReviewAt"]),
237
- index.on(["nextReviewAt"])
238
- ]
239
- });
240
- const flashcardEntities = [
241
- DeckEntity,
242
- CardEntity,
243
- CardReviewEntity,
244
- CardScheduleEntity
245
- ];
246
- const flashcardEnums = [CardRatingEnum];
247
-
248
- //#endregion
249
- export { CardEntity, CardRatingEnum, CardReviewEntity, CardScheduleEntity, DeckEntity, flashcardEntities, flashcardEnums };
1
+ import{defineEntity as e,defineEntityEnum as t,field as n,index as r}from"@lssm/lib.schema";const i=t({name:`CardRating`,values:[`AGAIN`,`HARD`,`GOOD`,`EASY`],schema:`lssm_learning`,description:`Rating for a flashcard review.`}),a=e({name:`Deck`,description:`A collection of flashcards.`,schema:`lssm_learning`,map:`deck`,fields:{id:n.id({description:`Unique deck identifier`}),ownerId:n.foreignKey({description:`Deck owner (learner)`}),title:n.string({description:`Deck title`}),description:n.string({isOptional:!0,description:`Deck description`}),category:n.string({isOptional:!0,description:`Deck category`}),tags:n.json({isOptional:!0,description:`Tags for discovery`}),isPublic:n.boolean({default:!1,description:`Whether deck is publicly visible`}),cardCount:n.int({default:0,description:`Number of cards`}),coverImageUrl:n.string({isOptional:!0,description:`Cover image URL`}),orgId:n.string({isOptional:!0,description:`Organization scope`}),newCardsPerDay:n.int({default:20,description:`New cards to introduce per day`}),reviewsPerDay:n.int({default:100,description:`Maximum reviews per day`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),owner:n.belongsTo(`Learner`,[`ownerId`],[`id`],{onDelete:`Cascade`}),cards:n.hasMany(`Card`)},indexes:[r.on([`ownerId`]),r.on([`isPublic`,`category`]),r.on([`orgId`])]}),o=e({name:`Card`,description:`An individual flashcard.`,schema:`lssm_learning`,map:`card`,fields:{id:n.id({description:`Unique card identifier`}),deckId:n.foreignKey({description:`Parent deck`}),front:n.string({description:`Front of card (question)`}),back:n.string({description:`Back of card (answer)`}),hints:n.json({isOptional:!0,description:`Hints for the card`}),explanation:n.string({isOptional:!0,description:`Detailed explanation`}),frontMediaUrl:n.string({isOptional:!0,description:`Media for front`}),backMediaUrl:n.string({isOptional:!0,description:`Media for back`}),audioUrl:n.string({isOptional:!0,description:`Audio pronunciation`}),tags:n.json({isOptional:!0,description:`Card tags`}),difficulty:n.int({default:0,description:`Card difficulty (0-5)`}),order:n.int({default:0,description:`Card order in deck`}),isSuspended:n.boolean({default:!1,description:`Whether card is suspended`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),deck:n.belongsTo(`Deck`,[`deckId`],[`id`],{onDelete:`Cascade`}),reviews:n.hasMany(`CardReview`),schedules:n.hasMany(`CardSchedule`)},indexes:[r.on([`deckId`,`order`]),r.on([`isSuspended`])]}),s=e({name:`CardReview`,description:`A single review of a flashcard.`,schema:`lssm_learning`,map:`card_review`,fields:{id:n.id({description:`Unique review identifier`}),learnerId:n.foreignKey({description:`Reviewer`}),cardId:n.foreignKey({description:`Reviewed card`}),rating:n.enum(`CardRating`,{description:`Review rating`}),responseTimeMs:n.int({isOptional:!0,description:`Time to respond in ms`}),intervalBefore:n.int({description:`Interval before review (days)`}),easeFactorBefore:n.decimal({description:`Ease factor before review`}),intervalAfter:n.int({description:`Interval after review (days)`}),easeFactorAfter:n.decimal({description:`Ease factor after review`}),reviewType:n.string({default:`"review"`,description:`Type: new, learning, review, relearning`}),reviewedAt:n.dateTime({description:`When reviewed`}),createdAt:n.createdAt(),learner:n.belongsTo(`Learner`,[`learnerId`],[`id`],{onDelete:`Cascade`}),card:n.belongsTo(`Card`,[`cardId`],[`id`],{onDelete:`Cascade`})},indexes:[r.on([`learnerId`,`reviewedAt`]),r.on([`cardId`,`reviewedAt`]),r.on([`rating`])],enums:[i]}),c=e({name:`CardSchedule`,description:`SRS schedule for a learner/card pair.`,schema:`lssm_learning`,map:`card_schedule`,fields:{id:n.id({description:`Unique schedule identifier`}),learnerId:n.foreignKey({description:`Learner`}),cardId:n.foreignKey({description:`Card`}),interval:n.int({default:0,description:`Current interval in days`}),easeFactor:n.decimal({default:2.5,description:`Ease factor (SM-2)`}),repetitions:n.int({default:0,description:`Number of successful repetitions`}),nextReviewAt:n.dateTime({description:`When next review is due`}),lastReviewAt:n.dateTime({isOptional:!0,description:`When last reviewed`}),learningStep:n.int({default:0,description:`Current learning step`}),isGraduated:n.boolean({default:!1,description:`Whether card has graduated`}),isRelearning:n.boolean({default:!1,description:`Whether card is being relearned`}),lapses:n.int({default:0,description:`Number of times card was forgotten`}),reviewCount:n.int({default:0,description:`Total review count`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),learner:n.belongsTo(`Learner`,[`learnerId`],[`id`],{onDelete:`Cascade`}),card:n.belongsTo(`Card`,[`cardId`],[`id`],{onDelete:`Cascade`})},indexes:[r.unique([`learnerId`,`cardId`],{name:`card_schedule_unique`}),r.on([`learnerId`,`nextReviewAt`]),r.on([`nextReviewAt`])]}),l=[a,o,s,c],u=[i];export{o as CardEntity,i as CardRatingEnum,s as CardReviewEntity,c as CardScheduleEntity,a as DeckEntity,l as flashcardEntities,u as flashcardEnums};