petstore-docs/ontology/events.md

13 KiB
Raw Blame History

Events事件

动作或状态变更后发生的事实(过去时)。用于埋点、状态机迁移、领域事件。

Store 相关

event:store_registered

微信核验手机号后的老板入驻成功,Store + boss User 创建完成,session_token 签发;同时以 BusinessEvent 和 AuditLog 持久化。

  • 触发动作action:register_boss
  • payloadstoreIdbossUserIdoccurredAt;不含手机号或 legacy inviteCode
  • 代码BusinessEventService#recordStoreRegisteredMerchantOnboardingService#registerVerifiedBoss
  • 证据anchored

User / 鉴权相关

event:session_issued

登录/注册成功后签发 HMAC session token。

  • 触发动作action:register_bossaction:loginaction:wx_phone_loginaction:accept_staff_invitation
  • payloaduserIdstoreIdroleexp
  • 代码backend/src/main/java/com/petstore/auth/SessionTokenService.java#issue
  • 测试SessionTokenServiceTest
  • 证据anchored

event:wx_bound

微信 openid/unionid 绑定到用户。

  • 触发动作action:bind_wechataction:wx_phone_login 内)
  • payloaduserIdopenidunionid?
  • 代码backend/src/main/java/com/petstore/service/UserService.java#bindWechatMiniIdentity
  • 证据anchored

Appointment 相关

event:appointment_created

预约创建成功(status=new,按服务时长跨容量桶占号生效);低敏 metadata 保存 bookingOrigindurationMinutes 快照。

  • 触发动作action:create_appointment
  • 持久字段storeIdstoreCustomerIdaggregateType=appointmentaggregateIdactorUserId/rolebookingOrigin
  • 代码backend/src/main/java/com/petstore/service/AppointmentService.java#createBookingBusinessEventService#recordAppointmentCreated
  • 测试AppointmentServiceTestBusinessEventServiceTest
  • 证据anchored

event:appointment_status_changed

预约状态迁移(new→doingnew→canceldoing→donedoing→cancel)。

  • 触发动作action:start_servicenew→doing)、action:transition_appointment_statusaction:submit_reportdoing→done
  • 持久字段aggregateId=appointmentIdfromStatustoStatusactorUserId/rolestoreCustomerId?
  • 适用规则rule:BR-APPT-001
  • 代码AppointmentService#startService/#transitionStatusReportService#createBusinessEventService#recordAppointmentStatusChanged
  • 测试AppointmentServiceTestReportServiceTest#createDoingAppointmentMarksDone
  • 证据anchored

event:service_started

服务正式开始(new -> doing),是履约时长与服务漏斗的开始事实。

  • 触发动作action:start_service
  • 持久字段aggregateId=appointmentIdstoreIdstoreCustomerId?actorUserId/roleoccurredAt
  • 幂等键service_started:{appointmentId}
  • 代码backend/src/main/java/com/petstore/service/BusinessEventService.java#recordAppointmentStatusChanged
  • 测试BusinessEventServiceTest#statusToDoingRecordsGenericAndServiceStartedFacts
  • 证据anchored

event:service_completed

服务完成(doing -> done),可由报告提交或合法手工完成触发。

  • 触发动作action:transition_appointment_statusaction:submit_report
  • 持久字段:同 event:service_started
  • 幂等键service_completed:{appointmentId}
  • 代码BusinessEventService#recordAppointmentStatusChangedReportService#create
  • 测试AppointmentServiceTestReportServiceTest
  • 证据anchored

Report 相关

event:report_submitted

报告提交成功,关联预约置 done

  • 触发动作action:submit_report
  • 持久字段aggregateId=reportIdstoreIdstoreCustomerId?actorUserId/role;不保存 report token/hash
  • 适用规则rule:BR-RPT-001rule:BR-RPT-002rule:BR-RPT-004
  • 代码backend/src/main/java/com/petstore/service/ReportService.java#createBusinessEventService#recordReportSubmitted
  • 测试ReportServiceTest
  • 证据anchored

event:report_opened

