207 lines
5.0 KiB
Go
207 lines
5.0 KiB
Go
|
/**
|
|||
|
* @Author: Echo
|
|||
|
* @Email:1711788888@qq.com
|
|||
|
* @Date: 2021/8/30 2:55 下午
|
|||
|
* @Desc: 好友关系
|
|||
|
*/
|
|||
|
|
|||
|
package sns
|
|||
|
|
|||
|
import (
|
|||
|
"errors"
|
|||
|
"fmt"
|
|||
|
"strings"
|
|||
|
|
|||
|
"git.echol.cn/loser/tencent-im/internal/entity"
|
|||
|
)
|
|||
|
|
|||
|
var (
|
|||
|
errNotSetAccount = errors.New("the friend's account is not set")
|
|||
|
errNotSetAddSource = errors.New("the friend's add source is not set")
|
|||
|
)
|
|||
|
|
|||
|
type Friend struct {
|
|||
|
entity.User
|
|||
|
customAttrs map[string]interface{}
|
|||
|
}
|
|||
|
|
|||
|
func NewFriend(userId ...string) *Friend {
|
|||
|
f := new(Friend)
|
|||
|
f.customAttrs = make(map[string]interface{})
|
|||
|
|
|||
|
if len(userId) > 0 {
|
|||
|
f.SetUserId(userId[0])
|
|||
|
}
|
|||
|
|
|||
|
return f
|
|||
|
}
|
|||
|
|
|||
|
// SetAddSource 设置添加来源
|
|||
|
func (f *Friend) SetAddSource(addSource string) {
|
|||
|
f.SetAttr(FriendAttrAddSource, "AddSource_Type_"+addSource)
|
|||
|
}
|
|||
|
|
|||
|
// GetAddSource 获取添加来源
|
|||
|
func (f *Friend) GetAddSource() (addSource string, exist bool) {
|
|||
|
var v interface{}
|
|||
|
if v, exist = f.GetAttr(FriendAttrAddSource); exist {
|
|||
|
addSource = strings.TrimLeft(v.(string), "AddSource_Type_")
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// GetSrcAddSource 获取添加来源(原始的)
|
|||
|
func (f *Friend) GetSrcAddSource() (addSource string, exist bool) {
|
|||
|
var v interface{}
|
|||
|
if v, exist = f.GetAttr(FriendAttrAddSource); exist {
|
|||
|
addSource = v.(string)
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// SetRemark 设置备注
|
|||
|
func (f *Friend) SetRemark(remark string) {
|
|||
|
f.SetAttr(FriendAttrRemark, remark)
|
|||
|
}
|
|||
|
|
|||
|
// GetRemark 获取备注
|
|||
|
func (f *Friend) GetRemark() (remark string, exist bool) {
|
|||
|
var v interface{}
|
|||
|
if v, exist = f.GetAttr(FriendAttrRemark); exist {
|
|||
|
remark = v.(string)
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// SetGroup 设置分组
|
|||
|
func (f *Friend) SetGroup(groupName ...string) {
|
|||
|
f.SetAttr(FriendAttrGroup, groupName)
|
|||
|
}
|
|||
|
|
|||
|
// GetGroup 获取分组
|
|||
|
func (f *Friend) GetGroup() (groups []string, exist bool) {
|
|||
|
var v interface{}
|
|||
|
if v, exist = f.GetAttr(FriendAttrGroup); exist && v != nil {
|
|||
|
if vv, ok := v.([]interface{}); ok {
|
|||
|
for _, group := range vv {
|
|||
|
groups = append(groups, group.(string))
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// SetAddWording 设置形成好友关系时的附言信息
|
|||
|
func (f *Friend) SetAddWording(addWording string) {
|
|||
|
f.SetAttr(FriendAttrAddWording, addWording)
|
|||
|
}
|
|||
|
|
|||
|
// GetAddWording 获取形成好友关系时的附言信息
|
|||
|
func (f *Friend) GetAddWording() (addWording string, exist bool) {
|
|||
|
var v interface{}
|
|||
|
if v, exist = f.GetAttr(FriendAttrAddWording); exist {
|
|||
|
addWording = v.(string)
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// SetAddTime 设置添加时间(忽略)
|
|||
|
func (f *Friend) SetAddTime(addTime int64) {
|
|||
|
f.SetAttr(FriendAttrAddTime, addTime)
|
|||
|
}
|
|||
|
|
|||
|
// GetAddTime 获取添加时间
|
|||
|
func (f *Friend) GetAddTime() (addTime int64, exist bool) {
|
|||
|
var v interface{}
|
|||
|
if v, exist = f.GetAttr(FriendAttrAddTime); exist {
|
|||
|
addTime = v.(int64)
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// SetRemarkTime 设置备注时间
|
|||
|
func (f *Friend) SetRemarkTime(remarkTime int64) {
|
|||
|
f.SetAttr(FriendAttrRemarkTime, remarkTime)
|
|||
|
}
|
|||
|
|
|||
|
// GetRemarkTime 获取备注时间
|
|||
|
func (f *Friend) GetRemarkTime() (remarkTime int64, exist bool) {
|
|||
|
var v interface{}
|
|||
|
if v, exist = f.GetAttr(FriendAttrRemarkTime); exist {
|
|||
|
remarkTime = v.(int64)
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// SetSNSCustomAttr 设置SNS自定义关系数据(自定义字段需要单独申请,请在 IM 控制台 >应用配置>功能配置申请自定义好友字段,申请提交后,自定义好友字段将在5分钟内生效)
|
|||
|
func (f *Friend) SetSNSCustomAttr(name string, value interface{}) {
|
|||
|
if f.customAttrs == nil {
|
|||
|
f.customAttrs = make(map[string]interface{})
|
|||
|
}
|
|||
|
|
|||
|
f.customAttrs[fmt.Sprintf("%s_%s", "Tag_SNS_Custom", name)] = value
|
|||
|
}
|
|||
|
|
|||
|
// GetSNSCustomAttr 设置SNS自定义关系数据 (自定义字段需要单独申请,请在 IM 控制台 >应用配置>功能配置申请自定义好友字段,申请提交后,自定义好友字段将在5分钟内生效)
|
|||
|
func (f *Friend) GetSNSCustomAttr(name string) (value interface{}, exist bool) {
|
|||
|
if f.customAttrs == nil {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
value, exist = f.customAttrs[fmt.Sprintf("%s_%s", "Tag_SNS_Custom", name)]
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// GetSNSAttrs 获取SNS标准关系数据
|
|||
|
func (f *Friend) GetSNSAttrs() (attrs map[string]interface{}) {
|
|||
|
attrs = make(map[string]interface{})
|
|||
|
|
|||
|
for k, v := range f.GetAttrs() {
|
|||
|
switch k {
|
|||
|
case FriendAttrAddSource, FriendAttrRemark, FriendAttrGroup, FriendAttrAddWording, FriendAttrAddTime, FriendAttrRemarkTime:
|
|||
|
attrs[k] = v
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// GetSNSCustomAttrs 获取SNS自定义关系数据(自定义字段需要单独申请,请在 IM 控制台 >应用配置>功能配置申请自定义好友字段,申请提交后,自定义好友字段将在5分钟内生效)
|
|||
|
func (f *Friend) GetSNSCustomAttrs() (attrs map[string]interface{}) {
|
|||
|
attrs = make(map[string]interface{})
|
|||
|
|
|||
|
if f.customAttrs == nil {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
for k, v := range f.customAttrs {
|
|||
|
switch k {
|
|||
|
case FriendAttrAddSource, FriendAttrRemark, FriendAttrGroup, FriendAttrAddWording, FriendAttrAddTime, FriendAttrRemarkTime:
|
|||
|
default:
|
|||
|
attrs[k] = v
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// checkError 检测参数错误
|
|||
|
func (f *Friend) checkError() error {
|
|||
|
if f.GetUserId() == "" {
|
|||
|
return errNotSetAccount
|
|||
|
}
|
|||
|
|
|||
|
if _, exist := f.GetSrcAddSource(); !exist {
|
|||
|
return errNotSetAddSource
|
|||
|
}
|
|||
|
|
|||
|
return nil
|
|||
|
}
|