Event Catalog
⚙️ Trang này sinh tự động từ source code bằng
scripts/gen-reference.mjs— đừng sửa tay, sửa code rồi chạynpm run gen:reference.
32 điểm publish, 25 loại event, tất cả vào queue nemo12-events — xem queues để biết consumer, retry, DLQ.
Mọi event mang envelope chung (workers/api/src/shared/events.ts):
ts
{ event_id, idempotency_key, type, occurred_at, producer: "api", version: 1, payload }Publish sau khi commit và không bao giờ làm fail nghiệp vụ chính: lỗi queue.send chỉ console.error("EVENT_PUBLISH_FAILED") (SDD-006 §2).
| Event | Producer | Idempotency key | Payload |
|---|---|---|---|
community.event.registered | events | event-reg:${eventId}:${session.user_id} | event_id, user_id |
community.event.unregistered | events | event-unreg:${eventId}:${session.user_id}:${Date.now()} | event_id, user_id |
competition.action.recorded | orca | orca:${b.learner_id}:${b.competition_id}:${b.state} | learner_id, competition_id, state |
content.report.filed | forum | report:${reportId} | report_id, target_type, target_id |
forum.reply.created | forum | reply:${id} | topic_id |
forum.topic.created | forum | topic:${id} | topic_id, scope |
growth.referral.recorded | referral | referral:${session.user_id} | referred_user_id, referrer_user_id |
identity.family.created | auth | family:${familyId} | family_id, owner_user_id |
identity.user.created | auth | user:${userId} | user_id |
learner.assessment.completed | exams | exam-attempt:${attemptId} | learner_id, subject_id, kind |
learner.assessment.completed | knowledge | assessment:${sessionId} | learner_id, subject_id |
learner.context.updated | onboarding | context:${learnerId}:${active} | learner_id |
learner.evidence.recorded | dictation | crypto.randomUUID() | learner_id, subject_id, node_id |
learner.evidence.recorded | exams | eventId | learner_id, subject_id, node_id |
learner.evidence.recorded | knowledge | eventId | learner_id, subject_id, node_id, performance |
learner.evidence.recorded | learning | eventId | learner_id, subject_id, node_id, type |
learner.evidence.recorded | learning | eventId | learner_id, subject_id, node_id, performance |
learner.goal.set | ielts | ielts-goal:${id} | learner_id, kind |
learner.goal.set | ielts | ielts-goal:${found.goal.id} | learner_id, kind |
learner.goal.set | onboarding | exam-target:${id} | learner_id, kind |
learner.invitation.accepted | invitations | learner-joined:${learner.id} | learner_id, family_id, user_id |
learner.invitation.sent | invitations | invitation:${invitationId} | invitation_id, learner_id, family_id |
learner.model.initialized | onboarding | model-init:${learnerId} | learner_id, school_code |
learner.portrait.created | portraits | portrait:${id} | learner_id, portrait_id |
learner.profile.completed | onboarding | profile:${learnerId} | learner_id |
learner.school.enrolled | onboarding | enroll:${learnerId}:${school_code} | learner_id |
learner.slot_preferences.set | slots | learner:${learnerId} | learner_id, first, second |
learner.slot.booked | slots | booking:${res.data.id} | learner_id, slot_id, session_date |
learner.slot.cancelled | slots | booking:${bookingId} | learner_id, booking_id |
mentor.interaction.recorded | mentor | mentor-note:${id} | learner_id, mentor_user_id |
parent.belief.recorded | parent | belief:${id} | learner_id, subject_id, worry_level |
parent.observation.recorded | parent | parent-obs:${id} | learner_id, category |