|
|
@@ -0,0 +1,99 @@
|
|
|
+# dingtalk-contacts-v2 Specification
|
|
|
+
|
|
|
+## Purpose
|
|
|
+TBD - created by archiving change extend-dingtalk-contacts-api. Update Purpose after archive.
|
|
|
+## Requirements
|
|
|
+### Requirement: 用户管理完整覆盖
|
|
|
+
|
|
|
+`DDClient_Contacts` SHALL 提供对钉钉官方通讯录用户管理 endpoint 的完整对齐。所有方法 MUST 遵守 `mjava-baseline §3.4.2` 的签名规则。
|
|
|
+
|
|
|
+#### Scenario: 创建用户(完整字段)
|
|
|
+
|
|
|
+- **WHEN** 调用 `createUser_v2(access_token, name, mobile, dept_id_list, body_ext)`
|
|
|
+- **THEN** `body_ext` 必须支持官方文档列出的所有可选字段(userid / hired_date / job_number / title / email / senior_mode / extension / ...)
|
|
|
+- **AND** javadoc 必须枚举这些字段并注明类型
|
|
|
+
|
|
|
+#### Scenario: 更新用户
|
|
|
+
|
|
|
+- **WHEN** 调用 `updateUser(access_token, userid, body_ext)`
|
|
|
+- **THEN** `userid` 必填,其他字段全部通过 `body_ext` 传入
|
|
|
+- **AND** 不传的字段保持钉钉侧原值不变
|
|
|
+
|
|
|
+#### Scenario: 按 unionId 查询
|
|
|
+
|
|
|
+- **WHEN** 调用 `getUserByUnionId(access_token, union_id)`
|
|
|
+- **THEN** 返回 userid(二次调用 `getUser_v2` 获取详情)
|
|
|
+
|
|
|
+#### Scenario: 查询管理员
|
|
|
+
|
|
|
+- **WHEN** 调用 `listAdmins(access_token)`
|
|
|
+- **THEN** 返回管理员 userid 列表,含主管理员与子管理员区分字段
|
|
|
+
|
|
|
+#### Scenario: 查询未激活员工
|
|
|
+
|
|
|
+- **WHEN** 调用 `listInactiveUsers(access_token, is_active, offset, size, body_ext)`
|
|
|
+- **THEN** 支持按激活状态过滤
|
|
|
+
|
|
|
+### Requirement: 部门管理完整覆盖
|
|
|
+
|
|
|
+`DDClient_Contacts` SHALL 提供部门 CRUD 与层级查询的完整对齐。所有方法 MUST 对应钉钉官方部门管理 endpoint。
|
|
|
+
|
|
|
+#### Scenario: 部门 CRUD
|
|
|
+
|
|
|
+- **WHEN** 依次调用 `createDepartment_v2` / `updateDepartment` / `deleteDepartment` / `getDepartment_v2`
|
|
|
+- **THEN** 每个方法参数完整对齐官方文档
|
|
|
+- **AND** `body_ext` 支持 `hide_dept` / `dept_permits` / `user_permits` / `outer_dept` / `source_identifier` 等全部可选项
|
|
|
+
|
|
|
+#### Scenario: 父部门链查询
|
|
|
+
|
|
|
+- **WHEN** 调用 `listParentByDept(access_token, dept_id)`
|
|
|
+- **THEN** 返回目标部门到根部门的父链
|
|
|
+
|
|
|
+### Requirement: 角色管理
|
|
|
+
|
|
|
+`DDClient_Contacts` SHALL 提供角色的增删改查与批量员工授权能力。
|
|
|
+
|
|
|
+#### Scenario: 新增角色
|
|
|
+
|
|
|
+- **WHEN** 调用 `addRole(access_token, roleName, groupId)`
|
|
|
+- **THEN** 返回 roleId
|
|
|
+
|
|
|
+#### Scenario: 批量分配角色
|
|
|
+
|
|
|
+- **WHEN** 调用 `addRolesForEmps(access_token, roleIds, userIds)`
|
|
|
+- **THEN** 一次调用同时为多员工授权多角色
|
|
|
+
|
|
|
+#### Scenario: 查询角色成员
|
|
|
+
|
|
|
+- **WHEN** 调用 `listRoleEmployees(access_token, role_id, size, offset)`
|
|
|
+- **THEN** 分页返回角色下员工列表
|
|
|
+
|
|
|
+### Requirement: 员工字段可见性
|
|
|
+
|
|
|
+`DDClient_Contacts` SHALL 提供员工档案字段隐藏规则的管理能力。
|
|
|
+
|
|
|
+#### Scenario: 隐藏字段设置
|
|
|
+
|
|
|
+- **WHEN** 调用 `upsertHideField(access_token, name, field, userIds, deptIds)`
|
|
|
+- **THEN** 对指定员工或部门隐藏指定员工档案字段
|
|
|
+
|
|
|
+#### Scenario: 查询隐藏字段
|
|
|
+
|
|
|
+- **WHEN** 调用 `listHideFields(access_token, size, offset)`
|
|
|
+- **THEN** 返回企业当前生效的字段隐藏规则列表
|
|
|
+
|
|
|
+### Requirement: 参数透传约束
|
|
|
+
|
|
|
+本 capability 所有方法 MUST 满足官方可选参数完整透传与文档化要求,不得因 Java 侧建模省事而过滤字段。
|
|
|
+
|
|
|
+#### Scenario: body_ext 不得过滤官方可选参数
|
|
|
+
|
|
|
+- **WHEN** 调用方通过 `body_ext` 传入官方文档支持的任意可选字段
|
|
|
+- **THEN** 实现必须原样透传到 HTTP 请求体,不得删除或改写
|
|
|
+- **AND** 方法 javadoc 必须列出所有已知 body_ext key 并注明类型
|
|
|
+
|
|
|
+#### Scenario: 方法必须有 apiNote
|
|
|
+
|
|
|
+- **WHEN** 新增任一 Client 方法
|
|
|
+- **THEN** javadoc 必须含 `@apiNote` 链到该 endpoint 的钉钉官方文档页
|
|
|
+
|