Skip to content

Commit 040ac23

Browse files
authored
Debugging scaffolded courses, static db (#819)
2 parents f860fe8 + 527df49 commit 040ac23

File tree

8 files changed

+43
-20
lines changed

8 files changed

+43
-20
lines changed

packages/common-ui/src/components/StudySession.vue

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
<template>
22
<div v-if="sessionPrepared" class="StudySession">
33
<v-row align="center">
4-
<v-col>
5-
<h1 class="text-h3">
6-
{{ courseNames[courseID] }}:
7-
<v-progress-circular v-if="loading" color="primary" indeterminate size="32" width="4" />
8-
</h1>
9-
<v-spacer></v-spacer>
10-
</v-col>
4+
<h1 class="text-h3" v-if="courseNames[courseID]">{{ courseNames[courseID] }}:</h1>
5+
<v-spacer></v-spacer>
6+
<v-progress-circular v-if="loading" color="primary" indeterminate size="32" width="4" />
117
</v-row>
128

139
<br />

packages/db/src/core/types/user.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,19 @@ export interface ScheduledCard {
4848
*
4949
* (Should probably be UTC adjusted so that performance is
5050
* not wonky across time zones)
51+
*
52+
* Note: Stored as ISO string for PouchDB serialization compatibility,
53+
* but can be consumed as Moment objects via moment.utc(reviewTime)
5154
*/
52-
reviewTime: Moment;
55+
reviewTime: string | Moment;
5356

5457
/**
5558
* The time at which this scheduled event was created.
59+
*
60+
* Note: Stored as ISO string for PouchDB serialization compatibility,
61+
* but can be consumed as Moment objects via moment.utc(scheduledAt)
5662
*/
57-
scheduledAt: Moment;
63+
scheduledAt: string | Moment;
5864

5965
/**
6066
* Classifying whether this card is scheduled on behalf of a

packages/db/src/impl/common/BaseUserDB.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -964,10 +964,10 @@ Currently logged-in as ${this._username}.`
964964
scheduledFor: ScheduledCard['scheduledFor'];
965965
schedulingAgentId: ScheduledCard['schedulingAgentId'];
966966
}) {
967-
return scheduleCardReviewLocal(this.remoteDB, review);
967+
return scheduleCardReviewLocal(this.writeDB, review);
968968
}
969969
public async removeScheduledCardReview(reviewId: string): Promise<void> {
970-
return removeScheduledCardReviewLocal(this.remoteDB, reviewId);
970+
return removeScheduledCardReviewLocal(this.writeDB, reviewId);
971971
}
972972

973973
public async registerForClassroom(

packages/db/src/impl/common/userDBHelpers.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,9 @@ export function scheduleCardReviewLocal(
125125
void userDB.put<ScheduledCard>({
126126
_id: DocTypePrefixes[DocType.SCHEDULED_CARD] + review.time.format(REVIEW_TIME_FORMAT),
127127
cardId: review.card_id,
128-
reviewTime: review.time,
128+
reviewTime: review.time.toISOString(),
129129
courseId: review.course_id,
130-
scheduledAt: now,
130+
scheduledAt: now.toISOString(),
131131
scheduledFor: review.scheduledFor,
132132
schedulingAgentId: review.schedulingAgentId,
133133
});

packages/db/src/impl/couch/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,9 @@ export function scheduleCardReview(review: {
198198
void getCouchUserDB(review.user).put<ScheduledCard>({
199199
_id: DocTypePrefixes[DocType.SCHEDULED_CARD] + review.time.format(REVIEW_TIME_FORMAT),
200200
cardId: review.card_id,
201-
reviewTime: review.time,
201+
reviewTime: review.time.toISOString(),
202202
courseId: review.course_id,
203-
scheduledAt: now,
203+
scheduledAt: now.toISOString(),
204204
scheduledFor: review.scheduledFor,
205205
schedulingAgentId: review.schedulingAgentId,
206206
});

packages/standalone-ui/src/main.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import * as directives from 'vuetify/directives';
1414
import { aliases, mdi } from 'vuetify/iconsets/mdi';
1515

1616
// data layer
17-
import { initializeDataLayer } from '@vue-skuilder/db';
17+
import { initializeDataLayer, getDataLayer } from '@vue-skuilder/db';
1818

1919
// auth store
2020
import { useAuthStore } from '@vue-skuilder/common-ui';
@@ -163,5 +163,28 @@ import config from '../skuilder.config.json';
163163

164164
await useAuthStore().init();
165165

166+
// Auto-register user for the course in standalone mode
167+
if (config.course) {
168+
try {
169+
const authStore = useAuthStore();
170+
const user = getDataLayer().getUserDB();
171+
172+
// Check if user is already registered for the course
173+
const courseRegistrations = await user.getCourseRegistrationsDoc();
174+
const isRegistered = courseRegistrations.courses.some(c => c.courseID === config.course);
175+
176+
if (!isRegistered) {
177+
console.log(`[Standalone] Auto-registering user for course: ${config.course}`);
178+
await user.registerForCourse(config.course, false); // non-preview mode
179+
console.log(`[Standalone] Auto-registration completed for course: ${config.course}`);
180+
} else {
181+
console.log(`[Standalone] User already registered for course: ${config.course}`);
182+
}
183+
} catch (error) {
184+
console.warn(`[Standalone] Failed to auto-register for course ${config.course}:`, error);
185+
// Don't block app startup on registration failure
186+
}
187+
}
188+
166189
app.mount('#app');
167190
})();

packages/standalone-ui/src/views/StudyView.vue

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
<v-container>
33
<v-row>
44
<v-col cols="12">
5-
<h1 class="text-h4 mb-4">Study Session</h1>
6-
75
<div v-if="sessionPrepared">
86
<StudySession
97
:content-sources="sessionContentSources"

packages/standalone-ui/src/views/UserStatsView.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ onMounted(async () => {
5757
const courseDB = dataLayer.getCourseDB(courseId);
5858
5959
// Try to get user's ELO profile for this course
60-
const userRegistrations = await dataLayer.getUserDB(user.getUsername()).getCourseRegistrations();
61-
const courseReg = userRegistrations.find(reg => reg.courseID === courseId);
60+
const userDB = dataLayer.getUserDB();
61+
const courseReg = await userDB.getCourseRegDoc(courseId);
6262
6363
if (courseReg && courseReg.elo) {
6464
userElo.value = courseReg.elo;

0 commit comments

Comments
 (0)