@lssm/module.learning-journey 0.0.0-canary-20251217083314 → 0.0.0-canary-20251219202229
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/LICENSE +21 -0
- package/README.md +2 -0
- package/dist/contracts/models.d.ts +120 -119
- package/dist/contracts/models.d.ts.map +1 -0
- package/dist/contracts/models.js +87 -88
- package/dist/contracts/models.js.map +1 -0
- package/dist/contracts/onboarding.d.ts +170 -169
- package/dist/contracts/onboarding.d.ts.map +1 -0
- package/dist/contracts/onboarding.js +71 -72
- package/dist/contracts/onboarding.js.map +1 -0
- package/dist/contracts/operations.d.ts +73 -72
- package/dist/contracts/operations.d.ts.map +1 -0
- package/dist/contracts/operations.js +2 -1
- package/dist/contracts/operations.js.map +1 -0
- package/dist/contracts/shared.d.ts +2 -1
- package/dist/contracts/shared.d.ts.map +1 -0
- package/dist/contracts/shared.js +2 -1
- package/dist/contracts/shared.js.map +1 -0
- package/dist/docs/learning-journey.docblock.js +2 -1
- package/dist/docs/learning-journey.docblock.js.map +1 -0
- package/dist/engines/srs.d.ts +2 -1
- package/dist/engines/srs.d.ts.map +1 -0
- package/dist/engines/srs.js +2 -1
- package/dist/engines/srs.js.map +1 -0
- package/dist/engines/streak.d.ts +2 -1
- package/dist/engines/streak.d.ts.map +1 -0
- package/dist/engines/streak.js +2 -1
- package/dist/engines/streak.js.map +1 -0
- package/dist/engines/xp.d.ts +2 -1
- package/dist/engines/xp.d.ts.map +1 -0
- package/dist/engines/xp.js +2 -1
- package/dist/engines/xp.js.map +1 -0
- package/dist/entities/ai.d.ts +202 -201
- package/dist/entities/ai.d.ts.map +1 -0
- package/dist/entities/ai.js +114 -114
- package/dist/entities/ai.js.map +1 -0
- package/dist/entities/course.d.ts +152 -151
- package/dist/entities/course.d.ts.map +1 -0
- package/dist/entities/course.js +86 -86
- package/dist/entities/course.js.map +1 -0
- package/dist/entities/flashcard.d.ts +147 -146
- package/dist/entities/flashcard.d.ts.map +1 -0
- package/dist/entities/flashcard.js +85 -85
- package/dist/entities/flashcard.js.map +1 -0
- package/dist/entities/gamification.d.ts +200 -199
- package/dist/entities/gamification.d.ts.map +1 -0
- package/dist/entities/gamification.js +120 -120
- package/dist/entities/gamification.js.map +1 -0
- package/dist/entities/index.d.ts +607 -606
- package/dist/entities/index.d.ts.map +1 -0
- package/dist/entities/index.js +2 -1
- package/dist/entities/index.js.map +1 -0
- package/dist/entities/learner.d.ts +194 -193
- package/dist/entities/learner.d.ts.map +1 -0
- package/dist/entities/learner.js +113 -113
- package/dist/entities/learner.js.map +1 -0
- package/dist/entities/onboarding.d.ts +167 -166
- package/dist/entities/onboarding.d.ts.map +1 -0
- package/dist/entities/onboarding.js +93 -93
- package/dist/entities/onboarding.js.map +1 -0
- package/dist/entities/quiz.d.ts +187 -186
- package/dist/entities/quiz.d.ts.map +1 -0
- package/dist/entities/quiz.js +109 -109
- package/dist/entities/quiz.js.map +1 -0
- package/dist/events.d.ts +216 -215
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +109 -110
- package/dist/events.js.map +1 -0
- package/dist/learning-journey.feature.d.ts +2 -1
- package/dist/learning-journey.feature.d.ts.map +1 -0
- package/dist/learning-journey.feature.js +2 -1
- package/dist/learning-journey.feature.js.map +1 -0
- package/dist/libs/contracts/dist/capabilities/openbanking.js +2 -1
- package/dist/libs/contracts/dist/capabilities/openbanking.js.map +1 -0
- package/dist/libs/contracts/dist/contract-registry/schemas.js +2 -1
- package/dist/libs/contracts/dist/contract-registry/schemas.js.map +1 -0
- package/dist/libs/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/index.js +2 -6
- package/dist/libs/contracts/dist/docs/meta.docs.js +30 -0
- package/dist/libs/contracts/dist/docs/meta.docs.js.map +1 -0
- package/dist/libs/contracts/dist/docs/presentations.js +2 -1
- package/dist/libs/contracts/dist/docs/presentations.js.map +1 -0
- package/dist/libs/contracts/dist/docs/registry.js +2 -1
- package/dist/libs/contracts/dist/docs/registry.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/contracts/openapi-export.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/contracts/openapi-export.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/llm/llm-integration.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/llm/llm-integration.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/mcp-endpoints.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/mcp-endpoints.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/presentation-runtime.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/presentation-runtime.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/schema/README.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/schema/README.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/studio/learning-events.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/studio/learning-events.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/studio/learning-journeys.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/studio/learning-journeys.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/studio/project-access-teams.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/studio/project-routing.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/studio/project-routing.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/studio/team-invitations.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/studio/team-invitations.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/studio/workspace-ops.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/studio/workspaces.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/studio/workspaces.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/telemetry-ingest.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/telemetry-ingest.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/templates/runtime.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/templates/runtime.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/vscode-extension.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/vscode-extension.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech/workflows/overview.docblock.js +2 -1
- package/dist/libs/contracts/dist/docs/tech/workflows/overview.docblock.js.map +1 -0
- package/dist/libs/contracts/dist/docs/tech-contracts.docs.js +97 -0
- package/dist/libs/contracts/dist/docs/tech-contracts.docs.js.map +1 -0
- package/dist/libs/contracts/dist/events.js +2 -1
- package/dist/libs/contracts/dist/events.js.map +1 -0
- package/dist/libs/contracts/dist/index.js +2 -1
- package/dist/libs/contracts/dist/integrations/contracts.js +65 -66
- package/dist/libs/contracts/dist/integrations/contracts.js.map +1 -0
- package/dist/libs/contracts/dist/integrations/openbanking/contracts/accounts.js +31 -32
- package/dist/libs/contracts/dist/integrations/openbanking/contracts/accounts.js.map +1 -0
- package/dist/libs/contracts/dist/integrations/openbanking/contracts/balances.js +18 -19
- package/dist/libs/contracts/dist/integrations/openbanking/contracts/balances.js.map +1 -0
- package/dist/libs/contracts/dist/integrations/openbanking/contracts/transactions.js +32 -33
- package/dist/libs/contracts/dist/integrations/openbanking/contracts/transactions.js.map +1 -0
- package/dist/libs/contracts/dist/integrations/openbanking/models.js +60 -61
- package/dist/libs/contracts/dist/integrations/openbanking/models.js.map +1 -0
- package/dist/libs/contracts/dist/integrations/openbanking/telemetry.js +2 -1
- package/dist/libs/contracts/dist/integrations/openbanking/telemetry.js.map +1 -0
- package/dist/libs/contracts/dist/integrations/providers/elevenlabs.js +2 -1
- package/dist/libs/contracts/dist/integrations/providers/elevenlabs.js.map +1 -0
- package/dist/libs/contracts/dist/integrations/providers/gcs-storage.js +2 -1
- package/dist/libs/contracts/dist/integrations/providers/gcs-storage.js.map +1 -0
- package/dist/libs/contracts/dist/integrations/providers/gmail.js +2 -1
- package/dist/libs/contracts/dist/integrations/providers/gmail.js.map +1 -0
- package/dist/libs/contracts/dist/integrations/providers/google-calendar.js +2 -1
- package/dist/libs/contracts/dist/integrations/providers/google-calendar.js.map +1 -0
- package/dist/libs/contracts/dist/integrations/providers/mistral.js +2 -1
- package/dist/libs/contracts/dist/integrations/providers/mistral.js.map +1 -0
- package/dist/libs/contracts/dist/integrations/providers/postmark.js +2 -1
- package/dist/libs/contracts/dist/integrations/providers/postmark.js.map +1 -0
- package/dist/libs/contracts/dist/integrations/providers/powens.js +2 -1
- package/dist/libs/contracts/dist/integrations/providers/powens.js.map +1 -0
- package/dist/libs/contracts/dist/integrations/providers/qdrant.js +2 -1
- package/dist/libs/contracts/dist/integrations/providers/qdrant.js.map +1 -0
- package/dist/libs/contracts/dist/integrations/providers/stripe.js +2 -1
- package/dist/libs/contracts/dist/integrations/providers/stripe.js.map +1 -0
- package/dist/libs/contracts/dist/integrations/providers/twilio-sms.js +2 -1
- package/dist/libs/contracts/dist/integrations/providers/twilio-sms.js.map +1 -0
- package/dist/libs/contracts/dist/knowledge/contracts.js +44 -45
- package/dist/libs/contracts/dist/knowledge/contracts.js.map +1 -0
- package/dist/libs/contracts/dist/knowledge/spaces/email-threads.js +2 -1
- package/dist/libs/contracts/dist/knowledge/spaces/email-threads.js.map +1 -0
- package/dist/libs/contracts/dist/knowledge/spaces/financial-docs.js +2 -1
- package/dist/libs/contracts/dist/knowledge/spaces/financial-docs.js.map +1 -0
- package/dist/libs/contracts/dist/knowledge/spaces/financial-overview.js +2 -1
- package/dist/libs/contracts/dist/knowledge/spaces/financial-overview.js.map +1 -0
- package/dist/libs/contracts/dist/knowledge/spaces/product-canon.js +2 -1
- package/dist/libs/contracts/dist/knowledge/spaces/product-canon.js.map +1 -0
- package/dist/libs/contracts/dist/knowledge/spaces/support-faq.js +2 -1
- package/dist/libs/contracts/dist/knowledge/spaces/support-faq.js.map +1 -0
- package/dist/libs/contracts/dist/knowledge/spaces/uploaded-docs.js +2 -1
- package/dist/libs/contracts/dist/knowledge/spaces/uploaded-docs.js.map +1 -0
- package/dist/libs/contracts/dist/llm/exporters.js +2 -1
- package/dist/libs/contracts/dist/llm/exporters.js.map +1 -0
- package/dist/libs/contracts/dist/onboarding-base.js +22 -23
- package/dist/libs/contracts/dist/onboarding-base.js.map +1 -0
- package/dist/libs/contracts/dist/ownership.js +4 -2
- package/dist/libs/contracts/dist/ownership.js.map +1 -0
- package/dist/libs/contracts/dist/presentations.v2.js +2 -1
- package/dist/libs/contracts/dist/presentations.v2.js.map +1 -0
- package/dist/libs/contracts/dist/regenerator/service.js +2 -1
- package/dist/libs/contracts/dist/regenerator/service.js.map +1 -0
- package/dist/libs/contracts/dist/schema/dist/index.js +3873 -6
- package/dist/libs/contracts/dist/schema/dist/index.js.map +1 -0
- package/dist/libs/contracts/dist/spec.js +2 -1
- package/dist/libs/contracts/dist/spec.js.map +1 -0
- package/dist/libs/schema/dist/index.js +4889 -6
- package/dist/libs/schema/dist/index.js.map +1 -0
- package/dist/track-spec.d.ts +2 -1
- package/dist/track-spec.d.ts.map +1 -0
- package/package.json +7 -6
- package/dist/libs/contracts/dist/docs/PUBLISHING.docblock.js +0 -16
- package/dist/libs/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +0 -16
- package/dist/libs/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +0 -16
- package/dist/libs/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +0 -16
- package/dist/libs/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +0 -16
- package/dist/libs/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +0 -16
- package/dist/libs/contracts/dist/schema/dist/EnumType.js +0 -2
- package/dist/libs/contracts/dist/schema/dist/FieldType.js +0 -49
- package/dist/libs/contracts/dist/schema/dist/ScalarTypeEnum.js +0 -236
- package/dist/libs/contracts/dist/schema/dist/SchemaModel.js +0 -34
- package/dist/libs/contracts/dist/schema/dist/entity/defineEntity.js +0 -1
- package/dist/libs/contracts/dist/schema/dist/entity/index.js +0 -2
- package/dist/libs/contracts/dist/schema/dist/entity/types.js +0 -1
- package/dist/libs/schema/dist/EnumType.js +0 -2
- package/dist/libs/schema/dist/FieldType.js +0 -49
- package/dist/libs/schema/dist/ScalarTypeEnum.js +0 -236
- package/dist/libs/schema/dist/SchemaModel.js +0 -39
- package/dist/libs/schema/dist/entity/defineEntity.js +0 -236
- package/dist/libs/schema/dist/entity/index.js +0 -2
- package/dist/libs/schema/dist/entity/types.js +0 -1
package/dist/entities/learner.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "../libs/schema/dist/index.js";
|
|
1
|
+
import { L5, Z5, _5, b5 } from "../libs/schema/dist/index.js";
|
|
3
2
|
|
|
4
3
|
//#region src/entities/learner.ts
|
|
5
4
|
/**
|
|
6
5
|
* Enrollment status enum.
|
|
7
6
|
*/
|
|
8
|
-
const EnrollmentStatusEnum =
|
|
7
|
+
const EnrollmentStatusEnum = Z5({
|
|
9
8
|
name: "EnrollmentStatus",
|
|
10
9
|
values: [
|
|
11
10
|
"ENROLLED",
|
|
@@ -20,7 +19,7 @@ const EnrollmentStatusEnum = defineEntityEnum({
|
|
|
20
19
|
/**
|
|
21
20
|
* Progress status enum.
|
|
22
21
|
*/
|
|
23
|
-
const ProgressStatusEnum =
|
|
22
|
+
const ProgressStatusEnum = Z5({
|
|
24
23
|
name: "ProgressStatus",
|
|
25
24
|
values: [
|
|
26
25
|
"NOT_STARTED",
|
|
@@ -34,322 +33,322 @@ const ProgressStatusEnum = defineEntityEnum({
|
|
|
34
33
|
/**
|
|
35
34
|
* Learner entity - learning profile.
|
|
36
35
|
*/
|
|
37
|
-
const LearnerEntity =
|
|
36
|
+
const LearnerEntity = L5({
|
|
38
37
|
name: "Learner",
|
|
39
38
|
description: "A learner profile.",
|
|
40
39
|
schema: "lssm_learning",
|
|
41
40
|
map: "learner",
|
|
42
41
|
fields: {
|
|
43
|
-
id:
|
|
44
|
-
userId:
|
|
42
|
+
id: _5.id({ description: "Unique learner identifier" }),
|
|
43
|
+
userId: _5.string({
|
|
45
44
|
isUnique: true,
|
|
46
45
|
description: "Associated user ID"
|
|
47
46
|
}),
|
|
48
|
-
displayName:
|
|
47
|
+
displayName: _5.string({
|
|
49
48
|
isOptional: true,
|
|
50
49
|
description: "Display name"
|
|
51
50
|
}),
|
|
52
|
-
avatarUrl:
|
|
51
|
+
avatarUrl: _5.string({
|
|
53
52
|
isOptional: true,
|
|
54
53
|
description: "Avatar URL"
|
|
55
54
|
}),
|
|
56
|
-
bio:
|
|
55
|
+
bio: _5.string({
|
|
57
56
|
isOptional: true,
|
|
58
57
|
description: "Short bio"
|
|
59
58
|
}),
|
|
60
|
-
level:
|
|
59
|
+
level: _5.int({
|
|
61
60
|
default: 1,
|
|
62
61
|
description: "Current level"
|
|
63
62
|
}),
|
|
64
|
-
totalXp:
|
|
63
|
+
totalXp: _5.int({
|
|
65
64
|
default: 0,
|
|
66
65
|
description: "Total XP earned"
|
|
67
66
|
}),
|
|
68
|
-
currentStreak:
|
|
67
|
+
currentStreak: _5.int({
|
|
69
68
|
default: 0,
|
|
70
69
|
description: "Current streak days"
|
|
71
70
|
}),
|
|
72
|
-
longestStreak:
|
|
71
|
+
longestStreak: _5.int({
|
|
73
72
|
default: 0,
|
|
74
73
|
description: "Longest streak ever"
|
|
75
74
|
}),
|
|
76
|
-
lastActivityAt:
|
|
75
|
+
lastActivityAt: _5.dateTime({
|
|
77
76
|
isOptional: true,
|
|
78
77
|
description: "Last learning activity"
|
|
79
78
|
}),
|
|
80
|
-
timezone:
|
|
79
|
+
timezone: _5.string({
|
|
81
80
|
default: "\"UTC\"",
|
|
82
81
|
description: "Learner timezone"
|
|
83
82
|
}),
|
|
84
|
-
dailyGoalXp:
|
|
83
|
+
dailyGoalXp: _5.int({
|
|
85
84
|
default: 50,
|
|
86
85
|
description: "Daily XP goal"
|
|
87
86
|
}),
|
|
88
|
-
reminderEnabled:
|
|
87
|
+
reminderEnabled: _5.boolean({
|
|
89
88
|
default: true,
|
|
90
89
|
description: "Enable reminders"
|
|
91
90
|
}),
|
|
92
|
-
reminderTime:
|
|
91
|
+
reminderTime: _5.string({
|
|
93
92
|
isOptional: true,
|
|
94
93
|
description: "Preferred reminder time"
|
|
95
94
|
}),
|
|
96
|
-
orgId:
|
|
95
|
+
orgId: _5.string({
|
|
97
96
|
isOptional: true,
|
|
98
97
|
description: "Organization scope"
|
|
99
98
|
}),
|
|
100
|
-
metadata:
|
|
99
|
+
metadata: _5.json({
|
|
101
100
|
isOptional: true,
|
|
102
101
|
description: "Additional metadata"
|
|
103
102
|
}),
|
|
104
|
-
createdAt:
|
|
105
|
-
updatedAt:
|
|
106
|
-
enrollments:
|
|
107
|
-
lessonProgress:
|
|
108
|
-
achievements:
|
|
109
|
-
decks:
|
|
110
|
-
profile:
|
|
103
|
+
createdAt: _5.createdAt(),
|
|
104
|
+
updatedAt: _5.updatedAt(),
|
|
105
|
+
enrollments: _5.hasMany("Enrollment"),
|
|
106
|
+
lessonProgress: _5.hasMany("LessonProgress"),
|
|
107
|
+
achievements: _5.hasMany("LearnerAchievement"),
|
|
108
|
+
decks: _5.hasMany("Deck"),
|
|
109
|
+
profile: _5.hasOne("LearnerProfile")
|
|
111
110
|
},
|
|
112
111
|
indexes: [
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
112
|
+
b5.on(["orgId"]),
|
|
113
|
+
b5.on(["totalXp"]),
|
|
114
|
+
b5.on(["level"]),
|
|
115
|
+
b5.on(["currentStreak"])
|
|
117
116
|
]
|
|
118
117
|
});
|
|
119
118
|
/**
|
|
120
119
|
* Enrollment entity - course enrollment.
|
|
121
120
|
*/
|
|
122
|
-
const EnrollmentEntity =
|
|
121
|
+
const EnrollmentEntity = L5({
|
|
123
122
|
name: "Enrollment",
|
|
124
123
|
description: "A learner enrollment in a course.",
|
|
125
124
|
schema: "lssm_learning",
|
|
126
125
|
map: "enrollment",
|
|
127
126
|
fields: {
|
|
128
|
-
id:
|
|
129
|
-
learnerId:
|
|
130
|
-
courseId:
|
|
131
|
-
status:
|
|
127
|
+
id: _5.id({ description: "Unique enrollment identifier" }),
|
|
128
|
+
learnerId: _5.foreignKey({ description: "Enrolled learner" }),
|
|
129
|
+
courseId: _5.foreignKey({ description: "Enrolled course" }),
|
|
130
|
+
status: _5.enum("EnrollmentStatus", {
|
|
132
131
|
default: "ENROLLED",
|
|
133
132
|
description: "Enrollment status"
|
|
134
133
|
}),
|
|
135
|
-
progress:
|
|
134
|
+
progress: _5.int({
|
|
136
135
|
default: 0,
|
|
137
136
|
description: "Completion percentage (0-100)"
|
|
138
137
|
}),
|
|
139
|
-
completedLessons:
|
|
138
|
+
completedLessons: _5.int({
|
|
140
139
|
default: 0,
|
|
141
140
|
description: "Number of completed lessons"
|
|
142
141
|
}),
|
|
143
|
-
totalLessons:
|
|
142
|
+
totalLessons: _5.int({
|
|
144
143
|
default: 0,
|
|
145
144
|
description: "Total lessons in course"
|
|
146
145
|
}),
|
|
147
|
-
xpEarned:
|
|
146
|
+
xpEarned: _5.int({
|
|
148
147
|
default: 0,
|
|
149
148
|
description: "XP earned in this course"
|
|
150
149
|
}),
|
|
151
|
-
startedAt:
|
|
150
|
+
startedAt: _5.dateTime({
|
|
152
151
|
isOptional: true,
|
|
153
152
|
description: "When learner started"
|
|
154
153
|
}),
|
|
155
|
-
completedAt:
|
|
154
|
+
completedAt: _5.dateTime({
|
|
156
155
|
isOptional: true,
|
|
157
156
|
description: "When learner completed"
|
|
158
157
|
}),
|
|
159
|
-
lastAccessedAt:
|
|
158
|
+
lastAccessedAt: _5.dateTime({
|
|
160
159
|
isOptional: true,
|
|
161
160
|
description: "Last access time"
|
|
162
161
|
}),
|
|
163
|
-
certificateId:
|
|
162
|
+
certificateId: _5.string({
|
|
164
163
|
isOptional: true,
|
|
165
164
|
description: "Issued certificate ID"
|
|
166
165
|
}),
|
|
167
|
-
metadata:
|
|
166
|
+
metadata: _5.json({
|
|
168
167
|
isOptional: true,
|
|
169
168
|
description: "Additional metadata"
|
|
170
169
|
}),
|
|
171
|
-
createdAt:
|
|
172
|
-
updatedAt:
|
|
173
|
-
learner:
|
|
174
|
-
course:
|
|
170
|
+
createdAt: _5.createdAt(),
|
|
171
|
+
updatedAt: _5.updatedAt(),
|
|
172
|
+
learner: _5.belongsTo("Learner", ["learnerId"], ["id"], { onDelete: "Cascade" }),
|
|
173
|
+
course: _5.belongsTo("Course", ["courseId"], ["id"], { onDelete: "Cascade" })
|
|
175
174
|
},
|
|
176
175
|
indexes: [
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
176
|
+
b5.unique(["learnerId", "courseId"], { name: "enrollment_unique" }),
|
|
177
|
+
b5.on(["learnerId", "status"]),
|
|
178
|
+
b5.on(["courseId", "status"])
|
|
180
179
|
],
|
|
181
180
|
enums: [EnrollmentStatusEnum]
|
|
182
181
|
});
|
|
183
182
|
/**
|
|
184
183
|
* LessonProgress entity - tracks individual lesson progress.
|
|
185
184
|
*/
|
|
186
|
-
const LessonProgressEntity =
|
|
185
|
+
const LessonProgressEntity = L5({
|
|
187
186
|
name: "LessonProgress",
|
|
188
187
|
description: "Progress tracking for a lesson.",
|
|
189
188
|
schema: "lssm_learning",
|
|
190
189
|
map: "lesson_progress",
|
|
191
190
|
fields: {
|
|
192
|
-
id:
|
|
193
|
-
learnerId:
|
|
194
|
-
lessonId:
|
|
195
|
-
status:
|
|
191
|
+
id: _5.id({ description: "Unique progress identifier" }),
|
|
192
|
+
learnerId: _5.foreignKey({ description: "Learner" }),
|
|
193
|
+
lessonId: _5.foreignKey({ description: "Lesson" }),
|
|
194
|
+
status: _5.enum("ProgressStatus", {
|
|
196
195
|
default: "NOT_STARTED",
|
|
197
196
|
description: "Progress status"
|
|
198
197
|
}),
|
|
199
|
-
progress:
|
|
198
|
+
progress: _5.int({
|
|
200
199
|
default: 0,
|
|
201
200
|
description: "Completion percentage (0-100)"
|
|
202
201
|
}),
|
|
203
|
-
score:
|
|
202
|
+
score: _5.int({
|
|
204
203
|
isOptional: true,
|
|
205
204
|
description: "Score achieved (for quizzes)"
|
|
206
205
|
}),
|
|
207
|
-
attempts:
|
|
206
|
+
attempts: _5.int({
|
|
208
207
|
default: 0,
|
|
209
208
|
description: "Number of attempts"
|
|
210
209
|
}),
|
|
211
|
-
bestScore:
|
|
210
|
+
bestScore: _5.int({
|
|
212
211
|
isOptional: true,
|
|
213
212
|
description: "Best score across attempts"
|
|
214
213
|
}),
|
|
215
|
-
timeSpent:
|
|
214
|
+
timeSpent: _5.int({
|
|
216
215
|
default: 0,
|
|
217
216
|
description: "Time spent in seconds"
|
|
218
217
|
}),
|
|
219
|
-
xpEarned:
|
|
218
|
+
xpEarned: _5.int({
|
|
220
219
|
default: 0,
|
|
221
220
|
description: "XP earned from this lesson"
|
|
222
221
|
}),
|
|
223
|
-
startedAt:
|
|
222
|
+
startedAt: _5.dateTime({
|
|
224
223
|
isOptional: true,
|
|
225
224
|
description: "When started"
|
|
226
225
|
}),
|
|
227
|
-
completedAt:
|
|
226
|
+
completedAt: _5.dateTime({
|
|
228
227
|
isOptional: true,
|
|
229
228
|
description: "When completed"
|
|
230
229
|
}),
|
|
231
|
-
lastAccessedAt:
|
|
230
|
+
lastAccessedAt: _5.dateTime({
|
|
232
231
|
isOptional: true,
|
|
233
232
|
description: "Last access time"
|
|
234
233
|
}),
|
|
235
|
-
bookmarks:
|
|
234
|
+
bookmarks: _5.json({
|
|
236
235
|
isOptional: true,
|
|
237
236
|
description: "Content bookmarks"
|
|
238
237
|
}),
|
|
239
|
-
notes:
|
|
238
|
+
notes: _5.string({
|
|
240
239
|
isOptional: true,
|
|
241
240
|
description: "Learner notes"
|
|
242
241
|
}),
|
|
243
|
-
createdAt:
|
|
244
|
-
updatedAt:
|
|
245
|
-
learner:
|
|
246
|
-
lesson:
|
|
242
|
+
createdAt: _5.createdAt(),
|
|
243
|
+
updatedAt: _5.updatedAt(),
|
|
244
|
+
learner: _5.belongsTo("Learner", ["learnerId"], ["id"], { onDelete: "Cascade" }),
|
|
245
|
+
lesson: _5.belongsTo("Lesson", ["lessonId"], ["id"], { onDelete: "Cascade" })
|
|
247
246
|
},
|
|
248
247
|
indexes: [
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
248
|
+
b5.unique(["learnerId", "lessonId"], { name: "lesson_progress_unique" }),
|
|
249
|
+
b5.on(["learnerId", "status"]),
|
|
250
|
+
b5.on(["lessonId"])
|
|
252
251
|
],
|
|
253
252
|
enums: [ProgressStatusEnum]
|
|
254
253
|
});
|
|
255
254
|
/**
|
|
256
255
|
* ModuleCompletion entity - tracks module completion.
|
|
257
256
|
*/
|
|
258
|
-
const ModuleCompletionEntity =
|
|
257
|
+
const ModuleCompletionEntity = L5({
|
|
259
258
|
name: "ModuleCompletion",
|
|
260
259
|
description: "Module completion record.",
|
|
261
260
|
schema: "lssm_learning",
|
|
262
261
|
map: "module_completion",
|
|
263
262
|
fields: {
|
|
264
|
-
id:
|
|
265
|
-
learnerId:
|
|
266
|
-
moduleId:
|
|
267
|
-
score:
|
|
263
|
+
id: _5.id({ description: "Unique completion identifier" }),
|
|
264
|
+
learnerId: _5.foreignKey({ description: "Learner" }),
|
|
265
|
+
moduleId: _5.foreignKey({ description: "Module" }),
|
|
266
|
+
score: _5.int({
|
|
268
267
|
isOptional: true,
|
|
269
268
|
description: "Average score"
|
|
270
269
|
}),
|
|
271
|
-
xpEarned:
|
|
270
|
+
xpEarned: _5.int({
|
|
272
271
|
default: 0,
|
|
273
272
|
description: "XP earned"
|
|
274
273
|
}),
|
|
275
|
-
timeSpent:
|
|
274
|
+
timeSpent: _5.int({
|
|
276
275
|
default: 0,
|
|
277
276
|
description: "Time spent in seconds"
|
|
278
277
|
}),
|
|
279
|
-
completedAt:
|
|
280
|
-
createdAt:
|
|
281
|
-
learner:
|
|
282
|
-
module:
|
|
278
|
+
completedAt: _5.dateTime({ description: "When completed" }),
|
|
279
|
+
createdAt: _5.createdAt(),
|
|
280
|
+
learner: _5.belongsTo("Learner", ["learnerId"], ["id"], { onDelete: "Cascade" }),
|
|
281
|
+
module: _5.belongsTo("CourseModule", ["moduleId"], ["id"], { onDelete: "Cascade" })
|
|
283
282
|
},
|
|
284
|
-
indexes: [
|
|
283
|
+
indexes: [b5.unique(["learnerId", "moduleId"], { name: "module_completion_unique" }), b5.on(["learnerId", "completedAt"])]
|
|
285
284
|
});
|
|
286
285
|
/**
|
|
287
286
|
* Certificate entity - course completion certificate.
|
|
288
287
|
*/
|
|
289
|
-
const CertificateEntity =
|
|
288
|
+
const CertificateEntity = L5({
|
|
290
289
|
name: "Certificate",
|
|
291
290
|
description: "Course completion certificate.",
|
|
292
291
|
schema: "lssm_learning",
|
|
293
292
|
map: "certificate",
|
|
294
293
|
fields: {
|
|
295
|
-
id:
|
|
296
|
-
learnerId:
|
|
297
|
-
courseId:
|
|
298
|
-
enrollmentId:
|
|
299
|
-
certificateNumber:
|
|
294
|
+
id: _5.id({ description: "Unique certificate identifier" }),
|
|
295
|
+
learnerId: _5.foreignKey({ description: "Certificate holder" }),
|
|
296
|
+
courseId: _5.foreignKey({ description: "Completed course" }),
|
|
297
|
+
enrollmentId: _5.foreignKey({ description: "Associated enrollment" }),
|
|
298
|
+
certificateNumber: _5.string({
|
|
300
299
|
isUnique: true,
|
|
301
300
|
description: "Unique certificate number"
|
|
302
301
|
}),
|
|
303
|
-
title:
|
|
304
|
-
description:
|
|
302
|
+
title: _5.string({ description: "Certificate title" }),
|
|
303
|
+
description: _5.string({
|
|
305
304
|
isOptional: true,
|
|
306
305
|
description: "Certificate description"
|
|
307
306
|
}),
|
|
308
|
-
score:
|
|
307
|
+
score: _5.int({
|
|
309
308
|
isOptional: true,
|
|
310
309
|
description: "Final score"
|
|
311
310
|
}),
|
|
312
|
-
grade:
|
|
311
|
+
grade: _5.string({
|
|
313
312
|
isOptional: true,
|
|
314
313
|
description: "Grade awarded"
|
|
315
314
|
}),
|
|
316
|
-
issuedAt:
|
|
317
|
-
validUntil:
|
|
315
|
+
issuedAt: _5.dateTime({ description: "When issued" }),
|
|
316
|
+
validUntil: _5.dateTime({
|
|
318
317
|
isOptional: true,
|
|
319
318
|
description: "Expiration date"
|
|
320
319
|
}),
|
|
321
|
-
verificationUrl:
|
|
320
|
+
verificationUrl: _5.string({
|
|
322
321
|
isOptional: true,
|
|
323
322
|
description: "Verification URL"
|
|
324
323
|
}),
|
|
325
|
-
credentialHash:
|
|
324
|
+
credentialHash: _5.string({
|
|
326
325
|
isOptional: true,
|
|
327
326
|
description: "Credential hash for verification"
|
|
328
327
|
}),
|
|
329
|
-
isRevoked:
|
|
328
|
+
isRevoked: _5.boolean({
|
|
330
329
|
default: false,
|
|
331
330
|
description: "Whether certificate is revoked"
|
|
332
331
|
}),
|
|
333
|
-
revokedAt:
|
|
332
|
+
revokedAt: _5.dateTime({
|
|
334
333
|
isOptional: true,
|
|
335
334
|
description: "When revoked"
|
|
336
335
|
}),
|
|
337
|
-
revokedReason:
|
|
336
|
+
revokedReason: _5.string({
|
|
338
337
|
isOptional: true,
|
|
339
338
|
description: "Revocation reason"
|
|
340
339
|
}),
|
|
341
|
-
metadata:
|
|
340
|
+
metadata: _5.json({
|
|
342
341
|
isOptional: true,
|
|
343
342
|
description: "Additional metadata"
|
|
344
343
|
}),
|
|
345
|
-
createdAt:
|
|
346
|
-
learner:
|
|
347
|
-
course:
|
|
344
|
+
createdAt: _5.createdAt(),
|
|
345
|
+
learner: _5.belongsTo("Learner", ["learnerId"], ["id"], { onDelete: "Cascade" }),
|
|
346
|
+
course: _5.belongsTo("Course", ["courseId"], ["id"], { onDelete: "Cascade" })
|
|
348
347
|
},
|
|
349
348
|
indexes: [
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
349
|
+
b5.on(["learnerId"]),
|
|
350
|
+
b5.on(["courseId"]),
|
|
351
|
+
b5.on(["issuedAt"])
|
|
353
352
|
]
|
|
354
353
|
});
|
|
355
354
|
const learnerEntities = [
|
|
@@ -362,4 +361,5 @@ const learnerEntities = [
|
|
|
362
361
|
const learnerEnums = [EnrollmentStatusEnum, ProgressStatusEnum];
|
|
363
362
|
|
|
364
363
|
//#endregion
|
|
365
|
-
export { CertificateEntity, EnrollmentEntity, EnrollmentStatusEnum, LearnerEntity, LessonProgressEntity, ModuleCompletionEntity, ProgressStatusEnum, learnerEntities, learnerEnums };
|
|
364
|
+
export { CertificateEntity, EnrollmentEntity, EnrollmentStatusEnum, LearnerEntity, LessonProgressEntity, ModuleCompletionEntity, ProgressStatusEnum, learnerEntities, learnerEnums };
|
|
365
|
+
//# sourceMappingURL=learner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learner.js","names":["defineEntityEnum","defineEntity","field","index"],"sources":["../../src/entities/learner.ts"],"sourcesContent":["import { defineEntity, defineEntityEnum, field, index } from '@lssm/lib.schema';\n\n/**\n * Enrollment status enum.\n */\nexport const EnrollmentStatusEnum = defineEntityEnum({\n name: 'EnrollmentStatus',\n values: [\n 'ENROLLED',\n 'IN_PROGRESS',\n 'COMPLETED',\n 'DROPPED',\n 'EXPIRED',\n ] as const,\n schema: 'lssm_learning',\n description: 'Status of a course enrollment.',\n});\n\n/**\n * Progress status enum.\n */\nexport const ProgressStatusEnum = defineEntityEnum({\n name: 'ProgressStatus',\n values: ['NOT_STARTED', 'IN_PROGRESS', 'COMPLETED', 'SKIPPED'] as const,\n schema: 'lssm_learning',\n description: 'Status of lesson progress.',\n});\n\n/**\n * Learner entity - learning profile.\n */\nexport const LearnerEntity = defineEntity({\n name: 'Learner',\n description: 'A learner profile.',\n schema: 'lssm_learning',\n map: 'learner',\n fields: {\n id: field.id({ description: 'Unique learner identifier' }),\n userId: field.string({ isUnique: true, description: 'Associated user ID' }),\n\n // Profile\n displayName: field.string({\n isOptional: true,\n description: 'Display name',\n }),\n avatarUrl: field.string({ isOptional: true, description: 'Avatar URL' }),\n bio: field.string({ isOptional: true, description: 'Short bio' }),\n\n // Gamification\n level: field.int({ default: 1, description: 'Current level' }),\n totalXp: field.int({ default: 0, description: 'Total XP earned' }),\n\n // Streaks\n currentStreak: field.int({\n default: 0,\n description: 'Current streak days',\n }),\n longestStreak: field.int({\n default: 0,\n description: 'Longest streak ever',\n }),\n lastActivityAt: field.dateTime({\n isOptional: true,\n description: 'Last learning activity',\n }),\n\n // Settings\n timezone: field.string({\n default: '\"UTC\"',\n description: 'Learner timezone',\n }),\n dailyGoalXp: field.int({ default: 50, description: 'Daily XP goal' }),\n reminderEnabled: field.boolean({\n default: true,\n description: 'Enable reminders',\n }),\n reminderTime: field.string({\n isOptional: true,\n description: 'Preferred reminder time',\n }),\n\n // Organization scope\n orgId: field.string({\n isOptional: true,\n description: 'Organization scope',\n }),\n\n // Metadata\n metadata: field.json({\n isOptional: true,\n description: 'Additional metadata',\n }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n\n // Relations\n enrollments: field.hasMany('Enrollment'),\n lessonProgress: field.hasMany('LessonProgress'),\n achievements: field.hasMany('LearnerAchievement'),\n decks: field.hasMany('Deck'),\n profile: field.hasOne('LearnerProfile'),\n },\n indexes: [\n index.on(['orgId']),\n index.on(['totalXp']),\n index.on(['level']),\n index.on(['currentStreak']),\n ],\n});\n\n/**\n * Enrollment entity - course enrollment.\n */\nexport const EnrollmentEntity = defineEntity({\n name: 'Enrollment',\n description: 'A learner enrollment in a course.',\n schema: 'lssm_learning',\n map: 'enrollment',\n fields: {\n id: field.id({ description: 'Unique enrollment identifier' }),\n learnerId: field.foreignKey({ description: 'Enrolled learner' }),\n courseId: field.foreignKey({ description: 'Enrolled course' }),\n\n // Status\n status: field.enum('EnrollmentStatus', {\n default: 'ENROLLED',\n description: 'Enrollment status',\n }),\n\n // Progress\n progress: field.int({\n default: 0,\n description: 'Completion percentage (0-100)',\n }),\n completedLessons: field.int({\n default: 0,\n description: 'Number of completed lessons',\n }),\n totalLessons: field.int({\n default: 0,\n description: 'Total lessons in course',\n }),\n\n // XP\n xpEarned: field.int({\n default: 0,\n description: 'XP earned in this course',\n }),\n\n // Timeline\n startedAt: field.dateTime({\n isOptional: true,\n description: 'When learner started',\n }),\n completedAt: field.dateTime({\n isOptional: true,\n description: 'When learner completed',\n }),\n lastAccessedAt: field.dateTime({\n isOptional: true,\n description: 'Last access time',\n }),\n\n // Certificate\n certificateId: field.string({\n isOptional: true,\n description: 'Issued certificate ID',\n }),\n\n // Metadata\n metadata: field.json({\n isOptional: true,\n description: 'Additional metadata',\n }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n\n // Relations\n learner: field.belongsTo('Learner', ['learnerId'], ['id'], {\n onDelete: 'Cascade',\n }),\n course: field.belongsTo('Course', ['courseId'], ['id'], {\n onDelete: 'Cascade',\n }),\n },\n indexes: [\n index.unique(['learnerId', 'courseId'], { name: 'enrollment_unique' }),\n index.on(['learnerId', 'status']),\n index.on(['courseId', 'status']),\n ],\n enums: [EnrollmentStatusEnum],\n});\n\n/**\n * LessonProgress entity - tracks individual lesson progress.\n */\nexport const LessonProgressEntity = defineEntity({\n name: 'LessonProgress',\n description: 'Progress tracking for a lesson.',\n schema: 'lssm_learning',\n map: 'lesson_progress',\n fields: {\n id: field.id({ description: 'Unique progress identifier' }),\n learnerId: field.foreignKey({ description: 'Learner' }),\n lessonId: field.foreignKey({ description: 'Lesson' }),\n\n // Status\n status: field.enum('ProgressStatus', {\n default: 'NOT_STARTED',\n description: 'Progress status',\n }),\n\n // Progress details\n progress: field.int({\n default: 0,\n description: 'Completion percentage (0-100)',\n }),\n score: field.int({\n isOptional: true,\n description: 'Score achieved (for quizzes)',\n }),\n\n // Attempts\n attempts: field.int({ default: 0, description: 'Number of attempts' }),\n bestScore: field.int({\n isOptional: true,\n description: 'Best score across attempts',\n }),\n\n // Time tracking\n timeSpent: field.int({ default: 0, description: 'Time spent in seconds' }),\n\n // XP\n xpEarned: field.int({\n default: 0,\n description: 'XP earned from this lesson',\n }),\n\n // Timeline\n startedAt: field.dateTime({\n isOptional: true,\n description: 'When started',\n }),\n completedAt: field.dateTime({\n isOptional: true,\n description: 'When completed',\n }),\n lastAccessedAt: field.dateTime({\n isOptional: true,\n description: 'Last access time',\n }),\n\n // Bookmarks and notes\n bookmarks: field.json({\n isOptional: true,\n description: 'Content bookmarks',\n }),\n notes: field.string({ isOptional: true, description: 'Learner notes' }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n\n // Relations\n learner: field.belongsTo('Learner', ['learnerId'], ['id'], {\n onDelete: 'Cascade',\n }),\n lesson: field.belongsTo('Lesson', ['lessonId'], ['id'], {\n onDelete: 'Cascade',\n }),\n },\n indexes: [\n index.unique(['learnerId', 'lessonId'], { name: 'lesson_progress_unique' }),\n index.on(['learnerId', 'status']),\n index.on(['lessonId']),\n ],\n enums: [ProgressStatusEnum],\n});\n\n/**\n * ModuleCompletion entity - tracks module completion.\n */\nexport const ModuleCompletionEntity = defineEntity({\n name: 'ModuleCompletion',\n description: 'Module completion record.',\n schema: 'lssm_learning',\n map: 'module_completion',\n fields: {\n id: field.id({ description: 'Unique completion identifier' }),\n learnerId: field.foreignKey({ description: 'Learner' }),\n moduleId: field.foreignKey({ description: 'Module' }),\n\n // Completion details\n score: field.int({ isOptional: true, description: 'Average score' }),\n xpEarned: field.int({ default: 0, description: 'XP earned' }),\n timeSpent: field.int({ default: 0, description: 'Time spent in seconds' }),\n\n // Timestamps\n completedAt: field.dateTime({ description: 'When completed' }),\n createdAt: field.createdAt(),\n\n // Relations\n learner: field.belongsTo('Learner', ['learnerId'], ['id'], {\n onDelete: 'Cascade',\n }),\n module: field.belongsTo('CourseModule', ['moduleId'], ['id'], {\n onDelete: 'Cascade',\n }),\n },\n indexes: [\n index.unique(['learnerId', 'moduleId'], {\n name: 'module_completion_unique',\n }),\n index.on(['learnerId', 'completedAt']),\n ],\n});\n\n/**\n * Certificate entity - course completion certificate.\n */\nexport const CertificateEntity = defineEntity({\n name: 'Certificate',\n description: 'Course completion certificate.',\n schema: 'lssm_learning',\n map: 'certificate',\n fields: {\n id: field.id({ description: 'Unique certificate identifier' }),\n learnerId: field.foreignKey({ description: 'Certificate holder' }),\n courseId: field.foreignKey({ description: 'Completed course' }),\n enrollmentId: field.foreignKey({ description: 'Associated enrollment' }),\n\n // Certificate details\n certificateNumber: field.string({\n isUnique: true,\n description: 'Unique certificate number',\n }),\n title: field.string({ description: 'Certificate title' }),\n description: field.string({\n isOptional: true,\n description: 'Certificate description',\n }),\n\n // Completion details\n score: field.int({ isOptional: true, description: 'Final score' }),\n grade: field.string({ isOptional: true, description: 'Grade awarded' }),\n\n // Validity\n issuedAt: field.dateTime({ description: 'When issued' }),\n validUntil: field.dateTime({\n isOptional: true,\n description: 'Expiration date',\n }),\n\n // Verification\n verificationUrl: field.string({\n isOptional: true,\n description: 'Verification URL',\n }),\n credentialHash: field.string({\n isOptional: true,\n description: 'Credential hash for verification',\n }),\n\n // Status\n isRevoked: field.boolean({\n default: false,\n description: 'Whether certificate is revoked',\n }),\n revokedAt: field.dateTime({\n isOptional: true,\n description: 'When revoked',\n }),\n revokedReason: field.string({\n isOptional: true,\n description: 'Revocation reason',\n }),\n\n // Metadata\n metadata: field.json({\n isOptional: true,\n description: 'Additional metadata',\n }),\n\n // Timestamps\n createdAt: field.createdAt(),\n\n // Relations\n learner: field.belongsTo('Learner', ['learnerId'], ['id'], {\n onDelete: 'Cascade',\n }),\n course: field.belongsTo('Course', ['courseId'], ['id'], {\n onDelete: 'Cascade',\n }),\n },\n indexes: [\n index.on(['learnerId']),\n index.on(['courseId']),\n index.on(['issuedAt']),\n ],\n});\n\nexport const learnerEntities = [\n LearnerEntity,\n EnrollmentEntity,\n LessonProgressEntity,\n ModuleCompletionEntity,\n CertificateEntity,\n];\n\nexport const learnerEnums = [EnrollmentStatusEnum, ProgressStatusEnum];\n"],"mappings":";;;;;;AAKA,MAAa,uBAAuBA,GAAiB;CACnD,MAAM;CACN,QAAQ;EACN;EACA;EACA;EACA;EACA;EACD;CACD,QAAQ;CACR,aAAa;CACd,CAAC;;;;AAKF,MAAa,qBAAqBA,GAAiB;CACjD,MAAM;CACN,QAAQ;EAAC;EAAe;EAAe;EAAa;EAAU;CAC9D,QAAQ;CACR,aAAa;CACd,CAAC;;;;AAKF,MAAa,gBAAgBC,GAAa;CACxC,MAAM;CACN,aAAa;CACb,QAAQ;CACR,KAAK;CACL,QAAQ;EACN,IAAIC,GAAM,GAAG,EAAE,aAAa,6BAA6B,CAAC;EAC1D,QAAQA,GAAM,OAAO;GAAE,UAAU;GAAM,aAAa;GAAsB,CAAC;EAG3E,aAAaA,GAAM,OAAO;GACxB,YAAY;GACZ,aAAa;GACd,CAAC;EACF,WAAWA,GAAM,OAAO;GAAE,YAAY;GAAM,aAAa;GAAc,CAAC;EACxE,KAAKA,GAAM,OAAO;GAAE,YAAY;GAAM,aAAa;GAAa,CAAC;EAGjE,OAAOA,GAAM,IAAI;GAAE,SAAS;GAAG,aAAa;GAAiB,CAAC;EAC9D,SAASA,GAAM,IAAI;GAAE,SAAS;GAAG,aAAa;GAAmB,CAAC;EAGlE,eAAeA,GAAM,IAAI;GACvB,SAAS;GACT,aAAa;GACd,CAAC;EACF,eAAeA,GAAM,IAAI;GACvB,SAAS;GACT,aAAa;GACd,CAAC;EACF,gBAAgBA,GAAM,SAAS;GAC7B,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,UAAUA,GAAM,OAAO;GACrB,SAAS;GACT,aAAa;GACd,CAAC;EACF,aAAaA,GAAM,IAAI;GAAE,SAAS;GAAI,aAAa;GAAiB,CAAC;EACrE,iBAAiBA,GAAM,QAAQ;GAC7B,SAAS;GACT,aAAa;GACd,CAAC;EACF,cAAcA,GAAM,OAAO;GACzB,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,OAAOA,GAAM,OAAO;GAClB,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,UAAUA,GAAM,KAAK;GACnB,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,WAAWA,GAAM,WAAW;EAC5B,WAAWA,GAAM,WAAW;EAG5B,aAAaA,GAAM,QAAQ,aAAa;EACxC,gBAAgBA,GAAM,QAAQ,iBAAiB;EAC/C,cAAcA,GAAM,QAAQ,qBAAqB;EACjD,OAAOA,GAAM,QAAQ,OAAO;EAC5B,SAASA,GAAM,OAAO,iBAAiB;EACxC;CACD,SAAS;EACPC,GAAM,GAAG,CAAC,QAAQ,CAAC;EACnBA,GAAM,GAAG,CAAC,UAAU,CAAC;EACrBA,GAAM,GAAG,CAAC,QAAQ,CAAC;EACnBA,GAAM,GAAG,CAAC,gBAAgB,CAAC;EAC5B;CACF,CAAC;;;;AAKF,MAAa,mBAAmBF,GAAa;CAC3C,MAAM;CACN,aAAa;CACb,QAAQ;CACR,KAAK;CACL,QAAQ;EACN,IAAIC,GAAM,GAAG,EAAE,aAAa,gCAAgC,CAAC;EAC7D,WAAWA,GAAM,WAAW,EAAE,aAAa,oBAAoB,CAAC;EAChE,UAAUA,GAAM,WAAW,EAAE,aAAa,mBAAmB,CAAC;EAG9D,QAAQA,GAAM,KAAK,oBAAoB;GACrC,SAAS;GACT,aAAa;GACd,CAAC;EAGF,UAAUA,GAAM,IAAI;GAClB,SAAS;GACT,aAAa;GACd,CAAC;EACF,kBAAkBA,GAAM,IAAI;GAC1B,SAAS;GACT,aAAa;GACd,CAAC;EACF,cAAcA,GAAM,IAAI;GACtB,SAAS;GACT,aAAa;GACd,CAAC;EAGF,UAAUA,GAAM,IAAI;GAClB,SAAS;GACT,aAAa;GACd,CAAC;EAGF,WAAWA,GAAM,SAAS;GACxB,YAAY;GACZ,aAAa;GACd,CAAC;EACF,aAAaA,GAAM,SAAS;GAC1B,YAAY;GACZ,aAAa;GACd,CAAC;EACF,gBAAgBA,GAAM,SAAS;GAC7B,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,eAAeA,GAAM,OAAO;GAC1B,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,UAAUA,GAAM,KAAK;GACnB,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,WAAWA,GAAM,WAAW;EAC5B,WAAWA,GAAM,WAAW;EAG5B,SAASA,GAAM,UAAU,WAAW,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EACzD,UAAU,WACX,CAAC;EACF,QAAQA,GAAM,UAAU,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EACtD,UAAU,WACX,CAAC;EACH;CACD,SAAS;EACPC,GAAM,OAAO,CAAC,aAAa,WAAW,EAAE,EAAE,MAAM,qBAAqB,CAAC;EACtEA,GAAM,GAAG,CAAC,aAAa,SAAS,CAAC;EACjCA,GAAM,GAAG,CAAC,YAAY,SAAS,CAAC;EACjC;CACD,OAAO,CAAC,qBAAqB;CAC9B,CAAC;;;;AAKF,MAAa,uBAAuBF,GAAa;CAC/C,MAAM;CACN,aAAa;CACb,QAAQ;CACR,KAAK;CACL,QAAQ;EACN,IAAIC,GAAM,GAAG,EAAE,aAAa,8BAA8B,CAAC;EAC3D,WAAWA,GAAM,WAAW,EAAE,aAAa,WAAW,CAAC;EACvD,UAAUA,GAAM,WAAW,EAAE,aAAa,UAAU,CAAC;EAGrD,QAAQA,GAAM,KAAK,kBAAkB;GACnC,SAAS;GACT,aAAa;GACd,CAAC;EAGF,UAAUA,GAAM,IAAI;GAClB,SAAS;GACT,aAAa;GACd,CAAC;EACF,OAAOA,GAAM,IAAI;GACf,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,UAAUA,GAAM,IAAI;GAAE,SAAS;GAAG,aAAa;GAAsB,CAAC;EACtE,WAAWA,GAAM,IAAI;GACnB,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,WAAWA,GAAM,IAAI;GAAE,SAAS;GAAG,aAAa;GAAyB,CAAC;EAG1E,UAAUA,GAAM,IAAI;GAClB,SAAS;GACT,aAAa;GACd,CAAC;EAGF,WAAWA,GAAM,SAAS;GACxB,YAAY;GACZ,aAAa;GACd,CAAC;EACF,aAAaA,GAAM,SAAS;GAC1B,YAAY;GACZ,aAAa;GACd,CAAC;EACF,gBAAgBA,GAAM,SAAS;GAC7B,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,WAAWA,GAAM,KAAK;GACpB,YAAY;GACZ,aAAa;GACd,CAAC;EACF,OAAOA,GAAM,OAAO;GAAE,YAAY;GAAM,aAAa;GAAiB,CAAC;EAGvE,WAAWA,GAAM,WAAW;EAC5B,WAAWA,GAAM,WAAW;EAG5B,SAASA,GAAM,UAAU,WAAW,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EACzD,UAAU,WACX,CAAC;EACF,QAAQA,GAAM,UAAU,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EACtD,UAAU,WACX,CAAC;EACH;CACD,SAAS;EACPC,GAAM,OAAO,CAAC,aAAa,WAAW,EAAE,EAAE,MAAM,0BAA0B,CAAC;EAC3EA,GAAM,GAAG,CAAC,aAAa,SAAS,CAAC;EACjCA,GAAM,GAAG,CAAC,WAAW,CAAC;EACvB;CACD,OAAO,CAAC,mBAAmB;CAC5B,CAAC;;;;AAKF,MAAa,yBAAyBF,GAAa;CACjD,MAAM;CACN,aAAa;CACb,QAAQ;CACR,KAAK;CACL,QAAQ;EACN,IAAIC,GAAM,GAAG,EAAE,aAAa,gCAAgC,CAAC;EAC7D,WAAWA,GAAM,WAAW,EAAE,aAAa,WAAW,CAAC;EACvD,UAAUA,GAAM,WAAW,EAAE,aAAa,UAAU,CAAC;EAGrD,OAAOA,GAAM,IAAI;GAAE,YAAY;GAAM,aAAa;GAAiB,CAAC;EACpE,UAAUA,GAAM,IAAI;GAAE,SAAS;GAAG,aAAa;GAAa,CAAC;EAC7D,WAAWA,GAAM,IAAI;GAAE,SAAS;GAAG,aAAa;GAAyB,CAAC;EAG1E,aAAaA,GAAM,SAAS,EAAE,aAAa,kBAAkB,CAAC;EAC9D,WAAWA,GAAM,WAAW;EAG5B,SAASA,GAAM,UAAU,WAAW,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EACzD,UAAU,WACX,CAAC;EACF,QAAQA,GAAM,UAAU,gBAAgB,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAC5D,UAAU,WACX,CAAC;EACH;CACD,SAAS,CACPC,GAAM,OAAO,CAAC,aAAa,WAAW,EAAE,EACtC,MAAM,4BACP,CAAC,EACFA,GAAM,GAAG,CAAC,aAAa,cAAc,CAAC,CACvC;CACF,CAAC;;;;AAKF,MAAa,oBAAoBF,GAAa;CAC5C,MAAM;CACN,aAAa;CACb,QAAQ;CACR,KAAK;CACL,QAAQ;EACN,IAAIC,GAAM,GAAG,EAAE,aAAa,iCAAiC,CAAC;EAC9D,WAAWA,GAAM,WAAW,EAAE,aAAa,sBAAsB,CAAC;EAClE,UAAUA,GAAM,WAAW,EAAE,aAAa,oBAAoB,CAAC;EAC/D,cAAcA,GAAM,WAAW,EAAE,aAAa,yBAAyB,CAAC;EAGxE,mBAAmBA,GAAM,OAAO;GAC9B,UAAU;GACV,aAAa;GACd,CAAC;EACF,OAAOA,GAAM,OAAO,EAAE,aAAa,qBAAqB,CAAC;EACzD,aAAaA,GAAM,OAAO;GACxB,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,OAAOA,GAAM,IAAI;GAAE,YAAY;GAAM,aAAa;GAAe,CAAC;EAClE,OAAOA,GAAM,OAAO;GAAE,YAAY;GAAM,aAAa;GAAiB,CAAC;EAGvE,UAAUA,GAAM,SAAS,EAAE,aAAa,eAAe,CAAC;EACxD,YAAYA,GAAM,SAAS;GACzB,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,iBAAiBA,GAAM,OAAO;GAC5B,YAAY;GACZ,aAAa;GACd,CAAC;EACF,gBAAgBA,GAAM,OAAO;GAC3B,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,WAAWA,GAAM,QAAQ;GACvB,SAAS;GACT,aAAa;GACd,CAAC;EACF,WAAWA,GAAM,SAAS;GACxB,YAAY;GACZ,aAAa;GACd,CAAC;EACF,eAAeA,GAAM,OAAO;GAC1B,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,UAAUA,GAAM,KAAK;GACnB,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,WAAWA,GAAM,WAAW;EAG5B,SAASA,GAAM,UAAU,WAAW,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EACzD,UAAU,WACX,CAAC;EACF,QAAQA,GAAM,UAAU,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EACtD,UAAU,WACX,CAAC;EACH;CACD,SAAS;EACPC,GAAM,GAAG,CAAC,YAAY,CAAC;EACvBA,GAAM,GAAG,CAAC,WAAW,CAAC;EACtBA,GAAM,GAAG,CAAC,WAAW,CAAC;EACvB;CACF,CAAC;AAEF,MAAa,kBAAkB;CAC7B;CACA;CACA;CACA;CACA;CACD;AAED,MAAa,eAAe,CAAC,sBAAsB,mBAAmB"}
|