Avoid duplicate Course scoring events

This commit is contained in:
-Puter
2026-07-13 19:46:26 +05:30
parent a3c4a91cbe
commit 4c59151e37
2 changed files with 3 additions and 4 deletions

View File

@@ -30,9 +30,8 @@ try {
assert.equal(recorded.length, 1);
assert.equal((recorded[0].mission as Record<string, unknown>).missionId, "mission-1");
const progress = buildCourseGatewayEvent({ userId: "user_test", action: "record_swipe", body: { params: { video_id: "video-1", anchor_id: "anchor-1", curatorTaskId: "task-3", missionId: "mission-3" } }, result: { status: "completed", messages: [{ type: "agent_data", data: { watch_pct: 0.8 } }] } });
assert.equal(progress.type, "course.progress_recorded");
const projected = extractQscoreSignals({ type: progress.type, payload: progress.payload, id: "evt-course", userId: "user_test", source: progress.source, category: "service", mission: progress.mission ?? null, subject: progress.subject ?? null, correlation: progress.correlation ?? null } as never);
assert.ok(projected.some((signal) => signal.signalId === "courses.completion_rate"), "record_swipe must project course progress");
assert.equal(progress.type, "course.task_finished");
assert.equal(extractQscoreSignals({ type: progress.type, payload: progress.payload, id: "evt-course", userId: "user_test", source: progress.source, category: "service", mission: progress.mission ?? null, subject: progress.subject ?? null, correlation: progress.correlation ?? null } as never).length, 0);
assert.equal(progress.payload.courseId, "anchor-1");
assert.equal(progress.payload.lessonId, "video-1");
const nonProgress = buildCourseGatewayEvent({ userId: "user_test", action: "get_feed", body: { params: {} }, result: { status: "completed", messages: [] } });

View File

@@ -24,7 +24,7 @@ export function buildCourseGatewayEvent(input: { userId: string; action: string;
return {
userId: input.userId,
source: "course-a2a-gateway",
type: input.result.status === "error" ? "course.request.failed" : progressAction ? "course.progress_recorded" : "course.task_finished",
type: input.result.status === "error" ? "course.request.failed" : "course.task_finished",
payload,
correlation,
mission: missionId || missionInstanceId || stageId ? { missionId, instanceId: missionInstanceId, stageId, source: pick(params.source) ?? "curator-v1" } : undefined,