@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,365 +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/learner.ts
5
- /**
6
- * Enrollment status enum.
7
- */
8
- const EnrollmentStatusEnum = defineEntityEnum({
9
- name: "EnrollmentStatus",
10
- values: [
11
- "ENROLLED",
12
- "IN_PROGRESS",
13
- "COMPLETED",
14
- "DROPPED",
15
- "EXPIRED"
16
- ],
17
- schema: "lssm_learning",
18
- description: "Status of a course enrollment."
19
- });
20
- /**
21
- * Progress status enum.
22
- */
23
- const ProgressStatusEnum = defineEntityEnum({
24
- name: "ProgressStatus",
25
- values: [
26
- "NOT_STARTED",
27
- "IN_PROGRESS",
28
- "COMPLETED",
29
- "SKIPPED"
30
- ],
31
- schema: "lssm_learning",
32
- description: "Status of lesson progress."
33
- });
34
- /**
35
- * Learner entity - learning profile.
36
- */
37
- const LearnerEntity = defineEntity({
38
- name: "Learner",
39
- description: "A learner profile.",
40
- schema: "lssm_learning",
41
- map: "learner",
42
- fields: {
43
- id: field.id({ description: "Unique learner identifier" }),
44
- userId: field.string({
45
- isUnique: true,
46
- description: "Associated user ID"
47
- }),
48
- displayName: field.string({
49
- isOptional: true,
50
- description: "Display name"
51
- }),
52
- avatarUrl: field.string({
53
- isOptional: true,
54
- description: "Avatar URL"
55
- }),
56
- bio: field.string({
57
- isOptional: true,
58
- description: "Short bio"
59
- }),
60
- level: field.int({
61
- default: 1,
62
- description: "Current level"
63
- }),
64
- totalXp: field.int({
65
- default: 0,
66
- description: "Total XP earned"
67
- }),
68
- currentStreak: field.int({
69
- default: 0,
70
- description: "Current streak days"
71
- }),
72
- longestStreak: field.int({
73
- default: 0,
74
- description: "Longest streak ever"
75
- }),
76
- lastActivityAt: field.dateTime({
77
- isOptional: true,
78
- description: "Last learning activity"
79
- }),
80
- timezone: field.string({
81
- default: "\"UTC\"",
82
- description: "Learner timezone"
83
- }),
84
- dailyGoalXp: field.int({
85
- default: 50,
86
- description: "Daily XP goal"
87
- }),
88
- reminderEnabled: field.boolean({
89
- default: true,
90
- description: "Enable reminders"
91
- }),
92
- reminderTime: field.string({
93
- isOptional: true,
94
- description: "Preferred reminder time"
95
- }),
96
- orgId: field.string({
97
- isOptional: true,
98
- description: "Organization scope"
99
- }),
100
- metadata: field.json({
101
- isOptional: true,
102
- description: "Additional metadata"
103
- }),
104
- createdAt: field.createdAt(),
105
- updatedAt: field.updatedAt(),
106
- enrollments: field.hasMany("Enrollment"),
107
- lessonProgress: field.hasMany("LessonProgress"),
108
- achievements: field.hasMany("LearnerAchievement"),
109
- decks: field.hasMany("Deck"),
110
- profile: field.hasOne("LearnerProfile")
111
- },
112
- indexes: [
113
- index.on(["orgId"]),
114
- index.on(["totalXp"]),
115
- index.on(["level"]),
116
- index.on(["currentStreak"])
117
- ]
118
- });
119
- /**
120
- * Enrollment entity - course enrollment.
121
- */
122
- const EnrollmentEntity = defineEntity({
123
- name: "Enrollment",
124
- description: "A learner enrollment in a course.",
125
- schema: "lssm_learning",
126
- map: "enrollment",
127
- fields: {
128
- id: field.id({ description: "Unique enrollment identifier" }),
129
- learnerId: field.foreignKey({ description: "Enrolled learner" }),
130
- courseId: field.foreignKey({ description: "Enrolled course" }),
131
- status: field.enum("EnrollmentStatus", {
132
- default: "ENROLLED",
133
- description: "Enrollment status"
134
- }),
135
- progress: field.int({
136
- default: 0,
137
- description: "Completion percentage (0-100)"
138
- }),
139
- completedLessons: field.int({
140
- default: 0,
141
- description: "Number of completed lessons"
142
- }),
143
- totalLessons: field.int({
144
- default: 0,
145
- description: "Total lessons in course"
146
- }),
147
- xpEarned: field.int({
148
- default: 0,
149
- description: "XP earned in this course"
150
- }),
151
- startedAt: field.dateTime({
152
- isOptional: true,
153
- description: "When learner started"
154
- }),
155
- completedAt: field.dateTime({
156
- isOptional: true,
157
- description: "When learner completed"
158
- }),
159
- lastAccessedAt: field.dateTime({
160
- isOptional: true,
161
- description: "Last access time"
162
- }),
163
- certificateId: field.string({
164
- isOptional: true,
165
- description: "Issued certificate ID"
166
- }),
167
- metadata: field.json({
168
- isOptional: true,
169
- description: "Additional metadata"
170
- }),
171
- createdAt: field.createdAt(),
172
- updatedAt: field.updatedAt(),
173
- learner: field.belongsTo("Learner", ["learnerId"], ["id"], { onDelete: "Cascade" }),
174
- course: field.belongsTo("Course", ["courseId"], ["id"], { onDelete: "Cascade" })
175
- },
176
- indexes: [
177
- index.unique(["learnerId", "courseId"], { name: "enrollment_unique" }),
178
- index.on(["learnerId", "status"]),
179
- index.on(["courseId", "status"])
180
- ],
181
- enums: [EnrollmentStatusEnum]
182
- });
183
- /**
184
- * LessonProgress entity - tracks individual lesson progress.
185
- */
186
- const LessonProgressEntity = defineEntity({
187
- name: "LessonProgress",
188
- description: "Progress tracking for a lesson.",
189
- schema: "lssm_learning",
190
- map: "lesson_progress",
191
- fields: {
192
- id: field.id({ description: "Unique progress identifier" }),
193
- learnerId: field.foreignKey({ description: "Learner" }),
194
- lessonId: field.foreignKey({ description: "Lesson" }),
195
- status: field.enum("ProgressStatus", {
196
- default: "NOT_STARTED",
197
- description: "Progress status"
198
- }),
199
- progress: field.int({
200
- default: 0,
201
- description: "Completion percentage (0-100)"
202
- }),
203
- score: field.int({
204
- isOptional: true,
205
- description: "Score achieved (for quizzes)"
206
- }),
207
- attempts: field.int({
208
- default: 0,
209
- description: "Number of attempts"
210
- }),
211
- bestScore: field.int({
212
- isOptional: true,
213
- description: "Best score across attempts"
214
- }),
215
- timeSpent: field.int({
216
- default: 0,
217
- description: "Time spent in seconds"
218
- }),
219
- xpEarned: field.int({
220
- default: 0,
221
- description: "XP earned from this lesson"
222
- }),
223
- startedAt: field.dateTime({
224
- isOptional: true,
225
- description: "When started"
226
- }),
227
- completedAt: field.dateTime({
228
- isOptional: true,
229
- description: "When completed"
230
- }),
231
- lastAccessedAt: field.dateTime({
232
- isOptional: true,
233
- description: "Last access time"
234
- }),
235
- bookmarks: field.json({
236
- isOptional: true,
237
- description: "Content bookmarks"
238
- }),
239
- notes: field.string({
240
- isOptional: true,
241
- description: "Learner notes"
242
- }),
243
- createdAt: field.createdAt(),
244
- updatedAt: field.updatedAt(),
245
- learner: field.belongsTo("Learner", ["learnerId"], ["id"], { onDelete: "Cascade" }),
246
- lesson: field.belongsTo("Lesson", ["lessonId"], ["id"], { onDelete: "Cascade" })
247
- },
248
- indexes: [
249
- index.unique(["learnerId", "lessonId"], { name: "lesson_progress_unique" }),
250
- index.on(["learnerId", "status"]),
251
- index.on(["lessonId"])
252
- ],
253
- enums: [ProgressStatusEnum]
254
- });
255
- /**
256
- * ModuleCompletion entity - tracks module completion.
257
- */
258
- const ModuleCompletionEntity = defineEntity({
259
- name: "ModuleCompletion",
260
- description: "Module completion record.",
261
- schema: "lssm_learning",
262
- map: "module_completion",
263
- fields: {
264
- id: field.id({ description: "Unique completion identifier" }),
265
- learnerId: field.foreignKey({ description: "Learner" }),
266
- moduleId: field.foreignKey({ description: "Module" }),
267
- score: field.int({
268
- isOptional: true,
269
- description: "Average score"
270
- }),
271
- xpEarned: field.int({
272
- default: 0,
273
- description: "XP earned"
274
- }),
275
- timeSpent: field.int({
276
- default: 0,
277
- description: "Time spent in seconds"
278
- }),
279
- completedAt: field.dateTime({ description: "When completed" }),
280
- createdAt: field.createdAt(),
281
- learner: field.belongsTo("Learner", ["learnerId"], ["id"], { onDelete: "Cascade" }),
282
- module: field.belongsTo("CourseModule", ["moduleId"], ["id"], { onDelete: "Cascade" })
283
- },
284
- indexes: [index.unique(["learnerId", "moduleId"], { name: "module_completion_unique" }), index.on(["learnerId", "completedAt"])]
285
- });
286
- /**
287
- * Certificate entity - course completion certificate.
288
- */
289
- const CertificateEntity = defineEntity({
290
- name: "Certificate",
291
- description: "Course completion certificate.",
292
- schema: "lssm_learning",
293
- map: "certificate",
294
- fields: {
295
- id: field.id({ description: "Unique certificate identifier" }),
296
- learnerId: field.foreignKey({ description: "Certificate holder" }),
297
- courseId: field.foreignKey({ description: "Completed course" }),
298
- enrollmentId: field.foreignKey({ description: "Associated enrollment" }),
299
- certificateNumber: field.string({
300
- isUnique: true,
301
- description: "Unique certificate number"
302
- }),
303
- title: field.string({ description: "Certificate title" }),
304
- description: field.string({
305
- isOptional: true,
306
- description: "Certificate description"
307
- }),
308
- score: field.int({
309
- isOptional: true,
310
- description: "Final score"
311
- }),
312
- grade: field.string({
313
- isOptional: true,
314
- description: "Grade awarded"
315
- }),
316
- issuedAt: field.dateTime({ description: "When issued" }),
317
- validUntil: field.dateTime({
318
- isOptional: true,
319
- description: "Expiration date"
320
- }),
321
- verificationUrl: field.string({
322
- isOptional: true,
323
- description: "Verification URL"
324
- }),
325
- credentialHash: field.string({
326
- isOptional: true,
327
- description: "Credential hash for verification"
328
- }),
329
- isRevoked: field.boolean({
330
- default: false,
331
- description: "Whether certificate is revoked"
332
- }),
333
- revokedAt: field.dateTime({
334
- isOptional: true,
335
- description: "When revoked"
336
- }),
337
- revokedReason: field.string({
338
- isOptional: true,
339
- description: "Revocation reason"
340
- }),
341
- metadata: field.json({
342
- isOptional: true,
343
- description: "Additional metadata"
344
- }),
345
- createdAt: field.createdAt(),
346
- learner: field.belongsTo("Learner", ["learnerId"], ["id"], { onDelete: "Cascade" }),
347
- course: field.belongsTo("Course", ["courseId"], ["id"], { onDelete: "Cascade" })
348
- },
349
- indexes: [
350
- index.on(["learnerId"]),
351
- index.on(["courseId"]),
352
- index.on(["issuedAt"])
353
- ]
354
- });
355
- const learnerEntities = [
356
- LearnerEntity,
357
- EnrollmentEntity,
358
- LessonProgressEntity,
359
- ModuleCompletionEntity,
360
- CertificateEntity
361
- ];
362
- const learnerEnums = [EnrollmentStatusEnum, ProgressStatusEnum];
363
-
364
- //#endregion
365
- export { CertificateEntity, EnrollmentEntity, EnrollmentStatusEnum, LearnerEntity, LessonProgressEntity, ModuleCompletionEntity, ProgressStatusEnum, learnerEntities, learnerEnums };
1
+ import{defineEntity as e,defineEntityEnum as t,field as n,index as r}from"@lssm/lib.schema";const i=t({name:`EnrollmentStatus`,values:[`ENROLLED`,`IN_PROGRESS`,`COMPLETED`,`DROPPED`,`EXPIRED`],schema:`lssm_learning`,description:`Status of a course enrollment.`}),a=t({name:`ProgressStatus`,values:[`NOT_STARTED`,`IN_PROGRESS`,`COMPLETED`,`SKIPPED`],schema:`lssm_learning`,description:`Status of lesson progress.`}),o=e({name:`Learner`,description:`A learner profile.`,schema:`lssm_learning`,map:`learner`,fields:{id:n.id({description:`Unique learner identifier`}),userId:n.string({isUnique:!0,description:`Associated user ID`}),displayName:n.string({isOptional:!0,description:`Display name`}),avatarUrl:n.string({isOptional:!0,description:`Avatar URL`}),bio:n.string({isOptional:!0,description:`Short bio`}),level:n.int({default:1,description:`Current level`}),totalXp:n.int({default:0,description:`Total XP earned`}),currentStreak:n.int({default:0,description:`Current streak days`}),longestStreak:n.int({default:0,description:`Longest streak ever`}),lastActivityAt:n.dateTime({isOptional:!0,description:`Last learning activity`}),timezone:n.string({default:`"UTC"`,description:`Learner timezone`}),dailyGoalXp:n.int({default:50,description:`Daily XP goal`}),reminderEnabled:n.boolean({default:!0,description:`Enable reminders`}),reminderTime:n.string({isOptional:!0,description:`Preferred reminder time`}),orgId:n.string({isOptional:!0,description:`Organization scope`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),enrollments:n.hasMany(`Enrollment`),lessonProgress:n.hasMany(`LessonProgress`),achievements:n.hasMany(`LearnerAchievement`),decks:n.hasMany(`Deck`),profile:n.hasOne(`LearnerProfile`)},indexes:[r.on([`orgId`]),r.on([`totalXp`]),r.on([`level`]),r.on([`currentStreak`])]}),s=e({name:`Enrollment`,description:`A learner enrollment in a course.`,schema:`lssm_learning`,map:`enrollment`,fields:{id:n.id({description:`Unique enrollment identifier`}),learnerId:n.foreignKey({description:`Enrolled learner`}),courseId:n.foreignKey({description:`Enrolled course`}),status:n.enum(`EnrollmentStatus`,{default:`ENROLLED`,description:`Enrollment status`}),progress:n.int({default:0,description:`Completion percentage (0-100)`}),completedLessons:n.int({default:0,description:`Number of completed lessons`}),totalLessons:n.int({default:0,description:`Total lessons in course`}),xpEarned:n.int({default:0,description:`XP earned in this course`}),startedAt:n.dateTime({isOptional:!0,description:`When learner started`}),completedAt:n.dateTime({isOptional:!0,description:`When learner completed`}),lastAccessedAt:n.dateTime({isOptional:!0,description:`Last access time`}),certificateId:n.string({isOptional:!0,description:`Issued certificate ID`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),learner:n.belongsTo(`Learner`,[`learnerId`],[`id`],{onDelete:`Cascade`}),course:n.belongsTo(`Course`,[`courseId`],[`id`],{onDelete:`Cascade`})},indexes:[r.unique([`learnerId`,`courseId`],{name:`enrollment_unique`}),r.on([`learnerId`,`status`]),r.on([`courseId`,`status`])],enums:[i]}),c=e({name:`LessonProgress`,description:`Progress tracking for a lesson.`,schema:`lssm_learning`,map:`lesson_progress`,fields:{id:n.id({description:`Unique progress identifier`}),learnerId:n.foreignKey({description:`Learner`}),lessonId:n.foreignKey({description:`Lesson`}),status:n.enum(`ProgressStatus`,{default:`NOT_STARTED`,description:`Progress status`}),progress:n.int({default:0,description:`Completion percentage (0-100)`}),score:n.int({isOptional:!0,description:`Score achieved (for quizzes)`}),attempts:n.int({default:0,description:`Number of attempts`}),bestScore:n.int({isOptional:!0,description:`Best score across attempts`}),timeSpent:n.int({default:0,description:`Time spent in seconds`}),xpEarned:n.int({default:0,description:`XP earned from this lesson`}),startedAt:n.dateTime({isOptional:!0,description:`When started`}),completedAt:n.dateTime({isOptional:!0,description:`When completed`}),lastAccessedAt:n.dateTime({isOptional:!0,description:`Last access time`}),bookmarks:n.json({isOptional:!0,description:`Content bookmarks`}),notes:n.string({isOptional:!0,description:`Learner notes`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),learner:n.belongsTo(`Learner`,[`learnerId`],[`id`],{onDelete:`Cascade`}),lesson:n.belongsTo(`Lesson`,[`lessonId`],[`id`],{onDelete:`Cascade`})},indexes:[r.unique([`learnerId`,`lessonId`],{name:`lesson_progress_unique`}),r.on([`learnerId`,`status`]),r.on([`lessonId`])],enums:[a]}),l=e({name:`ModuleCompletion`,description:`Module completion record.`,schema:`lssm_learning`,map:`module_completion`,fields:{id:n.id({description:`Unique completion identifier`}),learnerId:n.foreignKey({description:`Learner`}),moduleId:n.foreignKey({description:`Module`}),score:n.int({isOptional:!0,description:`Average score`}),xpEarned:n.int({default:0,description:`XP earned`}),timeSpent:n.int({default:0,description:`Time spent in seconds`}),completedAt:n.dateTime({description:`When completed`}),createdAt:n.createdAt(),learner:n.belongsTo(`Learner`,[`learnerId`],[`id`],{onDelete:`Cascade`}),module:n.belongsTo(`CourseModule`,[`moduleId`],[`id`],{onDelete:`Cascade`})},indexes:[r.unique([`learnerId`,`moduleId`],{name:`module_completion_unique`}),r.on([`learnerId`,`completedAt`])]}),u=e({name:`Certificate`,description:`Course completion certificate.`,schema:`lssm_learning`,map:`certificate`,fields:{id:n.id({description:`Unique certificate identifier`}),learnerId:n.foreignKey({description:`Certificate holder`}),courseId:n.foreignKey({description:`Completed course`}),enrollmentId:n.foreignKey({description:`Associated enrollment`}),certificateNumber:n.string({isUnique:!0,description:`Unique certificate number`}),title:n.string({description:`Certificate title`}),description:n.string({isOptional:!0,description:`Certificate description`}),score:n.int({isOptional:!0,description:`Final score`}),grade:n.string({isOptional:!0,description:`Grade awarded`}),issuedAt:n.dateTime({description:`When issued`}),validUntil:n.dateTime({isOptional:!0,description:`Expiration date`}),verificationUrl:n.string({isOptional:!0,description:`Verification URL`}),credentialHash:n.string({isOptional:!0,description:`Credential hash for verification`}),isRevoked:n.boolean({default:!1,description:`Whether certificate is revoked`}),revokedAt:n.dateTime({isOptional:!0,description:`When revoked`}),revokedReason:n.string({isOptional:!0,description:`Revocation reason`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),createdAt:n.createdAt(),learner:n.belongsTo(`Learner`,[`learnerId`],[`id`],{onDelete:`Cascade`}),course:n.belongsTo(`Course`,[`courseId`],[`id`],{onDelete:`Cascade`})},indexes:[r.on([`learnerId`]),r.on([`courseId`]),r.on([`issuedAt`])]}),d=[o,s,c,l,u],f=[i,a];export{u as CertificateEntity,s as EnrollmentEntity,i as EnrollmentStatusEnum,o as LearnerEntity,c as LessonProgressEntity,l as ModuleCompletionEntity,a as ProgressStatusEnum,d as learnerEntities,f as learnerEnums};
@@ -1,307 +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/onboarding.ts
5
- /**
6
- * Onboarding step status enum.
7
- */
8
- const OnboardingStepStatusEnum = defineEntityEnum({
9
- name: "OnboardingStepStatus",
10
- values: [
11
- "PENDING",
12
- "IN_PROGRESS",
13
- "COMPLETED",
14
- "SKIPPED"
15
- ],
16
- schema: "lssm_learning",
17
- description: "Status of an onboarding step."
18
- });
19
- /**
20
- * OnboardingTrack entity - defines an onboarding journey.
21
- */
22
- const OnboardingTrackEntity = defineEntity({
23
- name: "OnboardingTrack",
24
- description: "An onboarding track for a product.",
25
- schema: "lssm_learning",
26
- map: "onboarding_track",
27
- fields: {
28
- id: field.id({ description: "Unique track identifier" }),
29
- productId: field.string({ description: "Product this track is for" }),
30
- name: field.string({ description: "Track name" }),
31
- description: field.string({
32
- isOptional: true,
33
- description: "Track description"
34
- }),
35
- targetUserSegment: field.string({
36
- isOptional: true,
37
- description: "Target user segment"
38
- }),
39
- targetRole: field.string({
40
- isOptional: true,
41
- description: "Target user role"
42
- }),
43
- welcomeTitle: field.string({
44
- isOptional: true,
45
- description: "Welcome message title"
46
- }),
47
- welcomeMessage: field.string({
48
- isOptional: true,
49
- description: "Welcome message"
50
- }),
51
- completionTitle: field.string({
52
- isOptional: true,
53
- description: "Completion message title"
54
- }),
55
- completionMessage: field.string({
56
- isOptional: true,
57
- description: "Completion message"
58
- }),
59
- isActive: field.boolean({
60
- default: true,
61
- description: "Whether track is active"
62
- }),
63
- isRequired: field.boolean({
64
- default: false,
65
- description: "Whether track is required"
66
- }),
67
- canSkip: field.boolean({
68
- default: true,
69
- description: "Whether steps can be skipped"
70
- }),
71
- totalXp: field.int({
72
- default: 100,
73
- description: "Total XP for completing track"
74
- }),
75
- completionXpBonus: field.int({
76
- isOptional: true,
77
- description: "Bonus XP for completing track"
78
- }),
79
- completionBadgeKey: field.string({
80
- isOptional: true,
81
- description: "Badge awarded on completion"
82
- }),
83
- streakHoursWindow: field.int({
84
- isOptional: true,
85
- description: "Hours window to finish for streak bonus"
86
- }),
87
- streakBonusXp: field.int({
88
- isOptional: true,
89
- description: "Bonus XP if completed within streak window"
90
- }),
91
- orgId: field.string({
92
- isOptional: true,
93
- description: "Organization scope"
94
- }),
95
- metadata: field.json({
96
- isOptional: true,
97
- description: "Additional metadata"
98
- }),
99
- createdAt: field.createdAt(),
100
- updatedAt: field.updatedAt(),
101
- steps: field.hasMany("OnboardingStep"),
102
- progress: field.hasMany("OnboardingProgress")
103
- },
104
- indexes: [
105
- index.on(["productId", "isActive"]),
106
- index.on(["orgId"]),
107
- index.unique([
108
- "productId",
109
- "targetUserSegment",
110
- "targetRole"
111
- ], { name: "onboarding_track_target" })
112
- ]
113
- });
114
- /**
115
- * OnboardingStep entity - a step in an onboarding track.
116
- */
117
- const OnboardingStepEntity = defineEntity({
118
- name: "OnboardingStep",
119
- description: "A step in an onboarding track.",
120
- schema: "lssm_learning",
121
- map: "onboarding_step",
122
- fields: {
123
- id: field.id({ description: "Unique step identifier" }),
124
- trackId: field.foreignKey({ description: "Parent track" }),
125
- title: field.string({ description: "Step title" }),
126
- description: field.string({
127
- isOptional: true,
128
- description: "Step description"
129
- }),
130
- instructions: field.string({
131
- isOptional: true,
132
- description: "How to complete the step"
133
- }),
134
- helpUrl: field.string({
135
- isOptional: true,
136
- description: "Link to help documentation"
137
- }),
138
- order: field.int({
139
- default: 0,
140
- description: "Display order"
141
- }),
142
- triggerEvent: field.string({
143
- isOptional: true,
144
- description: "Event that triggers step start"
145
- }),
146
- completionEvent: field.string({ description: "Event that completes the step" }),
147
- completionEventVersion: field.int({
148
- isOptional: true,
149
- description: "Version of the completion event"
150
- }),
151
- completionSourceModule: field.string({
152
- isOptional: true,
153
- description: "Module emitting the completion event"
154
- }),
155
- completionEventFilter: field.json({
156
- isOptional: true,
157
- description: "Filter for completion event"
158
- }),
159
- actionUrl: field.string({
160
- isOptional: true,
161
- description: "URL to navigate to complete"
162
- }),
163
- actionLabel: field.string({
164
- isOptional: true,
165
- description: "Action button label"
166
- }),
167
- highlightSelector: field.string({
168
- isOptional: true,
169
- description: "CSS selector to highlight"
170
- }),
171
- tooltipPosition: field.string({
172
- isOptional: true,
173
- description: "Tooltip position"
174
- }),
175
- xpReward: field.int({
176
- default: 10,
177
- description: "XP for completing step"
178
- }),
179
- isRequired: field.boolean({
180
- default: true,
181
- description: "Whether step is required"
182
- }),
183
- canSkip: field.boolean({
184
- default: true,
185
- description: "Whether step can be skipped"
186
- }),
187
- metadata: field.json({
188
- isOptional: true,
189
- description: "Additional metadata"
190
- }),
191
- createdAt: field.createdAt(),
192
- updatedAt: field.updatedAt(),
193
- track: field.belongsTo("OnboardingTrack", ["trackId"], ["id"], { onDelete: "Cascade" })
194
- },
195
- indexes: [index.on(["trackId", "order"]), index.on(["completionEvent"])]
196
- });
197
- /**
198
- * OnboardingProgress entity - tracks user progress through onboarding.
199
- */
200
- const OnboardingProgressEntity = defineEntity({
201
- name: "OnboardingProgress",
202
- description: "Tracks user progress through an onboarding track.",
203
- schema: "lssm_learning",
204
- map: "onboarding_progress",
205
- fields: {
206
- id: field.id({ description: "Unique progress identifier" }),
207
- learnerId: field.foreignKey({ description: "Learner" }),
208
- trackId: field.foreignKey({ description: "Onboarding track" }),
209
- currentStepId: field.string({
210
- isOptional: true,
211
- description: "Current step ID"
212
- }),
213
- completedSteps: field.json({
214
- default: "[]",
215
- description: "Array of completed step IDs"
216
- }),
217
- skippedSteps: field.json({
218
- default: "[]",
219
- description: "Array of skipped step IDs"
220
- }),
221
- progress: field.int({
222
- default: 0,
223
- description: "Completion percentage (0-100)"
224
- }),
225
- isCompleted: field.boolean({
226
- default: false,
227
- description: "Whether track is completed"
228
- }),
229
- xpEarned: field.int({
230
- default: 0,
231
- description: "XP earned from track"
232
- }),
233
- startedAt: field.dateTime({ description: "When user started" }),
234
- completedAt: field.dateTime({
235
- isOptional: true,
236
- description: "When user completed"
237
- }),
238
- lastActivityAt: field.dateTime({
239
- isOptional: true,
240
- description: "Last activity"
241
- }),
242
- isDismissed: field.boolean({
243
- default: false,
244
- description: "Whether user dismissed onboarding"
245
- }),
246
- dismissedAt: field.dateTime({
247
- isOptional: true,
248
- description: "When dismissed"
249
- }),
250
- metadata: field.json({
251
- isOptional: true,
252
- description: "Additional metadata"
253
- }),
254
- createdAt: field.createdAt(),
255
- updatedAt: field.updatedAt(),
256
- learner: field.belongsTo("Learner", ["learnerId"], ["id"], { onDelete: "Cascade" }),
257
- track: field.belongsTo("OnboardingTrack", ["trackId"], ["id"], { onDelete: "Cascade" })
258
- },
259
- indexes: [
260
- index.unique(["learnerId", "trackId"], { name: "onboarding_progress_unique" }),
261
- index.on(["learnerId", "isCompleted"]),
262
- index.on(["trackId"])
263
- ],
264
- enums: [OnboardingStepStatusEnum]
265
- });
266
- /**
267
- * OnboardingStepCompletion entity - individual step completions.
268
- */
269
- const OnboardingStepCompletionEntity = defineEntity({
270
- name: "OnboardingStepCompletion",
271
- description: "Individual step completion record.",
272
- schema: "lssm_learning",
273
- map: "onboarding_step_completion",
274
- fields: {
275
- id: field.id({ description: "Unique completion identifier" }),
276
- progressId: field.foreignKey({ description: "Parent progress record" }),
277
- stepId: field.foreignKey({ description: "Completed step" }),
278
- status: field.enum("OnboardingStepStatus", { description: "Completion status" }),
279
- xpEarned: field.int({
280
- default: 0,
281
- description: "XP earned"
282
- }),
283
- triggeringEvent: field.string({
284
- isOptional: true,
285
- description: "Event that triggered completion"
286
- }),
287
- eventPayload: field.json({
288
- isOptional: true,
289
- description: "Event payload"
290
- }),
291
- completedAt: field.dateTime({ description: "When completed" }),
292
- createdAt: field.createdAt(),
293
- progress: field.belongsTo("OnboardingProgress", ["progressId"], ["id"], { onDelete: "Cascade" }),
294
- step: field.belongsTo("OnboardingStep", ["stepId"], ["id"], { onDelete: "Cascade" })
295
- },
296
- indexes: [index.unique(["progressId", "stepId"], { name: "step_completion_unique" }), index.on(["completedAt"])]
297
- });
298
- const onboardingEntities = [
299
- OnboardingTrackEntity,
300
- OnboardingStepEntity,
301
- OnboardingProgressEntity,
302
- OnboardingStepCompletionEntity
303
- ];
304
- const onboardingEnums = [OnboardingStepStatusEnum];
305
-
306
- //#endregion
307
- export { OnboardingProgressEntity, OnboardingStepCompletionEntity, OnboardingStepEntity, OnboardingStepStatusEnum, OnboardingTrackEntity, onboardingEntities, onboardingEnums };
1
+ import{defineEntity as e,defineEntityEnum as t,field as n,index as r}from"@lssm/lib.schema";const i=t({name:`OnboardingStepStatus`,values:[`PENDING`,`IN_PROGRESS`,`COMPLETED`,`SKIPPED`],schema:`lssm_learning`,description:`Status of an onboarding step.`}),a=e({name:`OnboardingTrack`,description:`An onboarding track for a product.`,schema:`lssm_learning`,map:`onboarding_track`,fields:{id:n.id({description:`Unique track identifier`}),productId:n.string({description:`Product this track is for`}),name:n.string({description:`Track name`}),description:n.string({isOptional:!0,description:`Track description`}),targetUserSegment:n.string({isOptional:!0,description:`Target user segment`}),targetRole:n.string({isOptional:!0,description:`Target user role`}),welcomeTitle:n.string({isOptional:!0,description:`Welcome message title`}),welcomeMessage:n.string({isOptional:!0,description:`Welcome message`}),completionTitle:n.string({isOptional:!0,description:`Completion message title`}),completionMessage:n.string({isOptional:!0,description:`Completion message`}),isActive:n.boolean({default:!0,description:`Whether track is active`}),isRequired:n.boolean({default:!1,description:`Whether track is required`}),canSkip:n.boolean({default:!0,description:`Whether steps can be skipped`}),totalXp:n.int({default:100,description:`Total XP for completing track`}),completionXpBonus:n.int({isOptional:!0,description:`Bonus XP for completing track`}),completionBadgeKey:n.string({isOptional:!0,description:`Badge awarded on completion`}),streakHoursWindow:n.int({isOptional:!0,description:`Hours window to finish for streak bonus`}),streakBonusXp:n.int({isOptional:!0,description:`Bonus XP if completed within streak window`}),orgId:n.string({isOptional:!0,description:`Organization scope`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),steps:n.hasMany(`OnboardingStep`),progress:n.hasMany(`OnboardingProgress`)},indexes:[r.on([`productId`,`isActive`]),r.on([`orgId`]),r.unique([`productId`,`targetUserSegment`,`targetRole`],{name:`onboarding_track_target`})]}),o=e({name:`OnboardingStep`,description:`A step in an onboarding track.`,schema:`lssm_learning`,map:`onboarding_step`,fields:{id:n.id({description:`Unique step identifier`}),trackId:n.foreignKey({description:`Parent track`}),title:n.string({description:`Step title`}),description:n.string({isOptional:!0,description:`Step description`}),instructions:n.string({isOptional:!0,description:`How to complete the step`}),helpUrl:n.string({isOptional:!0,description:`Link to help documentation`}),order:n.int({default:0,description:`Display order`}),triggerEvent:n.string({isOptional:!0,description:`Event that triggers step start`}),completionEvent:n.string({description:`Event that completes the step`}),completionEventVersion:n.int({isOptional:!0,description:`Version of the completion event`}),completionSourceModule:n.string({isOptional:!0,description:`Module emitting the completion event`}),completionEventFilter:n.json({isOptional:!0,description:`Filter for completion event`}),actionUrl:n.string({isOptional:!0,description:`URL to navigate to complete`}),actionLabel:n.string({isOptional:!0,description:`Action button label`}),highlightSelector:n.string({isOptional:!0,description:`CSS selector to highlight`}),tooltipPosition:n.string({isOptional:!0,description:`Tooltip position`}),xpReward:n.int({default:10,description:`XP for completing step`}),isRequired:n.boolean({default:!0,description:`Whether step is required`}),canSkip:n.boolean({default:!0,description:`Whether step can be skipped`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),track:n.belongsTo(`OnboardingTrack`,[`trackId`],[`id`],{onDelete:`Cascade`})},indexes:[r.on([`trackId`,`order`]),r.on([`completionEvent`])]}),s=e({name:`OnboardingProgress`,description:`Tracks user progress through an onboarding track.`,schema:`lssm_learning`,map:`onboarding_progress`,fields:{id:n.id({description:`Unique progress identifier`}),learnerId:n.foreignKey({description:`Learner`}),trackId:n.foreignKey({description:`Onboarding track`}),currentStepId:n.string({isOptional:!0,description:`Current step ID`}),completedSteps:n.json({default:`[]`,description:`Array of completed step IDs`}),skippedSteps:n.json({default:`[]`,description:`Array of skipped step IDs`}),progress:n.int({default:0,description:`Completion percentage (0-100)`}),isCompleted:n.boolean({default:!1,description:`Whether track is completed`}),xpEarned:n.int({default:0,description:`XP earned from track`}),startedAt:n.dateTime({description:`When user started`}),completedAt:n.dateTime({isOptional:!0,description:`When user completed`}),lastActivityAt:n.dateTime({isOptional:!0,description:`Last activity`}),isDismissed:n.boolean({default:!1,description:`Whether user dismissed onboarding`}),dismissedAt:n.dateTime({isOptional:!0,description:`When dismissed`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),learner:n.belongsTo(`Learner`,[`learnerId`],[`id`],{onDelete:`Cascade`}),track:n.belongsTo(`OnboardingTrack`,[`trackId`],[`id`],{onDelete:`Cascade`})},indexes:[r.unique([`learnerId`,`trackId`],{name:`onboarding_progress_unique`}),r.on([`learnerId`,`isCompleted`]),r.on([`trackId`])],enums:[i]}),c=e({name:`OnboardingStepCompletion`,description:`Individual step completion record.`,schema:`lssm_learning`,map:`onboarding_step_completion`,fields:{id:n.id({description:`Unique completion identifier`}),progressId:n.foreignKey({description:`Parent progress record`}),stepId:n.foreignKey({description:`Completed step`}),status:n.enum(`OnboardingStepStatus`,{description:`Completion status`}),xpEarned:n.int({default:0,description:`XP earned`}),triggeringEvent:n.string({isOptional:!0,description:`Event that triggered completion`}),eventPayload:n.json({isOptional:!0,description:`Event payload`}),completedAt:n.dateTime({description:`When completed`}),createdAt:n.createdAt(),progress:n.belongsTo(`OnboardingProgress`,[`progressId`],[`id`],{onDelete:`Cascade`}),step:n.belongsTo(`OnboardingStep`,[`stepId`],[`id`],{onDelete:`Cascade`})},indexes:[r.unique([`progressId`,`stepId`],{name:`step_completion_unique`}),r.on([`completedAt`])]}),l=[a,o,s,c],u=[i];export{s as OnboardingProgressEntity,c as OnboardingStepCompletionEntity,o as OnboardingStepEntity,i as OnboardingStepStatusEnum,a as OnboardingTrackEntity,l as onboardingEntities,u as onboardingEnums};