Skip to content

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ạy npm 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).

EventProducerIdempotency keyPayload
community.event.registeredeventsevent-reg:${eventId}:${session.user_id}event_id, user_id
community.event.unregisteredeventsevent-unreg:${eventId}:${session.user_id}:${Date.now()}event_id, user_id
competition.action.recordedorcaorca:${b.learner_id}:${b.competition_id}:${b.state}learner_id, competition_id, state
content.report.filedforumreport:${reportId}report_id, target_type, target_id
forum.reply.createdforumreply:${id}topic_id
forum.topic.createdforumtopic:${id}topic_id, scope
growth.referral.recordedreferralreferral:${session.user_id}referred_user_id, referrer_user_id
identity.family.createdauthfamily:${familyId}family_id, owner_user_id
identity.user.createdauthuser:${userId}user_id
learner.assessment.completedexamsexam-attempt:${attemptId}learner_id, subject_id, kind
learner.assessment.completedknowledgeassessment:${sessionId}learner_id, subject_id
learner.context.updatedonboardingcontext:${learnerId}:${active}learner_id
learner.evidence.recordeddictationcrypto.randomUUID()learner_id, subject_id, node_id
learner.evidence.recordedexamseventIdlearner_id, subject_id, node_id
learner.evidence.recordedknowledgeeventIdlearner_id, subject_id, node_id, performance
learner.evidence.recordedlearningeventIdlearner_id, subject_id, node_id, type
learner.evidence.recordedlearningeventIdlearner_id, subject_id, node_id, performance
learner.goal.setieltsielts-goal:${id}learner_id, kind
learner.goal.setieltsielts-goal:${found.goal.id}learner_id, kind
learner.goal.setonboardingexam-target:${id}learner_id, kind
learner.invitation.acceptedinvitationslearner-joined:${learner.id}learner_id, family_id, user_id
learner.invitation.sentinvitationsinvitation:${invitationId}invitation_id, learner_id, family_id
learner.model.initializedonboardingmodel-init:${learnerId}learner_id, school_code
learner.portrait.createdportraitsportrait:${id}learner_id, portrait_id
learner.profile.completedonboardingprofile:${learnerId}learner_id
learner.school.enrolledonboardingenroll:${learnerId}:${school_code}learner_id
learner.slot_preferences.setslotslearner:${learnerId}learner_id, first, second
learner.slot.bookedslotsbooking:${res.data.id}learner_id, slot_id, session_date
learner.slot.cancelledslotsbooking:${bookingId}learner_id, booking_id
mentor.interaction.recordedmentormentor-note:${id}learner_id, mentor_user_id
parent.belief.recordedparentbelief:${id}learner_id, subject_id, worry_level
parent.observation.recordedparentparent-obs:${id}learner_id, category