报告页首次打开(本地 storage 标记首次)。

  • 触发动作action:track_report_open
  • 持久字段aggregateId=reportIdstoreIdstoreCustomerId?visitType=firstoccurredAt;事件表不保存 token/hash
  • 适用规则rule:BR-RPT-007token hash 日志)
  • 代码ReportController#trackReportOpenBusinessEventService#recordReportOpenByToken
  • 测试ReportControllerTest#reportOpenPersistsLowSensitivityBusinessEventBusinessEventServiceTest#reportOpenStoresReportIdButNeverToken
  • 文档docs/本期主线-下一步产品优化点.md 埋点事件 schema
  • 证据anchored(事件已落库并进入工作台去重统计;日志仅保留短 hash

event:report_sent

门店员工首次显式确认宠主已经收到报告。历史报告不猜测、不回填该事件。

  • 触发动作action:confirm_report_sent
  • 持久字段aggregateId=reportIdstoreIdstoreCustomerId?actorUserId/roleoccurredAt=sentAtchannel;不保存 report token、手机号或 URL
  • 幂等键report_sent:{reportId}
  • 适用规则rule:BR-RPT-008rule:BR-BE-001
  • 代码ReportService#confirmSentBusinessEventService#recordReportSent
  • 测试ReportServiceTest#firstConfirmSentPersistsImmutableReceiptAndEventBusinessEventServiceTest#reportSentIsIdempotentAndStoresOnlyChannelMetadata
  • 证据anchored

event:report_reopened

报告页再次打开(非首次)。

  • 触发动作action:track_report_open
  • 持久字段:同 event:report_openedvisitType=repeat
  • 代码/测试:同 event:report_opened
  • 证据anchored

ReportLead 相关

event:lead_submitted

宠主留资提交成功(含重复提交幂等更新)。

  • 触发动作action:submit_lead
  • 持久字段aggregateId=leadIdstoreIdstoreCustomerId?repeatSubmit不复制手机号、IP、openid 或 token
  • 适用规则rule:BR-LEAD-001
  • 代码ReportLeadService#submitBusinessEventService#recordLeadSubmitted
  • 测试ReportLeadServiceStoreCustomerTestBusinessEventMigrationTest
  • 文档docs/本期主线-下一步产品优化点.md 埋点事件 schema
  • 证据anchored

event:follow_up_created

回访任务已创建;由新留资或可靠历史待办回填触发。

  • 触发动作action:submit_lead
  • payloadstoreIdstoreCustomerIdaggregateId=taskInternalIddueDateoccurredAt
  • 证据anchored

event:follow_up_started

门店员工已领取并开始处理回访。

  • 触发动作action:start_follow_up_task
  • payloadstoreIdstoreCustomerIdaggregateId=taskInternalIdactorUserIdactorRole
  • 证据anchored

event:follow_up_rescheduled

本次联系未形成终态并已设置下次回访日。

  • 触发动作action:reschedule_follow_up_task
  • payloadattemptOutcomeattemptCountdueDate;不含手机号或自由文本
  • 证据anchored

event:follow_up_completed

回访任务以员工处理结果或真实再次预约完成。

  • 触发动作action:close_follow_up_taskaction:create_appointment
  • payloadoutcomeattemptCount
  • 证据anchored

event:follow_up_canceled

宠主退订导致开放任务取消;不伪装成员工联系。

  • 触发动作action:unsubscribe
  • payloadoutcome=unsubscribed
  • 证据anchored

event:rebook_created

回访任务关联的真实同店预约已保存成功。

  • 触发动作action:create_appointment
  • payloadstoreIdstoreCustomerIdaggregateId=appointmentIdbookingOrigin=follow_up
  • 证据anchored

Batch 2 录入事件

Highlight 相关

event:highlight_succeeded

成片生成成功(highlight_video_statusdone)。

  • 触发动作action:generate_highlight(异步回调)
  • payloadreportTokenHashappointmentIddurationSeccomposeModets
  • 适用规则rule:BR-HL-002
  • 代码backend/src/main/java/com/petstore/service/ReportHighlightVideoService.java
  • 文档docs/本期主线-下一步产品优化点.md 埋点事件 schema
  • 证据documentedschema 已冻结;事件上报与统计落地 gap

event:highlight_failed

成片生成失败(highlight_video_statusfailedhighlight_fail_reason 归类)。

  • 触发动作action:generate_highlight(异步回调)
  • payloadreportTokenHashappointmentIdfailReasonmaterial/service/network/unknownts
  • 适用规则rule:BR-HL-002
  • 代码backend/src/main/java/com/petstore/service/ReportHighlightVideoService.java
  • 文档docs/本期主线-下一步产品优化点.md 埋点事件 schema
  • 证据documented

event:video_play

报告页成片点击播放。

  • 触发动作action:track_video_play(前端客户端)
  • payloadreportTokenHashtssource
  • 文档docs/本期主线-下一步产品优化点.md 埋点事件 schema
  • 证据documentedschema 已冻结;上报未实现 gap

event:video_save

报告页成片保存到相册。

  • 触发动作action:track_video_save(前端客户端)
  • payloadreportTokenHashts
  • 文档docs/本期主线-下一步产品优化点.md 埋点事件 schema
  • 证据documentedschema 已冻结;上报未实现 gap

Upload 相关

event:upload_completed

上传图片/视频完成。

  • 触发动作action:upload_image
  • payloadurlmediaTypesizets
  • 代码backend/src/main/java/com/petstore/controller/FileController.java#uploadImage
  • 证据implemented(接口返回 url事件未单独上报

Schedule 相关

event:schedule_block_created

手动占用时段创建成功。

  • 触发动作action:create_schedule_block
  • payloadblockIdstoreIdslotStartblockTypecreatedByUserId
  • 代码backend/src/main/java/com/petstore/service/ScheduleService.java#createBlock
  • 证据anchored

event:schedule_block_deleted

手动占用时段取消。

  • 触发动作action:delete_schedule_block
  • payloadblockIdstoreId
  • 代码backend/src/main/java/com/petstore/service/ScheduleService.java#deleteBlock
  • 证据anchored

ServiceType / Pet / Staff 相关

event:service_type_created

服务类型创建(仅门店自定义)。

  • 触发动作action:create_service_type
  • payloadserviceTypeIdstoreIdname
  • 代码backend/src/main/java/com/petstore/service/ServiceTypeService.java#create
  • 证据anchored

event:service_type_deleted

服务类型删除(仅门店自定义)。

  • 触发动作action:delete_service_type
  • payloadserviceTypeIdstoreId
  • 代码backend/src/main/java/com/petstore/service/ServiceTypeService.java#delete
  • 证据anchored

event:pet_created

宠物档案创建。

  • 触发动作action:create_pet
  • payloadpetIdownerUserIdnamepetType
  • 代码backend/src/main/java/com/petstore/service/PetService.java#create
  • 证据anchored

event:staff_invitation_accepted

受邀员工通过微信手机号核验后首次接受邀请并创建 staff 账号;以 AuditLog 持久化。

  • 触发动作action:accept_staff_invitation
  • payloadstoreIdstaffUserIdinvitationIdverificationMethodoccurredAt不含手机号、token 或微信标识
  • 代码StaffInvitationService#acceptVerifiedAuditLogService#record
  • 测试StaffInvitationServiceTest
  • 证据anchored

event:user_updated

当前登录用户信息更新(头像/姓名/手机号)。

  • 触发动作action:update_user
  • payloaduserIdupdatedFields
  • 代码backend/src/main/java/com/petstore/service/UserService.java#updateUser
  • 证据anchored

event:testimonial_saved

宠主寄语已保存(一报告一寄语,重复提交为更新)。

  • 触发动作action:submit_testimonial
  • payloadreportTokenHashtestimonialIdisPublicts
  • 适用规则rule:BR-TST-001
  • 代码backend/src/main/java/com/petstore/service/ReportTestimonialService.java
  • 证据documented(写库已实现;独立事件上报/统计未落地)

event:session_revoked

会话吊销(服务端 logout

  • 触发动作action:logout
  • payloaduserIdts
  • 证据gap(当前无服务端吊销实现)

event:workbench_viewed

门店后台工作台已打开(可选埋点)。

  • 触发动作action:view_workbench
  • payloadstoreIduserIdts
  • 证据gapA 期可不实现上报)