Skip to content

Commit bcbe42d

Browse files
committed
Add docs on custom attributes, custom settings, and user-defined attributes (Chinese) #1564
1 parent ddca752 commit bcbe42d

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

turms-docs/src/zh-CN/server/development/redevelopment.md

+101
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,107 @@ Turms服务端开发环境的搭建其实也非常简单,具体步骤包括:
9494
* `dev`环境下,turms-service会自动向MongoDB数据库生成Fake数据,并且turms-gateway也会自动创建基于TCP的Fake客户端,这些客户端会随机地(请求类型随机、请求参数随机)向turms-gateway发送真实客户端请求,以方便开发者测试。
9595
* 如果您想替换MongoDB服务端的端口,您只需在Turms项目下全局替换`27017`为您的目标端口即可。
9696

97+
## 自定义属性
98+
99+
Turms的开发者用户经常会提出一类需求,即:希望Turms能够支持给用户、群组、关系等模型添加自定义的属性,以实现各种各样的定制化业务功能,如:
100+
101+
* 需要给用户加上`所属公司``部门``邮箱`等信息,并且这些信息支持用户自定义,且支持其他用户查询。
102+
* 需要实现当前用户能够给他的联系人添加自定义`备注(note)`
103+
* 需要在多个设备之间,共享给聊天会话的一些属性配置,如`置顶``新消息提醒`
104+
105+
尽管在Turms的系统设计上,它只被允许实现即时通讯的核心功能,并且我们也无计划对上述相对定制化的功能提供直接支持,但实现上述功能,开发者用户其实并不需要修改Turms的源码,只需要对turms-service服务端进行配置,即可实现对这些自定义属性的增删改查逻辑。
106+
107+
### 自定义模型属性
108+
109+
实现给用户与群组模型添加自定义的属性。
110+
111+
#### turms-service服务相关属性
112+
113+
| 属性 | 作用 | 默认值 |
114+
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------ |
115+
| turms.service.user.info.user-defined-attributes | 用于定义`用户`模型的自定义属性 | |
116+
| turms.service.user.info.user-defined-attributes.ignore-unknown-attributes-on-upsert | 在turms-service服务端upsert自定义属性时,是否忽略未知(即未在`turms.service.user.info.user-defined-attributes.allowed-attributes`声明的属性)。如果该值为`false`,则当用户请求插入未知属性时,响应错误;如果该值为`true`,则turms-service会忽略该自定义属性,并不会响应错误,并且继续处理其他已知自定义属性 | false |
117+
| turms.service.user.info.user-defined-attributes.allowed-attributes | 指定一组允许客户端使用的自定义属性。<br />注意:该属性是一个数组 | |
118+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].source-name | 指定从客户端请求中的`userDefinedAttributes`的哪个键(字段名)获取自定义属性值 | "" |
119+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].stored-name | 指定将客户端请求数据存储在数据库时的字段名。如果未指定该值,则使用source-name作为字段名 | "" |
120+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].immutable | 是否该值不可变。如果为`true`,则用户将无法修改已经存储的值 | false |
121+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].value.type | 值的类型。可以是下述类型:<br />* INT:对应MongoDB的`int`<br />* LONG:对应MongoDB的`long`<br />* DOUBLE:对应MongoDB的`double`<br />* BOOL:对应MongoDB的`bool`<br />* STRING:对应MongoDB的`string`<br />* LANGUAGE:对应MongoDB的`string`<br />* ARRAY:对应MongoDB的`array` | |
122+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].value.int-value.min | 当值类型为`INT`时,指定允许的最小值(包括min值) | |
123+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].value.int-value.max | 当值类型为`INT`时,指定允许的最大值(包括max值) | |
124+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].value.long-value.min | 当值类型为`LONG`时,指定允许的最小值(包括min值) | |
125+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].value.long-value.max | 当值类型为`LONG`时,指定允许的最大值(包括max值) | |
126+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].value.double-value.min | 当值类型为`DOUBLE`时,指定允许的最小值(包括min值) | |
127+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].value.double-value.max | 当值类型为`DOUBLE`时,指定允许的最大值(包括max值) | |
128+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].value.string-value.min-length | 当值类型为`STRING`时,指定允许的字符串最小长度(包括min-length值) | 0 |
129+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].value.string-value.max-length | 当值类型为`STRING`时,指定允许的字符串最大长度(包括max-length值) | 100 |
130+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].value.string-value.regexes[?] | 当值类型为`STRING`时,指定用于校验输入字符串值的正则表达式 | |
131+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].value.array-value.min-element-count | 当值类型为`ARRAY`时,指定允许的数组最小长度(包括min-element-count值) | 0 |
132+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].value.array-value.max-element-count | 当值类型为`ARRAY`时,指定允许的数组最大长度(包括max-element-count值) | 10 |
133+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].value.array-value.unique | 当值类型为`ARRAY`时,是否对数组的值进行去重 | false |
134+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].value.array-value.allow-null-element | 当值类型为`ARRAY`时,是否允许数组中包含`null`| false |
135+
| turms.service.user.info.user-defined-attributes.allowed-attributes[?].value.array-value.element | 当值类型为`ARRAY`时,指定数组的元素类型 | |
136+
| turms.service.user.info.group-defined-attributes.allowed-attributes | 用于定义`群组`模型的自定义属性。<br />由于该属性的用法与上述的`turms.service.user.info.user-defined-attributes`的用法完全一致,故不赘述 | |
137+
138+
注意:Turms服务端目前只支持公开的自定义属性。换言之,任何用户都有权限查询所有用户与群组的自定义属性。
139+
140+
#### 客户端相关接口
141+
142+
* 更新用户自定义属性接口:`turmsClient.userService.updateProfile`
143+
* 更新群组自定义属性接口:`turmsClient.groupService.updateGroup`
144+
145+
关于具体的接口逻辑细节,请阅读客户端SDK源码中的接口说明。
146+
147+
### 自定义配置
148+
149+
一些开发者用户希望Turms能够存储自定义的用户与会话配置,如用户配置:`客户端语言``UI主题`等,如会话配置:`置顶``新消息提醒``备注`等。
150+
151+
#### turms-service服务相关属性
152+
153+
| 属性 | 作用 | 默认值 |
154+
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------ |
155+
| turms.service.user.settings | 用于自定义用户设置 | |
156+
| turms.service.user.settings.ignore-unknown-settings-on-upsert | 在turms-service服务端upsert自定义设置时,是否忽略未知(即未在`turms.service.user.settings.allowed-settings`声明的设置)。如果该值为`false`,则当用户请求插入未知设置时,响应错误;如果该值为`true`,则turms-service会忽略该自定义设置,并不会响应错误,并且继续处理其他已知自定义设置 | false |
157+
| turms.service.user.settings.ignore-unknown-settings-on-delete | 在turms-service服务端删除自定义设置时,是否忽略未知(即未在`turms.service.user.settings.allowed-settings`声明的设置)。如果该值为`false`,则当用户请求插入未知设置时,响应错误;如果该值为`true`,则turms-service会忽略该自定义设置,并不会响应错误,并且继续处理其他已知自定义设置 | |
158+
| turms.service.user.settings.allowed-settings | 指定一组允许客户端使用的自定义设置。<br />注意:该属性是一个数组 | |
159+
| turms.service.user.settings.allowed-settings[?].source-name | 指定从客户端请求中的`settings`的哪个键(字段名)获取自定义设置值 | "" |
160+
| turms.service.user.settings.allowed-settings[?].stored-name | 指定将客户端请求数据存储在数据库时的字段名。如果未指定该值,则使用source-name作为字段名 | "" |
161+
| turms.service.user.settings.allowed-settings[?].immutable | 是否该值不可变。如果为`true`,则用户无法修改已经存储的值 | false |
162+
| turms.service.user.settings.allowed-settings[?].deletable | 是否该值可以被删除。如果为`true`,则用户可以删除已经存储的值 | true |
163+
| turms.service.user.settings.allowed-settings[?].value | 见上述的`turms.service.user.info.user-defined-attributes.allowed-attributes[?].value` | |
164+
| turms.service.conversation.settings | 用于自定义会话设置。<br />由于该属性的用法与上述的`turms.service.user.settings`的用法完全一致,故不赘述 | |
165+
166+
#### 客户端相关接口
167+
168+
* 用户自定义设置
169+
170+
* Upsert用户自定义设置接口:`turmsClient.userService.upsertUserSettings`
171+
* 删除用户自定义设置接口:`turmsClient.userService.deleteUserSettings`
172+
* 查询用户自定义设置接口:`turmsClient.userService.queryUserSettings`
173+
174+
* 会话自定义设置
175+
176+
* Upsert会话自定义设置接口:
177+
* `turmsClient.conversationService.upsertPrivateConversationSettings`
178+
* `turmsClient.conversationService.upsertGroupConversationSettings`
179+
180+
* 删除会话自定义设置接口:`turmsClient.conversationService.deleteConversationSettings`
181+
182+
* 查询会话自定义设置接口:`turmsClient.conversationService.queryConversationSettings`
183+
184+
关于具体的接口逻辑细节,请阅读客户端SDK源码中的接口说明。
185+
186+
## 请求与响应模型
187+
188+
为了方便开发者能够简易地、快捷地、高效地对Turms进行定制化开发,我们在设计Turms客户端与服务端的Protobuf传输模型时,都在这些模型上加上了`repeated Value custom_attributes = 15`字段,开发者根据自身业务场景,在客户端与服务端自行地、灵活地使用这些字段。
189+
190+
Turms系统,包括所有Turms客户端与服务端,它们自身都不会去使用这些字段。
191+
192+
提醒:在Turms系统的源码与接口中,我们为了区分各种各样的自定义属性,特别对下述特性的名称进行了区分:
193+
194+
* Custom Attributes:特指Protobuf模型中自定义属性。
195+
* User Defined Attributes:特指存储模型(对应MongoDB的Collection)的自定义属性。
196+
* Properties:特指Turms服务端的属性配置。
197+
97198
## 关于任务难度
98199

99200
对于准备基于Turms做二次开发(改Turms项目自身的源码)的团队,可以参考下述的任务难度表,给成员分配任务。

0 commit comments

Comments
 (0)