@contractspec/module.learning-journey 1.57.0 → 1.59.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 (140) hide show
  1. package/dist/browser/contracts/index.js +578 -0
  2. package/dist/browser/contracts/models.js +193 -0
  3. package/dist/browser/contracts/onboarding.js +417 -0
  4. package/dist/browser/contracts/operations.js +326 -0
  5. package/dist/browser/contracts/shared.js +5 -0
  6. package/dist/browser/docs/index.js +124 -0
  7. package/dist/browser/docs/learning-journey.docblock.js +124 -0
  8. package/dist/browser/engines/index.js +526 -0
  9. package/dist/browser/engines/srs.js +198 -0
  10. package/dist/browser/engines/streak.js +159 -0
  11. package/dist/browser/engines/xp.js +171 -0
  12. package/dist/browser/entities/ai.js +343 -0
  13. package/dist/browser/entities/course.js +276 -0
  14. package/dist/browser/entities/flashcard.js +222 -0
  15. package/dist/browser/entities/gamification.js +340 -0
  16. package/dist/browser/entities/index.js +2136 -0
  17. package/dist/browser/entities/learner.js +329 -0
  18. package/dist/browser/entities/onboarding.js +301 -0
  19. package/dist/browser/entities/quiz.js +304 -0
  20. package/dist/browser/events.js +423 -0
  21. package/dist/browser/index.js +3833 -0
  22. package/dist/browser/learning-journey.capability.js +40 -0
  23. package/dist/browser/learning-journey.feature.js +56 -0
  24. package/dist/browser/track-spec.js +0 -0
  25. package/dist/contracts/index.d.ts +5 -5
  26. package/dist/contracts/index.d.ts.map +1 -0
  27. package/dist/contracts/index.js +578 -5
  28. package/dist/contracts/models.d.ts +426 -431
  29. package/dist/contracts/models.d.ts.map +1 -1
  30. package/dist/contracts/models.js +178 -372
  31. package/dist/contracts/onboarding.d.ts +621 -627
  32. package/dist/contracts/onboarding.d.ts.map +1 -1
  33. package/dist/contracts/onboarding.js +404 -388
  34. package/dist/contracts/operations.d.ts +243 -249
  35. package/dist/contracts/operations.d.ts.map +1 -1
  36. package/dist/contracts/operations.js +324 -148
  37. package/dist/contracts/shared.d.ts +1 -4
  38. package/dist/contracts/shared.d.ts.map +1 -1
  39. package/dist/contracts/shared.js +6 -6
  40. package/dist/docs/index.d.ts +2 -1
  41. package/dist/docs/index.d.ts.map +1 -0
  42. package/dist/docs/index.js +125 -1
  43. package/dist/docs/learning-journey.docblock.d.ts +2 -1
  44. package/dist/docs/learning-journey.docblock.d.ts.map +1 -0
  45. package/dist/docs/learning-journey.docblock.js +47 -58
  46. package/dist/engines/index.d.ts +4 -4
  47. package/dist/engines/index.d.ts.map +1 -0
  48. package/dist/engines/index.js +526 -4
  49. package/dist/engines/srs.d.ts +89 -92
  50. package/dist/engines/srs.d.ts.map +1 -1
  51. package/dist/engines/srs.js +197 -217
  52. package/dist/engines/streak.d.ts +84 -87
  53. package/dist/engines/streak.d.ts.map +1 -1
  54. package/dist/engines/streak.js +158 -192
  55. package/dist/engines/xp.d.ts +80 -83
  56. package/dist/engines/xp.d.ts.map +1 -1
  57. package/dist/engines/xp.js +170 -211
  58. package/dist/entities/ai.d.ts +199 -204
  59. package/dist/entities/ai.d.ts.map +1 -1
  60. package/dist/entities/ai.js +336 -368
  61. package/dist/entities/course.d.ts +149 -154
  62. package/dist/entities/course.d.ts.map +1 -1
  63. package/dist/entities/course.js +267 -306
  64. package/dist/entities/flashcard.d.ts +144 -149
  65. package/dist/entities/flashcard.d.ts.map +1 -1
  66. package/dist/entities/flashcard.js +217 -243
  67. package/dist/entities/gamification.d.ts +197 -202
  68. package/dist/entities/gamification.d.ts.map +1 -1
  69. package/dist/entities/gamification.js +331 -382
  70. package/dist/entities/index.d.ts +613 -618
  71. package/dist/entities/index.d.ts.map +1 -1
  72. package/dist/entities/index.js +2135 -43
  73. package/dist/entities/learner.d.ts +191 -196
  74. package/dist/entities/learner.d.ts.map +1 -1
  75. package/dist/entities/learner.js +322 -357
  76. package/dist/entities/onboarding.d.ts +164 -169
  77. package/dist/entities/onboarding.d.ts.map +1 -1
  78. package/dist/entities/onboarding.js +296 -301
  79. package/dist/entities/quiz.d.ts +184 -189
  80. package/dist/entities/quiz.d.ts.map +1 -1
  81. package/dist/entities/quiz.js +296 -361
  82. package/dist/events.d.ts +608 -614
  83. package/dist/events.d.ts.map +1 -1
  84. package/dist/events.js +421 -687
  85. package/dist/index.d.ts +8 -20
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +3834 -22
  88. package/dist/learning-journey.capability.d.ts +3 -8
  89. package/dist/learning-journey.capability.d.ts.map +1 -1
  90. package/dist/learning-journey.capability.js +41 -46
  91. package/dist/learning-journey.feature.d.ts +1 -6
  92. package/dist/learning-journey.feature.d.ts.map +1 -1
  93. package/dist/learning-journey.feature.js +55 -155
  94. package/dist/node/contracts/index.js +578 -0
  95. package/dist/node/contracts/models.js +193 -0
  96. package/dist/node/contracts/onboarding.js +417 -0
  97. package/dist/node/contracts/operations.js +326 -0
  98. package/dist/node/contracts/shared.js +5 -0
  99. package/dist/node/docs/index.js +124 -0
  100. package/dist/node/docs/learning-journey.docblock.js +124 -0
  101. package/dist/node/engines/index.js +526 -0
  102. package/dist/node/engines/srs.js +198 -0
  103. package/dist/node/engines/streak.js +159 -0
  104. package/dist/node/engines/xp.js +171 -0
  105. package/dist/node/entities/ai.js +343 -0
  106. package/dist/node/entities/course.js +276 -0
  107. package/dist/node/entities/flashcard.js +222 -0
  108. package/dist/node/entities/gamification.js +340 -0
  109. package/dist/node/entities/index.js +2136 -0
  110. package/dist/node/entities/learner.js +329 -0
  111. package/dist/node/entities/onboarding.js +301 -0
  112. package/dist/node/entities/quiz.js +304 -0
  113. package/dist/node/events.js +423 -0
  114. package/dist/node/index.js +3833 -0
  115. package/dist/node/learning-journey.capability.js +40 -0
  116. package/dist/node/learning-journey.feature.js +56 -0
  117. package/dist/node/track-spec.js +0 -0
  118. package/dist/track-spec.d.ts +115 -118
  119. package/dist/track-spec.d.ts.map +1 -1
  120. package/dist/track-spec.js +1 -0
  121. package/package.json +237 -60
  122. package/dist/contracts/models.js.map +0 -1
  123. package/dist/contracts/onboarding.js.map +0 -1
  124. package/dist/contracts/operations.js.map +0 -1
  125. package/dist/contracts/shared.js.map +0 -1
  126. package/dist/docs/learning-journey.docblock.js.map +0 -1
  127. package/dist/engines/srs.js.map +0 -1
  128. package/dist/engines/streak.js.map +0 -1
  129. package/dist/engines/xp.js.map +0 -1
  130. package/dist/entities/ai.js.map +0 -1
  131. package/dist/entities/course.js.map +0 -1
  132. package/dist/entities/flashcard.js.map +0 -1
  133. package/dist/entities/gamification.js.map +0 -1
  134. package/dist/entities/index.js.map +0 -1
  135. package/dist/entities/learner.js.map +0 -1
  136. package/dist/entities/onboarding.js.map +0 -1
  137. package/dist/entities/quiz.js.map +0 -1
  138. package/dist/events.js.map +0 -1
  139. package/dist/learning-journey.capability.js.map +0 -1
  140. package/dist/learning-journey.feature.js.map +0 -1
