252 lines
8.9 KiB
Markdown
252 lines
8.9 KiB
Markdown
# Events(事件)
|
||
|
||
> 动作或状态变更后发生的事实(过去时)。用于埋点、状态机迁移、领域事件。
|
||
|
||
## Store 相关
|
||
|
||
### event:store_registered
|
||
|
||
老板入驻成功,`Store` + `boss` `User` 创建完成,`session_token` 签发。
|
||
|
||
- **触发动作**:`action:register_boss`
|
||
- **payload**:`storeId`、`bossUserId`、`inviteCode`
|
||
- **证据**:`anchored`
|
||
|
||
## User / 鉴权相关
|
||
|
||
### event:session_issued
|
||
|
||
登录/注册成功后签发 HMAC session token。
|
||
|
||
- **触发动作**:`action:register_boss`、`action:login`、`action:wx_phone_login`、`register_staff`
|
||
- **payload**:`userId`、`storeId`、`role`、`exp`
|
||
- **代码**:`backend/src/main/java/com/petstore/auth/SessionTokenService.java#issue`
|
||
- **测试**:`SessionTokenServiceTest`
|
||
- **证据**:`anchored`
|
||
|
||
### event:wx_bound
|
||
|
||
微信 openid/unionid 绑定到用户。
|
||
|
||
- **触发动作**:`action:bind_wechat`(`action:wx_phone_login` 内)
|
||
- **payload**:`userId`、`openid`、`unionid?`
|
||
- **代码**:`backend/src/main/java/com/petstore/service/UserService.java#bindWechatMiniIdentity`
|
||
- **证据**:`anchored`
|
||
|
||
## Appointment 相关
|
||
|
||
### event:appointment_created
|
||
|
||
预约创建成功(`status=new`,下单即占号生效)。
|
||
|
||
- **触发动作**:`action:create_appointment`
|
||
- **payload**:`appointmentId`、`storeId`、`customerUserId`、`createdByUserId`、`appointmentTime`
|
||
- **代码**:`backend/src/main/java/com/petstore/service/AppointmentService.java#createBooking`
|
||
- **证据**:`anchored`
|
||
|
||
### event:appointment_status_changed
|
||
|
||
预约状态迁移(`new→doing`、`new→cancel`、`doing→done`、`doing→cancel`)。
|
||
|
||
- **触发动作**:`action:start_service`(`new→doing`)、`action:transition_appointment_status`、`action:submit_report`(`doing→done`)
|
||
- **payload**:`appointmentId`、`fromStatus`、`toStatus`、`assignedStaffId?`
|
||
- **适用规则**:`rule:BR-APPT-001`
|
||
- **代码**:`backend/src/main/java/com/petstore/service/AppointmentService.java#startService`/`#transitionStatus`、`backend/src/main/java/com/petstore/service/ReportService.java#create`(置 done)
|
||
- **测试**:`AppointmentServiceTest`、`ReportServiceTest#createDoingAppointmentMarksDone`
|
||
- **证据**:`anchored`
|
||
|
||
## Report 相关
|
||
|
||
### event:report_submitted
|
||
|
||
报告提交成功,关联预约置 `done`。
|
||
|
||
- **触发动作**:`action:submit_report`
|
||
- **payload**:`reportId`、`appointmentId`、`storeId`、`reportToken`
|
||
- **适用规则**:`rule:BR-RPT-001`、`rule:BR-RPT-002`、`rule:BR-RPT-004`
|
||
- **代码**:`backend/src/main/java/com/petstore/service/ReportService.java#create`
|
||
- **测试**:`ReportServiceTest`
|
||
- **证据**:`anchored`
|
||
|
||
### event:report_opened
|
||
|
||
报告页首次打开(本地 storage 标记首次)。
|
||
|
||
- **触发动作**:`action:track_report_open`
|
||
- **payload**:`reportTokenHash`(SHA-256 前 8 位)、`isFirstOpen`、`source`、`ts`
|
||
- **适用规则**:`rule:BR-RPT-007`(token hash 日志)
|
||
- **代码**:`backend/src/main/java/com/petstore/controller/ReportController.java#trackReportOpen`
|
||
- **文档**:`docs/本期主线-下一步产品优化点.md 埋点事件 schema`
|
||
- **证据**:`anchored`(日志埋点已实现;统计落地 `documented`)
|
||
|
||
### event:report_reopened
|
||
|
||
报告页再次打开(非首次)。
|
||
|
||
- **触发动作**:`action:track_report_open`
|
||
- **payload**:同 `event:report_opened`,`isFirstOpen=false`
|
||
- **证据**:`documented`(schema 已冻结,前端 `isFirstOpen` 判断已实现)
|
||
|
||
## ReportLead 相关
|
||
|
||
### event:lead_submitted
|
||
|
||
宠主留资提交成功(含重复提交幂等更新)。
|
||
|
||
- **触发动作**:`action:submit_lead`
|
||
- **payload**:`reportTokenHash`、`storeId`、`hasPhone`、`hasPetName`、`repeatSubmit`、`ts`
|
||
- **适用规则**:`rule:BR-LEAD-001`
|
||
- **代码**:`backend/src/main/java/com/petstore/controller/ReportLeadController.java#submitReminder`
|
||
- **文档**:`docs/本期主线-下一步产品优化点.md 埋点事件 schema`
|
||
- **证据**:`documented`(埋点 schema 已冻结,事件上报与统计落地 `gap`)
|
||
|
||
---
|
||
|
||
## Batch 2 录入事件
|
||
|
||
## Highlight 相关
|
||
|
||
### event:highlight_succeeded
|
||
|
||
成片生成成功(`highlight_video_status` 置 `done`)。
|
||
|
||
- **触发动作**:`action:generate_highlight`(异步回调)
|
||
- **payload**:`reportTokenHash`、`appointmentId`、`durationSec`、`composeMode`、`ts`
|
||
- **适用规则**:`rule:BR-HL-002`
|
||
- **代码**:`backend/src/main/java/com/petstore/service/ReportHighlightVideoService.java`
|
||
- **文档**:`docs/本期主线-下一步产品优化点.md 埋点事件 schema`
|
||
- **证据**:`documented`(schema 已冻结;事件上报与统计落地 `gap`)
|
||
|
||
### event:highlight_failed
|
||
|
||
成片生成失败(`highlight_video_status` 置 `failed`,`highlight_fail_reason` 归类)。
|
||
|
||
- **触发动作**:`action:generate_highlight`(异步回调)
|
||
- **payload**:`reportTokenHash`、`appointmentId`、`failReason`(material/service/network/unknown)、`ts`
|
||
- **适用规则**:`rule:BR-HL-002`
|
||
- **代码**:`backend/src/main/java/com/petstore/service/ReportHighlightVideoService.java`
|
||
- **文档**:`docs/本期主线-下一步产品优化点.md 埋点事件 schema`
|
||
- **证据**:`documented`
|
||
|
||
### event:video_play
|
||
|
||
报告页成片点击播放。
|
||
|
||
- **触发动作**:`action:track_video_play`(前端客户端)
|
||
- **payload**:`reportTokenHash`、`ts`、`source`
|
||
- **文档**:`docs/本期主线-下一步产品优化点.md 埋点事件 schema`
|
||
- **证据**:`documented`(schema 已冻结;上报未实现 `gap`)
|
||
|
||
### event:video_save
|
||
|
||
报告页成片保存到相册。
|
||
|
||
- **触发动作**:`action:track_video_save`(前端客户端)
|
||
- **payload**:`reportTokenHash`、`ts`
|
||
- **文档**:`docs/本期主线-下一步产品优化点.md 埋点事件 schema`
|
||
- **证据**:`documented`(schema 已冻结;上报未实现 `gap`)
|
||
|
||
## Upload 相关
|
||
|
||
### event:upload_completed
|
||
|
||
上传图片/视频完成。
|
||
|
||
- **触发动作**:`action:upload_image`
|
||
- **payload**:`url`、`mediaType`、`size`、`ts`
|
||
- **代码**:`backend/src/main/java/com/petstore/controller/FileController.java#uploadImage`
|
||
- **证据**:`implemented`(接口返回 url,事件未单独上报)
|
||
|
||
## Schedule 相关
|
||
|
||
### event:schedule_block_created
|
||
|
||
手动占用时段创建成功。
|
||
|
||
- **触发动作**:`action:create_schedule_block`
|
||
- **payload**:`blockId`、`storeId`、`slotStart`、`blockType`、`createdByUserId`
|
||
- **代码**:`backend/src/main/java/com/petstore/service/ScheduleService.java#createBlock`
|
||
- **证据**:`anchored`
|
||
|
||
### event:schedule_block_deleted
|
||
|
||
手动占用时段取消。
|
||
|
||
- **触发动作**:`action:delete_schedule_block`
|
||
- **payload**:`blockId`、`storeId`
|
||
- **代码**:`backend/src/main/java/com/petstore/service/ScheduleService.java#deleteBlock`
|
||
- **证据**:`anchored`
|
||
|
||
## ServiceType / Pet / Staff 相关
|
||
|
||
### event:service_type_created
|
||
|
||
服务类型创建(仅门店自定义)。
|
||
|
||
- **触发动作**:`action:create_service_type`
|
||
- **payload**:`serviceTypeId`、`storeId`、`name`
|
||
- **代码**:`backend/src/main/java/com/petstore/service/ServiceTypeService.java#create`
|
||
- **证据**:`anchored`
|
||
|
||
### event:service_type_deleted
|
||
|
||
服务类型删除(仅门店自定义)。
|
||
|
||
- **触发动作**:`action:delete_service_type`
|
||
- **payload**:`serviceTypeId`、`storeId`
|
||
- **代码**:`backend/src/main/java/com/petstore/service/ServiceTypeService.java#delete`
|
||
- **证据**:`anchored`
|
||
|
||
### event:pet_created
|
||
|
||
宠物档案创建。
|
||
|
||
- **触发动作**:`action:create_pet`
|
||
- **payload**:`petId`、`ownerUserId`、`name`、`petType`
|
||
- **代码**:`backend/src/main/java/com/petstore/service/PetService.java#create`
|
||
- **证据**:`anchored`
|
||
|
||
### event:staff_created
|
||
|
||
老板创建员工。
|
||
|
||
- **触发动作**:`action:create_staff`
|
||
- **payload**:`staffId`、`storeId`、`name`、`phone`
|
||
- **代码**:`backend/src/main/java/com/petstore/service/UserService.java#createStaff`
|
||
- **证据**:`anchored`
|
||
|
||
### event:user_updated
|
||
|
||
当前登录用户信息更新(头像/姓名/手机号)。
|
||
|
||
- **触发动作**:`action:update_user`
|
||
- **payload**:`userId`、`updatedFields`
|
||
- **代码**:`backend/src/main/java/com/petstore/service/UserService.java#updateUser`
|
||
- **证据**:`anchored`
|
||
|
||
### event:testimonial_saved
|
||
|
||
宠主寄语已保存(一报告一寄语,重复提交为更新)。
|
||
|
||
- **触发动作**:`action:submit_testimonial`
|
||
- **payload**:`reportTokenHash`、`testimonialId`、`isPublic`、`ts`
|
||
- **适用规则**:`rule:BR-TST-001`
|
||
- **代码**:`backend/src/main/java/com/petstore/service/ReportTestimonialService.java`
|
||
- **证据**:`documented`(写库已实现;独立事件上报/统计未落地)
|
||
|
||
### event:session_revoked
|
||
|
||
会话吊销(服务端 logout)。
|
||
|
||
- **触发动作**:`action:logout`
|
||
- **payload**:`userId`、`ts`
|
||
- **证据**:`gap`(当前无服务端吊销实现)
|
||
|
||
### event:workbench_viewed
|
||
|
||
门店后台工作台已打开(可选埋点)。
|
||
|
||
- **触发动作**:`action:view_workbench`
|
||
- **payload**:`storeId`、`userId`、`ts`
|
||
- **证据**:`gap`(A 期可不实现上报)
|