107 lines
3.1 KiB
Go
107 lines
3.1 KiB
Go
|
/**
|
|||
|
* @Author: Echo
|
|||
|
* @Author:1711788888@qq.com
|
|||
|
* @Date: 2021/5/27 20:44
|
|||
|
* @Desc: 资料管理
|
|||
|
*/
|
|||
|
|
|||
|
package profile
|
|||
|
|
|||
|
import (
|
|||
|
"git.echol.cn/loser/tencent-im/internal/core"
|
|||
|
"git.echol.cn/loser/tencent-im/internal/enum"
|
|||
|
"git.echol.cn/loser/tencent-im/internal/types"
|
|||
|
)
|
|||
|
|
|||
|
const (
|
|||
|
service = "profile"
|
|||
|
commandSetProfile = "portrait_set"
|
|||
|
commandGetProfiles = "portrait_get"
|
|||
|
)
|
|||
|
|
|||
|
type API interface {
|
|||
|
// SetProfile 设置资料
|
|||
|
// 支持 标配资料字段 和 自定义资料字段 的设置
|
|||
|
// 点击查看详细文档:
|
|||
|
// https://cloud.tencent.com/document/product/269/1640
|
|||
|
SetProfile(profile *Profile) (err error)
|
|||
|
|
|||
|
// GetProfiles 拉取资料
|
|||
|
// 支持拉取好友和非好友的资料字段。
|
|||
|
// 支持拉取 标配资料字段 和 自定义资料字段。
|
|||
|
// 建议每次拉取的用户数不超过100,避免因回包数据量太大导致回包失败。
|
|||
|
// 请确保请求中的所有帐号都已导入即时通信 IM,如果请求中含有未导入即时通信 IM 的帐号,即时通信 IM 后台将会提示错误。
|
|||
|
// 点击查看详细文档:
|
|||
|
// https://cloud.tencent.com/document/product/269/1639
|
|||
|
GetProfiles(userIds []string, attrs []string) (profiles []*Profile, err error)
|
|||
|
}
|
|||
|
|
|||
|
type api struct {
|
|||
|
client core.Client
|
|||
|
}
|
|||
|
|
|||
|
func NewAPI(client core.Client) API {
|
|||
|
return &api{client: client}
|
|||
|
}
|
|||
|
|
|||
|
// SetProfile 设置资料
|
|||
|
// 支持 标配资料字段 和 自定义资料字段 的设置
|
|||
|
// 点击查看详细文档:
|
|||
|
// https://cloud.tencent.com/document/product/269/1640
|
|||
|
func (a *api) SetProfile(profile *Profile) (err error) {
|
|||
|
if err = profile.CheckError(); err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
userId := profile.GetUserId()
|
|||
|
|
|||
|
attrs := profile.GetAttrs()
|
|||
|
|
|||
|
if len(attrs) == 0 {
|
|||
|
err = core.NewError(enum.InvalidParamsCode, "the attributes is not set")
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
req := &setProfileReq{UserId: userId, Attrs: make([]*types.TagPair, 0, len(attrs))}
|
|||
|
|
|||
|
for tag, value := range attrs {
|
|||
|
req.Attrs = append(req.Attrs, &types.TagPair{
|
|||
|
Tag: tag,
|
|||
|
Value: value,
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
if err = a.client.Post(service, commandSetProfile, req, &types.ActionBaseResp{}); err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// GetProfiles 拉取资料
|
|||
|
// 支持拉取好友和非好友的资料字段。
|
|||
|
// 支持拉取 标配资料字段 和 自定义资料字段。
|
|||
|
// 建议每次拉取的用户数不超过100,避免因回包数据量太大导致回包失败。
|
|||
|
// 请确保请求中的所有帐号都已导入即时通信 IM,如果请求中含有未导入即时通信 IM 的帐号,即时通信 IM 后台将会提示错误。
|
|||
|
// 点击查看详细文档:
|
|||
|
// https://cloud.tencent.com/document/product/269/1639
|
|||
|
func (a *api) GetProfiles(userIds []string, attrs []string) (profiles []*Profile, err error) {
|
|||
|
req := &getProfileReq{UserIds: userIds, TagList: attrs}
|
|||
|
resp := &getProfileResp{}
|
|||
|
|
|||
|
if err = a.client.Post(service, commandGetProfiles, req, resp); err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
for _, account := range resp.UserProfiles {
|
|||
|
p := NewProfile(account.UserId)
|
|||
|
p.SetError(account.ResultCode, account.ResultInfo)
|
|||
|
for _, item := range account.Profile {
|
|||
|
p.SetAttr(item.Tag, item.Value)
|
|||
|
}
|
|||
|
profiles = append(profiles, p)
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|