@@ -1,316 +1,277 @@
1
- import { defineEntity, defineEntityEnum, field, index } from "@contractspec/lib.schema";
2
-
3
- //#region src/entities/course.ts
4
- /**
5
- * Course difficulty enum.
6
- */
7
- const CourseDifficultyEnum = defineEntityEnum({
8
- name: "CourseDifficulty",
9
- values: [
10
- "BEGINNER",
11
- "INTERMEDIATE",
12
- "ADVANCED",
13
- "EXPERT"
14
- ],
15
- schema: "lssm_learning",
16
- description: "Difficulty level of a course."
1
+ // @bun
2
+ // src/entities/course.ts
3
+ import {
4
+ defineEntity,
5
+ defineEntityEnum,
6
+ field,
7
+ index
8
+ } from "@contractspec/lib.schema";
9
+ var CourseDifficultyEnum = defineEntityEnum({
10
+ name: "CourseDifficulty",
11
+ values: ["BEGINNER", "INTERMEDIATE", "ADVANCED", "EXPERT"],
12
+ schema: "lssm_learning",
13
+ description: "Difficulty level of a course."
17
14
  });
18
- /**
19
- * Course status enum.
20
- */
21
- const CourseStatusEnum = defineEntityEnum({
22
- name: "CourseStatus",
23
- values: [
24
- "DRAFT",
25
- "PUBLISHED",
26
- "ARCHIVED"
27
- ],
28
- schema: "lssm_learning",
29
- description: "Publication status of a course."
15
+ var CourseStatusEnum = defineEntityEnum({
16
+ name: "CourseStatus",
17
+ values: ["DRAFT", "PUBLISHED", "ARCHIVED"],
18
+ schema: "lssm_learning",
19
+ description: "Publication status of a course."
30
20
  });
31
- /**
32
- * Lesson type enum.
33
- */
34
- const LessonTypeEnum = defineEntityEnum({
35
- name: "LessonType",
36
- values: [
37
- "CONTENT",
38
- "VIDEO",
39
- "INTERACTIVE",
40
- "QUIZ",
41
- "PRACTICE",
42
- "PROJECT"
43
- ],
44
- schema: "lssm_learning",
45
- description: "Type of lesson content."
21
+ var LessonTypeEnum = defineEntityEnum({
22
+ name: "LessonType",
23
+ values: [
24
+ "CONTENT",
25
+ "VIDEO",
26
+ "INTERACTIVE",
27
+ "QUIZ",
28
+ "PRACTICE",
29
+ "PROJECT"
30
+ ],
31
+ schema: "lssm_learning",
32
+ description: "Type of lesson content."
46
33
  });
47
- /**
48
- * Content type enum.
49
- */
50
- const ContentTypeEnum = defineEntityEnum({
51
- name: "ContentType",
52
- values: [
53
- "MARKDOWN",
54
- "VIDEO",
55
- "AUDIO",
56
- "EMBED",
57
- "SCORM",
58
- "CUSTOM"
59
- ],
60
- schema: "lssm_learning",
61
- description: "Type of lesson content format."
34
+ var ContentTypeEnum = defineEntityEnum({
35
+ name: "ContentType",
36
+ values: ["MARKDOWN", "VIDEO", "AUDIO", "EMBED", "SCORM", "CUSTOM"],
37
+ schema: "lssm_learning",
38
+ description: "Type of lesson content format."
62
39
  });
63
- /**
64
- * Course entity - defines a learning course.
65
- */
66
- const CourseEntity = defineEntity({
67
- name: "Course",
68
- description: "A structured learning course.",
69
- schema: "lssm_learning",
70
- map: "course",
71
- fields: {
72
- id: field.id({ description: "Unique course identifier" }),
73
- title: field.string({ description: "Course title" }),
74
- slug: field.string({
75
- isUnique: true,
76
- description: "URL-friendly slug"
77
- }),
78
- description: field.string({
79
- isOptional: true,
80
- description: "Course description"
81
- }),
82
- summary: field.string({
83
- isOptional: true,
84
- description: "Short summary"
85
- }),
86
- difficulty: field.enum("CourseDifficulty", {
87
- default: "BEGINNER",
88
- description: "Difficulty level"
89
- }),
90
- category: field.string({
91
- isOptional: true,
92
- description: "Course category"
93
- }),
94
- tags: field.json({
95
- isOptional: true,
96
- description: "Tags for discovery"
97
- }),
98
- prerequisites: field.json({
99
- isOptional: true,
100
- description: "Required course IDs"
101
- }),
102
- requiredSkills: field.json({
103
- isOptional: true,
104
- description: "Required skill levels"
105
- }),
106
- estimatedDuration: field.int({
107
- isOptional: true,
108
- description: "Estimated duration in minutes"
109
- }),
110
- thumbnailUrl: field.string({
111
- isOptional: true,
112
- description: "Thumbnail image URL"
113
- }),
114
- coverImageUrl: field.string({
115
- isOptional: true,
116
- description: "Cover image URL"
117
- }),
118
- promoVideoUrl: field.string({
119
- isOptional: true,
120
- description: "Promo video URL"
121
- }),
122
- status: field.enum("CourseStatus", {
123
- default: "DRAFT",
124
- description: "Publication status"
125
- }),
126
- publishedAt: field.dateTime({
127
- isOptional: true,
128
- description: "When published"
129
- }),
130
- authorId: field.string({ description: "Author user ID" }),
131
- orgId: field.string({
132
- isOptional: true,
133
- description: "Organization scope"
134
- }),
135
- isPublic: field.boolean({
136
- default: false,
137
- description: "Whether course is publicly accessible"
138
- }),
139
- isFeatured: field.boolean({
140
- default: false,
141
- description: "Whether course is featured"
142
- }),
143
- certificateEnabled: field.boolean({
144
- default: false,
145
- description: "Award certificate on completion"
146
- }),
147
- metadata: field.json({
148
- isOptional: true,
149
- description: "Additional metadata"
150
- }),
151
- createdAt: field.createdAt(),
152
- updatedAt: field.updatedAt(),
153
- modules: field.hasMany("CourseModule"),
154
- enrollments: field.hasMany("Enrollment")
155
- },
156
- indexes: [
157
- index.on(["orgId", "status"]),
158
- index.on(["category"]),
159
- index.on(["difficulty"]),
160
- index.on(["authorId"])
161
- ],
162
- enums: [CourseDifficultyEnum, CourseStatusEnum]
40
+ var CourseEntity = defineEntity({
41
+ name: "Course",
42
+ description: "A structured learning course.",
43
+ schema: "lssm_learning",
44
+ map: "course",
45
+ fields: {
46
+ id: field.id({ description: "Unique course identifier" }),
47
+ title: field.string({ description: "Course title" }),
48
+ slug: field.string({ isUnique: true, description: "URL-friendly slug" }),
49
+ description: field.string({
50
+ isOptional: true,
51
+ description: "Course description"
52
+ }),
53
+ summary: field.string({ isOptional: true, description: "Short summary" }),
54
+ difficulty: field.enum("CourseDifficulty", {
55
+ default: "BEGINNER",
56
+ description: "Difficulty level"
57
+ }),
58
+ category: field.string({
59
+ isOptional: true,
60
+ description: "Course category"
61
+ }),
62
+ tags: field.json({ isOptional: true, description: "Tags for discovery" }),
63
+ prerequisites: field.json({
64
+ isOptional: true,
65
+ description: "Required course IDs"
66
+ }),
67
+ requiredSkills: field.json({
68
+ isOptional: true,
69
+ description: "Required skill levels"
70
+ }),
71
+ estimatedDuration: field.int({
72
+ isOptional: true,
73
+ description: "Estimated duration in minutes"
74
+ }),
75
+ thumbnailUrl: field.string({
76
+ isOptional: true,
77
+ description: "Thumbnail image URL"
78
+ }),
79
+ coverImageUrl: field.string({
80
+ isOptional: true,
81
+ description: "Cover image URL"
82
+ }),
83
+ promoVideoUrl: field.string({
84
+ isOptional: true,
85
+ description: "Promo video URL"
86
+ }),
87
+ status: field.enum("CourseStatus", {
88
+ default: "DRAFT",
89
+ description: "Publication status"
90
+ }),
91
+ publishedAt: field.dateTime({
92
+ isOptional: true,
93
+ description: "When published"
94
+ }),
95
+ authorId: field.string({ description: "Author user ID" }),
96
+ orgId: field.string({
97
+ isOptional: true,
98
+ description: "Organization scope"
99
+ }),
100
+ isPublic: field.boolean({
101
+ default: false,
102
+ description: "Whether course is publicly accessible"
103
+ }),
104
+ isFeatured: field.boolean({
105
+ default: false,
106
+ description: "Whether course is featured"
107
+ }),
108
+ certificateEnabled: field.boolean({
109
+ default: false,
110
+ description: "Award certificate on completion"
111
+ }),
112
+ metadata: field.json({
113
+ isOptional: true,
114
+ description: "Additional metadata"
115
+ }),
116
+ createdAt: field.createdAt(),
117
+ updatedAt: field.updatedAt(),
118
+ modules: field.hasMany("CourseModule"),
119
+ enrollments: field.hasMany("Enrollment")
120
+ },
121
+ indexes: [
122
+ index.on(["orgId", "status"]),
123
+ index.on(["category"]),
124
+ index.on(["difficulty"]),
125
+ index.on(["authorId"])
126
+ ],
127
+ enums: [CourseDifficultyEnum, CourseStatusEnum]
163
128
  });
164
- /**
165
- * CourseModule entity - a section within a course.
166
- */
167
- const CourseModuleEntity = defineEntity({
168
- name: "CourseModule",
169
- description: "A module (section) within a course.",
170
- schema: "lssm_learning",
171
- map: "course_module",
172
- fields: {
173
- id: field.id({ description: "Unique module identifier" }),
174
- courseId: field.foreignKey({ description: "Parent course" }),
175
- title: field.string({ description: "Module title" }),
176
- description: field.string({
177
- isOptional: true,
178
- description: "Module description"
179
- }),
180
- order: field.int({
181
- default: 0,
182
- description: "Display order"
183
- }),
184
- unlockCondition: field.json({
185
- isOptional: true,
186
- description: "Conditions to unlock module"
187
- }),
188
- prerequisiteModuleIds: field.json({
189
- isOptional: true,
190
- description: "Required modules to complete first"
191
- }),
192
- estimatedDuration: field.int({
193
- isOptional: true,
194
- description: "Estimated duration in minutes"
195
- }),
196
- createdAt: field.createdAt(),
197
- updatedAt: field.updatedAt(),
198
- course: field.belongsTo("Course", ["courseId"], ["id"], { onDelete: "Cascade" }),
199
- lessons: field.hasMany("Lesson"),
200
- completions: field.hasMany("ModuleCompletion")
201
- },
202
- indexes: [index.on(["courseId", "order"])]
129
+ var CourseModuleEntity = defineEntity({
130
+ name: "CourseModule",
131
+ description: "A module (section) within a course.",
132
+ schema: "lssm_learning",
133
+ map: "course_module",
134
+ fields: {
135
+ id: field.id({ description: "Unique module identifier" }),
136
+ courseId: field.foreignKey({ description: "Parent course" }),
137
+ title: field.string({ description: "Module title" }),
138
+ description: field.string({
139
+ isOptional: true,
140
+ description: "Module description"
141
+ }),
142
+ order: field.int({ default: 0, description: "Display order" }),
143
+ unlockCondition: field.json({
144
+ isOptional: true,
145
+ description: "Conditions to unlock module"
146
+ }),
147
+ prerequisiteModuleIds: field.json({
148
+ isOptional: true,
149
+ description: "Required modules to complete first"
150
+ }),
151
+ estimatedDuration: field.int({
152
+ isOptional: true,
153
+ description: "Estimated duration in minutes"
154
+ }),
155
+ createdAt: field.createdAt(),
156
+ updatedAt: field.updatedAt(),
157
+ course: field.belongsTo("Course", ["courseId"], ["id"], {
158
+ onDelete: "Cascade"
159
+ }),
160
+ lessons: field.hasMany("Lesson"),
161
+ completions: field.hasMany("ModuleCompletion")
162
+ },
163
+ indexes: [index.on(["courseId", "order"])]
203
164
  });
204
- /**
205
- * Lesson entity - individual learning unit.
206
- */
207
- const LessonEntity = defineEntity({
208
- name: "Lesson",
209
- description: "An individual lesson within a module.",
210
- schema: "lssm_learning",
211
- map: "lesson",
212
- fields: {
213
- id: field.id({ description: "Unique lesson identifier" }),
214
- moduleId: field.foreignKey({ description: "Parent module" }),
215
- title: field.string({ description: "Lesson title" }),
216
- description: field.string({
217
- isOptional: true,
218
- description: "Lesson description"
219
- }),
220
- type: field.enum("LessonType", {
221
- default: "CONTENT",
222
- description: "Lesson type"
223
- }),
224
- order: field.int({
225
- default: 0,
226
- description: "Display order"
227
- }),
228
- estimatedDuration: field.int({
229
- isOptional: true,
230
- description: "Estimated duration in minutes"
231
- }),
232
- xpReward: field.int({
233
- default: 10,
234
- description: "XP awarded on completion"
235
- }),
236
- isFree: field.boolean({
237
- default: false,
238
- description: "Whether lesson is free preview"
239
- }),
240
- isRequired: field.boolean({
241
- default: true,
242
- description: "Whether lesson is required for completion"
243
- }),
244
- metadata: field.json({
245
- isOptional: true,
246
- description: "Additional metadata"
247
- }),
248
- createdAt: field.createdAt(),
249
- updatedAt: field.updatedAt(),
250
- module: field.belongsTo("CourseModule", ["moduleId"], ["id"], { onDelete: "Cascade" }),
251
- contents: field.hasMany("LessonContent"),
252
- progress: field.hasMany("LessonProgress"),
253
- quizzes: field.hasMany("Quiz")
254
- },
255
- indexes: [index.on(["moduleId", "order"]), index.on(["type"])],
256
- enums: [LessonTypeEnum]
165
+ var LessonEntity = defineEntity({
166
+ name: "Lesson",
167
+ description: "An individual lesson within a module.",
168
+ schema: "lssm_learning",
169
+ map: "lesson",
170
+ fields: {
171
+ id: field.id({ description: "Unique lesson identifier" }),
172
+ moduleId: field.foreignKey({ description: "Parent module" }),
173
+ title: field.string({ description: "Lesson title" }),
174
+ description: field.string({
175
+ isOptional: true,
176
+ description: "Lesson description"
177
+ }),
178
+ type: field.enum("LessonType", {
179
+ default: "CONTENT",
180
+ description: "Lesson type"
181
+ }),
182
+ order: field.int({ default: 0, description: "Display order" }),
183
+ estimatedDuration: field.int({
184
+ isOptional: true,
185
+ description: "Estimated duration in minutes"
186
+ }),
187
+ xpReward: field.int({
188
+ default: 10,
189
+ description: "XP awarded on completion"
190
+ }),
191
+ isFree: field.boolean({
192
+ default: false,
193
+ description: "Whether lesson is free preview"
194
+ }),
195
+ isRequired: field.boolean({
196
+ default: true,
197
+ description: "Whether lesson is required for completion"
198
+ }),
199
+ metadata: field.json({
200
+ isOptional: true,
201
+ description: "Additional metadata"
202
+ }),
203
+ createdAt: field.createdAt(),
204
+ updatedAt: field.updatedAt(),
205
+ module: field.belongsTo("CourseModule", ["moduleId"], ["id"], {
206
+ onDelete: "Cascade"
207
+ }),
208
+ contents: field.hasMany("LessonContent"),
209
+ progress: field.hasMany("LessonProgress"),
210
+ quizzes: field.hasMany("Quiz")
211
+ },
212
+ indexes: [index.on(["moduleId", "order"]), index.on(["type"])],
213
+ enums: [LessonTypeEnum]
257
214
  });
258
- /**
259
- * LessonContent entity - content blocks within a lesson.
260
- */
261
- const LessonContentEntity = defineEntity({
262
- name: "LessonContent",
263
- description: "Content block within a lesson.",
264
- schema: "lssm_learning",
265
- map: "lesson_content",
266
- fields: {
267
- id: field.id({ description: "Unique content identifier" }),
268
- lessonId: field.foreignKey({ description: "Parent lesson" }),
269
- contentType: field.enum("ContentType", { description: "Content format" }),
270
- content: field.string({
271
- isOptional: true,
272
- description: "Text content (markdown, etc.)"
273
- }),
274
- mediaUrl: field.string({
275
- isOptional: true,
276
- description: "Media URL for video/audio"
277
- }),
278
- embedData: field.json({
279
- isOptional: true,
280
- description: "Embed data for external content"
281
- }),
282
- order: field.int({
283
- default: 0,
284
- description: "Display order"
285
- }),
286
- duration: field.int({
287
- isOptional: true,
288
- description: "Content duration in seconds"
289
- }),
290
- metadata: field.json({
291
- isOptional: true,
292
- description: "Additional metadata"
293
- }),
294
- createdAt: field.createdAt(),
295
- updatedAt: field.updatedAt(),
296
- lesson: field.belongsTo("Lesson", ["lessonId"], ["id"], { onDelete: "Cascade" })
297
- },
298
- indexes: [index.on(["lessonId", "order"])],
299
- enums: [ContentTypeEnum]
215
+ var LessonContentEntity = defineEntity({
216
+ name: "LessonContent",
217
+ description: "Content block within a lesson.",
218
+ schema: "lssm_learning",
219
+ map: "lesson_content",
220
+ fields: {
221
+ id: field.id({ description: "Unique content identifier" }),
222
+ lessonId: field.foreignKey({ description: "Parent lesson" }),
223
+ contentType: field.enum("ContentType", { description: "Content format" }),
224
+ content: field.string({
225
+ isOptional: true,
226
+ description: "Text content (markdown, etc.)"
227
+ }),
228
+ mediaUrl: field.string({
229
+ isOptional: true,
230
+ description: "Media URL for video/audio"
231
+ }),
232
+ embedData: field.json({
233
+ isOptional: true,
234
+ description: "Embed data for external content"
235
+ }),
236
+ order: field.int({ default: 0, description: "Display order" }),
237
+ duration: field.int({
238
+ isOptional: true,
239
+ description: "Content duration in seconds"
240
+ }),
241
+ metadata: field.json({
242
+ isOptional: true,
243
+ description: "Additional metadata"
244
+ }),
245
+ createdAt: field.createdAt(),
246
+ updatedAt: field.updatedAt(),
247
+ lesson: field.belongsTo("Lesson", ["lessonId"], ["id"], {
248
+ onDelete: "Cascade"
249
+ })
250
+ },
251
+ indexes: [index.on(["lessonId", "order"])],
252
+ enums: [ContentTypeEnum]
300
253
  });
301
- const courseEntities = [
302
- CourseEntity,
303
- CourseModuleEntity,
304
- LessonEntity,
305
- LessonContentEntity
254
+ var courseEntities = [
255
+ CourseEntity,
256
+ CourseModuleEntity,
257
+ LessonEntity,
258
+ LessonContentEntity
306
259
  ];
307
- const courseEnums = [
308
- CourseDifficultyEnum,
309
- CourseStatusEnum,
310
- LessonTypeEnum,
311
- ContentTypeEnum
260
+ var courseEnums = [
261
+ CourseDifficultyEnum,
262
+ CourseStatusEnum,
263
+ LessonTypeEnum,
264
+ ContentTypeEnum
312
265
  ];
313
-
314
- //#endregion
315
- export { ContentTypeEnum, CourseDifficultyEnum, CourseEntity, CourseModuleEntity, CourseStatusEnum, LessonContentEntity, LessonEntity, LessonTypeEnum, courseEntities, courseEnums };
316
- //# sourceMappingURL=course.js.map
266
+ export {
267
+ courseEnums,
268
+ courseEntities,
269
+ LessonTypeEnum,
270
+ LessonEntity,
271
+ LessonContentEntity,
272
+ CourseStatusEnum,
273
+ CourseModuleEntity,
274
+ CourseEntity,
275
+ CourseDifficultyEnum,
276
+ ContentTypeEnum
277
+ };