@lssm/module.learning-journey 0.0.0-canary-20251217063201 → 0.0.0-canary-20251217072406
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.
- package/dist/contracts/index.js +6 -1
- package/dist/contracts/models.d.ts +118 -118
- package/dist/contracts/models.js +389 -1
- package/dist/contracts/onboarding.d.ts +167 -167
- package/dist/contracts/onboarding.js +404 -1
- package/dist/contracts/operations.d.ts +70 -70
- package/dist/contracts/operations.js +151 -1
- package/dist/contracts/shared.js +5 -1
- package/dist/docs/index.js +1 -1
- package/dist/docs/learning-journey.docblock.js +61 -5
- package/dist/engines/index.js +5 -1
- package/dist/engines/srs.js +219 -1
- package/dist/engines/streak.js +193 -1
- package/dist/engines/xp.js +212 -1
- package/dist/entities/ai.d.ts +200 -200
- package/dist/entities/ai.js +376 -1
- package/dist/entities/course.d.ts +150 -150
- package/dist/entities/course.js +316 -1
- package/dist/entities/flashcard.d.ts +145 -145
- package/dist/entities/flashcard.js +249 -1
- package/dist/entities/gamification.d.ts +198 -198
- package/dist/entities/gamification.js +392 -1
- package/dist/entities/index.d.ts +605 -605
- package/dist/entities/index.js +44 -1
- package/dist/entities/learner.d.ts +192 -192
- package/dist/entities/learner.js +365 -1
- package/dist/entities/onboarding.d.ts +165 -165
- package/dist/entities/onboarding.js +307 -1
- package/dist/entities/quiz.d.ts +185 -185
- package/dist/entities/quiz.js +370 -1
- package/dist/events.d.ts +213 -213
- package/dist/events.js +583 -1
- package/dist/index.js +22 -1
- package/dist/learning-journey.feature.js +148 -1
- package/dist/libs/contracts/dist/capabilities/openbanking.js +88 -1
- package/dist/libs/contracts/dist/client/index.js +5 -1
- package/dist/libs/contracts/dist/client/react/feature-render.js +2 -1
- package/dist/libs/contracts/dist/client/react/form-render.js +4 -1
- package/dist/libs/contracts/dist/client/react/index.js +4 -1
- package/dist/libs/contracts/dist/contract-registry/index.js +1 -1
- package/dist/libs/contracts/dist/contract-registry/schemas.js +60 -1
- package/dist/libs/contracts/dist/docs/PUBLISHING.docblock.js +16 -76
- package/dist/libs/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +16 -350
- package/dist/libs/contracts/dist/docs/index.js +29 -1
- package/dist/libs/contracts/dist/docs/presentations.js +71 -1
- package/dist/libs/contracts/dist/docs/registry.js +44 -1
- package/dist/libs/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +16 -383
- package/dist/libs/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +16 -68
- package/dist/libs/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +16 -140
- package/dist/libs/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +16 -86
- package/dist/libs/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +16 -1
- package/dist/libs/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js +24 -2
- package/dist/libs/contracts/dist/docs/tech/contracts/openapi-export.docblock.js +21 -2
- package/dist/libs/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +16 -213
- package/dist/libs/contracts/dist/docs/tech/llm/llm-integration.docblock.js +73 -5
- package/dist/libs/contracts/dist/docs/tech/mcp-endpoints.docblock.js +37 -1
- package/dist/libs/contracts/dist/docs/tech/presentation-runtime.docblock.js +16 -1
- package/dist/libs/contracts/dist/docs/tech/schema/README.docblock.js +20 -262
- package/dist/libs/contracts/dist/docs/tech/studio/learning-events.docblock.js +48 -1
- package/dist/libs/contracts/dist/docs/tech/studio/learning-journeys.docblock.js +24 -2
- package/dist/libs/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js +23 -2
- package/dist/libs/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +25 -16
- package/dist/libs/contracts/dist/docs/tech/studio/project-routing.docblock.js +67 -1
- package/dist/libs/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +22 -2
- package/dist/libs/contracts/dist/docs/tech/studio/team-invitations.docblock.js +40 -36
- package/dist/libs/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +47 -1
- package/dist/libs/contracts/dist/docs/tech/studio/workspaces.docblock.js +23 -2
- package/dist/libs/contracts/dist/docs/tech/telemetry-ingest.docblock.js +36 -3
- package/dist/libs/contracts/dist/docs/tech/templates/runtime.docblock.js +20 -1
- package/dist/libs/contracts/dist/docs/tech/vscode-extension.docblock.js +36 -3
- package/dist/libs/contracts/dist/docs/tech/workflows/overview.docblock.js +20 -1
- package/dist/libs/contracts/dist/events.js +10 -1
- package/dist/libs/contracts/dist/experiments/evaluator.js +1 -1
- package/dist/libs/contracts/dist/index.js +71 -1
- package/dist/libs/contracts/dist/install.js +2 -1
- package/dist/libs/contracts/dist/integrations/contracts.js +377 -1
- package/dist/libs/contracts/dist/integrations/index.js +18 -1
- package/dist/libs/contracts/dist/integrations/openbanking/contracts/accounts.js +228 -1
- package/dist/libs/contracts/dist/integrations/openbanking/contracts/balances.js +159 -1
- package/dist/libs/contracts/dist/integrations/openbanking/contracts/index.js +3 -1
- package/dist/libs/contracts/dist/integrations/openbanking/contracts/transactions.js +210 -1
- package/dist/libs/contracts/dist/integrations/openbanking/models.js +242 -1
- package/dist/libs/contracts/dist/integrations/openbanking/telemetry.js +13 -1
- package/dist/libs/contracts/dist/integrations/providers/elevenlabs.js +52 -1
- package/dist/libs/contracts/dist/integrations/providers/gcs-storage.js +75 -1
- package/dist/libs/contracts/dist/integrations/providers/gmail.js +87 -1
- package/dist/libs/contracts/dist/integrations/providers/google-calendar.js +66 -1
- package/dist/libs/contracts/dist/integrations/providers/index.js +11 -1
- package/dist/libs/contracts/dist/integrations/providers/mistral.js +68 -1
- package/dist/libs/contracts/dist/integrations/providers/postmark.js +68 -1
- package/dist/libs/contracts/dist/integrations/providers/powens.js +116 -1
- package/dist/libs/contracts/dist/integrations/providers/qdrant.js +73 -1
- package/dist/libs/contracts/dist/integrations/providers/registry.js +10 -1
- package/dist/libs/contracts/dist/integrations/providers/stripe.js +83 -1
- package/dist/libs/contracts/dist/integrations/providers/twilio-sms.js +61 -1
- package/dist/libs/contracts/dist/jsonschema.js +1 -1
- package/dist/libs/contracts/dist/knowledge/contracts.js +306 -1
- package/dist/libs/contracts/dist/knowledge/index.js +7 -1
- package/dist/libs/contracts/dist/knowledge/spaces/email-threads.js +34 -1
- package/dist/libs/contracts/dist/knowledge/spaces/financial-docs.js +34 -1
- package/dist/libs/contracts/dist/knowledge/spaces/financial-overview.js +38 -1
- package/dist/libs/contracts/dist/knowledge/spaces/index.js +6 -1
- package/dist/libs/contracts/dist/knowledge/spaces/product-canon.js +34 -1
- package/dist/libs/contracts/dist/knowledge/spaces/support-faq.js +37 -1
- package/dist/libs/contracts/dist/knowledge/spaces/uploaded-docs.js +34 -1
- package/dist/libs/contracts/dist/llm/exporters.js +19 -1
- package/dist/libs/contracts/dist/llm/index.js +2 -1
- package/dist/libs/contracts/dist/llm/prompts.js +1 -1
- package/dist/libs/contracts/dist/onboarding-base.js +196 -1
- package/dist/libs/contracts/dist/openapi.js +1 -1
- package/dist/libs/contracts/dist/ownership.js +21 -1
- package/dist/libs/contracts/dist/presentations.js +1 -1
- package/dist/libs/contracts/dist/presentations.v2.js +11 -1
- package/dist/libs/contracts/dist/prompt.js +1 -1
- package/dist/libs/contracts/dist/promptRegistry.js +1 -1
- package/dist/libs/contracts/dist/regenerator/index.js +1 -1
- package/dist/libs/contracts/dist/regenerator/service.js +6 -1
- package/dist/libs/contracts/dist/registry.js +2 -1
- package/dist/libs/contracts/dist/resources.js +1 -1
- package/dist/libs/contracts/dist/schema/dist/EnumType.js +2 -1
- package/dist/libs/contracts/dist/schema/dist/FieldType.js +49 -1
- package/dist/libs/contracts/dist/schema/dist/ScalarTypeEnum.js +236 -1
- package/dist/libs/contracts/dist/schema/dist/SchemaModel.js +34 -1
- package/dist/libs/contracts/dist/schema/dist/entity/defineEntity.js +1 -1
- package/dist/libs/contracts/dist/schema/dist/entity/index.js +2 -1
- package/dist/libs/contracts/dist/schema/dist/entity/types.js +1 -1
- package/dist/libs/contracts/dist/schema/dist/index.js +6 -1
- package/dist/libs/contracts/dist/server/graphql-pothos.js +6 -1
- package/dist/libs/contracts/dist/server/index.js +8 -1
- package/dist/libs/contracts/dist/server/mcp/createMcpServer.js +4 -1
- package/dist/libs/contracts/dist/server/mcp/registerPresentations.js +2 -1
- package/dist/libs/contracts/dist/server/mcp/registerPrompts.js +1 -1
- package/dist/libs/contracts/dist/server/mcp/registerResources.js +2 -1
- package/dist/libs/contracts/dist/server/mcp/registerTools.js +1 -1
- package/dist/libs/contracts/dist/server/provider-mcp.js +1 -1
- package/dist/libs/contracts/dist/server/rest-elysia.js +1 -1
- package/dist/libs/contracts/dist/server/rest-express.js +1 -1
- package/dist/libs/contracts/dist/server/rest-generic.js +1 -1
- package/dist/libs/contracts/dist/server/rest-next-app.js +1 -1
- package/dist/libs/contracts/dist/server/rest-next-pages.js +1 -1
- package/dist/libs/contracts/dist/spec.js +34 -1
- package/dist/libs/contracts/dist/telemetry/index.js +1 -1
- package/dist/libs/contracts/dist/telemetry/tracker.js +1 -1
- package/dist/libs/contracts/dist/tests/index.js +1 -1
- package/dist/libs/contracts/dist/tests/runner.js +2 -1
- package/dist/libs/contracts/dist/workflow/index.js +1 -1
- package/dist/libs/contracts/dist/workflow/runner.js +1 -1
- package/dist/libs/schema/dist/EnumType.js +2 -1
- package/dist/libs/schema/dist/FieldType.js +49 -1
- package/dist/libs/schema/dist/ScalarTypeEnum.js +236 -1
- package/dist/libs/schema/dist/SchemaModel.js +39 -1
- package/dist/libs/schema/dist/entity/defineEntity.js +236 -1
- package/dist/libs/schema/dist/entity/index.js +2 -1
- package/dist/libs/schema/dist/entity/types.js +1 -1
- package/dist/libs/schema/dist/index.js +6 -1
- package/package.json +5 -5
|
@@ -1 +1,307 @@
|
|
|
1
|
-
import{
|
|
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 };
|