用户绑定功能设计文档
概述: 描述患者与医生/家属之间绑定关系的管理与查询能力。对应实现:src/main/java/.../controller/UserBindingController.java 与 service/UserBindingService,持久化表建议为 t_user_binding。
目标: 提供创建/删除绑定关系、按患者或被绑定用户分页查询绑定列表、以及检测两者是否存在绑定关系的能力;并明确权限、审计与字段语义,支持业务侧基于绑定关系的授权决策(如健康数据访问)。
接口清单:
创建用户绑定关系
POST /user-binding/createCreateUserBindingRequest (application/json)patientUserId (Long) - 患者用户ID,必填boundUserId (Long) - 被绑定用户ID(医生或家属),必填bindingType (String) - 绑定类型(DOCTOR 或 FAMILY),必填R 成功/失败。创建时应避免重复绑定记录(可在 service 层做幂等处理)。删除用户绑定关系
POST /user-binding/deleteDeleteUserBindingRequest (application/json)patientUserId (Long) - 患者用户ID,必填boundUserId (Long) - 被绑定用户ID,必填R 成功/失败。删除操作应校验调用者权限(患者本人或平台管理员/被绑定方在某些场景下也可)。分页查询患者的绑定关系列表
POST /user-binding/list-by-patientpatientUserId (Long, 必填), bindingType (String, 可选), 请求体 BaseQueryRequestUserBindingPageResponse(内部包含 UserBindingResponse 列表,含被绑定用户的昵称/手机号等便捷信息)。分页查询用户被绑定的关系列表
POST /user-binding/list-by-bound-userboundUserId (Long, 必填), bindingType (String, 可选), 请求体 BaseQueryRequestlist-by-patient。检查用户绑定关系
POST /user-binding/checkexists 与 bindingType。CheckUserBindingRequest (application/json)patientUserId (Long), boundUserId (Long)CheckUserBindingResponse:exists (Boolean) - 是否存在绑定关系bindingType (String) - 若存在,返回绑定类型(DOCTOR/FAMILY)数据模型 (VO / PO)
CreateUserBindingRequest:
patientUserId: LongboundUserId: LongbindingType: String (DOCTOR | FAMILY)DeleteUserBindingRequest:
patientUserId: LongboundUserId: LongUserBindingResponse:
id: StringpatientUserId: StringboundUserId: StringbindingType: Stringstatus: Integer (1 有效, 0 无效)createTime: LocalDateTimeboundUserNickname, boundUserPhone 等为附加展示字段CheckUserBindingRequest / CheckUserBindingResponse:见接口持久化建议(表 t_user_binding)
id, patient_user_id, bound_user_id, binding_type, status, created_by, created_at, updated_at, deleted_flag。(patient_user_id), (bound_user_id), 复合索引 (patient_user_id, bound_user_id) 以加速检查/删除操作。业务规则与校验
patientUserId 与 boundUserId 不为空,且二者不同。patientUserId 对应的用户必须存在,且其角色必须为 患者(PATIENT)。boundUserId 对应的用户必须存在;若 bindingType=DOCTOR 则其角色必须为 医生(DOCTOR),若 bindingType=FAMILY 则其角色必须为 患者家属(PATIENT_FAMILY)。UserBindingService)。status=0 或 deleted_flag)以保留历史审计。权限与访问控制
list-by-bound-user 的数据授权判断),通常不对外开放敏感信息,仅返回是否存在与绑定类型。审计与日志
operatorId、patientUserId、boundUserId、bindingType、timestamp、ip 等。accessorId、patientUserId、bindingType 与被访问的数据类型。错误码
ErrorCode:PARAMETER_ERROR、SYSTEM_ERROR、DATA_NOT_FOUND、DATA_ACCESS_DENIED 等。建议为绑定流程补充特定错误码(如 BINDING_ALREADY_EXISTS, BINDING_NOT_FOUND),以方便前端友好提示。示例
创建绑定请求示例:
{
"patientUserId": 1001,
"boundUserId": 2001,
"bindingType": "DOCTOR"
}
检查绑定请求示例:
{
"patientUserId": 1001,
"boundUserId": 2001
}
检查绑定响应示例:
{
"exists": true,
"bindingType": "DOCTOR"
}
扩展建议