mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-12-03 10:52:33 +08:00
Merge branch 'main' into add_set_ex_friend
This commit is contained in:
commit
d62dd027dd
2
go.mod
2
go.mod
@ -156,3 +156,5 @@ require (
|
|||||||
golang.org/x/crypto v0.14.0 // indirect
|
golang.org/x/crypto v0.14.0 // indirect
|
||||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
|
replace github.com/OpenIMSDK/protocol v0.0.40 => github.com/luhaoling/protocol v0.0.0-20231227040641-2f934a0d64a3
|
||||||
|
|||||||
2
go.sum
2
go.sum
@ -227,6 +227,8 @@ github.com/lestrrat-go/strftime v1.0.6 h1:CFGsDEt1pOpFNU+TJB0nhz9jl+K0hZSLE205Ah
|
|||||||
github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw=
|
github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw=
|
||||||
github.com/lithammer/shortuuid v3.0.0+incompatible h1:NcD0xWW/MZYXEHa6ITy6kaXN5nwm/V115vj2YXfhS0w=
|
github.com/lithammer/shortuuid v3.0.0+incompatible h1:NcD0xWW/MZYXEHa6ITy6kaXN5nwm/V115vj2YXfhS0w=
|
||||||
github.com/lithammer/shortuuid v3.0.0+incompatible/go.mod h1:FR74pbAuElzOUuenUHTK2Tciko1/vKuIKS9dSkDrA4w=
|
github.com/lithammer/shortuuid v3.0.0+incompatible/go.mod h1:FR74pbAuElzOUuenUHTK2Tciko1/vKuIKS9dSkDrA4w=
|
||||||
|
github.com/luhaoling/protocol v0.0.0-20231227040641-2f934a0d64a3 h1:HZz2U/M3T4x9SqPxWdrD9MZy7jxx7nS+nx/aRN9m3RQ=
|
||||||
|
github.com/luhaoling/protocol v0.0.0-20231227040641-2f934a0d64a3/go.mod h1:F25dFrwrIx3lkNoiuf6FkCfxuwf8L4Z8UIsdTHP/r0Y=
|
||||||
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
|
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
|
||||||
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
|
github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
|
||||||
|
|||||||
@ -17,6 +17,7 @@ package user
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -496,26 +497,36 @@ func (s *userServer) SearchNotificationAccount(ctx context.Context, req *pbuser.
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if req.NickName != "" {
|
||||||
|
users, err := s.UserDatabase.FindByNickname(ctx, req.NickName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
resp := s.userModelToResp(users)
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.UserID != "" {
|
||||||
|
users, err := s.UserDatabase.Find(ctx, []string{req.UserID})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
resp := s.userModelToResp(users)
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
_, users, err := s.UserDatabase.Page(ctx, req.Pagination)
|
_, users, err := s.UserDatabase.Page(ctx, req.Pagination)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var total int64
|
resp := s.userModelToResp(users)
|
||||||
accounts := make([]*pbuser.NotificationAccountInfo, 0, len(users))
|
return resp, nil
|
||||||
for _, v := range users {
|
}
|
||||||
if v.AppMangerLevel != constant.AppNotificationAdmin {
|
|
||||||
continue
|
func (s *userServer) UpdateUserInfoEx(ctx context.Context, req *pbuser.UpdateUserInfoExReq) (*pbuser.UpdateUserInfoExResp, error) {
|
||||||
}
|
//TODO implement me
|
||||||
temp := &pbuser.NotificationAccountInfo{
|
panic("implement me")
|
||||||
UserID: v.UserID,
|
|
||||||
FaceURL: v.FaceURL,
|
|
||||||
NickName: v.Nickname,
|
|
||||||
}
|
|
||||||
accounts = append(accounts, temp)
|
|
||||||
total += 1
|
|
||||||
}
|
|
||||||
return &pbuser.SearchNotificationAccountResp{Total: total, NotificationAccounts: accounts}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *userServer) GetNotificationAccount(ctx context.Context, req *pbuser.GetNotificationAccountReq) (*pbuser.GetNotificationAccountResp, error) {
|
func (s *userServer) GetNotificationAccount(ctx context.Context, req *pbuser.GetNotificationAccountReq) (*pbuser.GetNotificationAccountResp, error) {
|
||||||
@ -547,3 +558,20 @@ func (s *userServer) genUserID() string {
|
|||||||
}
|
}
|
||||||
return string(data)
|
return string(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *userServer) userModelToResp(users []*relation.UserModel) *pbuser.SearchNotificationAccountResp {
|
||||||
|
accounts := make([]*pbuser.NotificationAccountInfo, 0)
|
||||||
|
var total int64
|
||||||
|
for _, v := range users {
|
||||||
|
if v.AppMangerLevel == constant.AppNotificationAdmin || v.AppMangerLevel == constant.AppAdmin {
|
||||||
|
temp := &pbuser.NotificationAccountInfo{
|
||||||
|
UserID: v.UserID,
|
||||||
|
FaceURL: v.FaceURL,
|
||||||
|
NickName: v.Nickname,
|
||||||
|
}
|
||||||
|
accounts = append(accounts, temp)
|
||||||
|
total += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &pbuser.SearchNotificationAccountResp{Total: total, NotificationAccounts: accounts}
|
||||||
|
}
|
||||||
|
|||||||
@ -38,6 +38,8 @@ type UserDatabase interface {
|
|||||||
FindWithError(ctx context.Context, userIDs []string) (users []*relation.UserModel, err error)
|
FindWithError(ctx context.Context, userIDs []string) (users []*relation.UserModel, err error)
|
||||||
// Find Get the information of the specified user If the userID is not found, no error will be returned
|
// Find Get the information of the specified user If the userID is not found, no error will be returned
|
||||||
Find(ctx context.Context, userIDs []string) (users []*relation.UserModel, err error)
|
Find(ctx context.Context, userIDs []string) (users []*relation.UserModel, err error)
|
||||||
|
// Find userInfo By Nickname
|
||||||
|
FindByNickname(ctx context.Context, nickname string) (users []*relation.UserModel, err error)
|
||||||
// Create Insert multiple external guarantees that the userID is not repeated and does not exist in the db
|
// Create Insert multiple external guarantees that the userID is not repeated and does not exist in the db
|
||||||
Create(ctx context.Context, users []*relation.UserModel) (err error)
|
Create(ctx context.Context, users []*relation.UserModel) (err error)
|
||||||
// Update update (non-zero value) external guarantee userID exists
|
// Update update (non-zero value) external guarantee userID exists
|
||||||
@ -133,6 +135,11 @@ func (u *userDatabase) Find(ctx context.Context, userIDs []string) (users []*rel
|
|||||||
return u.cache.GetUsersInfo(ctx, userIDs)
|
return u.cache.GetUsersInfo(ctx, userIDs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Find userInfo By Nickname
|
||||||
|
func (u *userDatabase) FindByNickname(ctx context.Context, nickname string) (users []*relation.UserModel, err error) {
|
||||||
|
return u.userDB.TakeByNickname(ctx, nickname)
|
||||||
|
}
|
||||||
|
|
||||||
// Create Insert multiple external guarantees that the userID is not repeated and does not exist in the db.
|
// Create Insert multiple external guarantees that the userID is not repeated and does not exist in the db.
|
||||||
func (u *userDatabase) Create(ctx context.Context, users []*relation.UserModel) (err error) {
|
func (u *userDatabase) Create(ctx context.Context, users []*relation.UserModel) (err error) {
|
||||||
return u.tx.Transaction(ctx, func(ctx context.Context) error {
|
return u.tx.Transaction(ctx, func(ctx context.Context) error {
|
||||||
|
|||||||
@ -65,6 +65,10 @@ func (u *UserMgo) Take(ctx context.Context, userID string) (user *relation.UserM
|
|||||||
return mgoutil.FindOne[*relation.UserModel](ctx, u.coll, bson.M{"user_id": userID})
|
return mgoutil.FindOne[*relation.UserModel](ctx, u.coll, bson.M{"user_id": userID})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (u *UserMgo) TakeByNickname(ctx context.Context, nickname string) (user []*relation.UserModel, err error) {
|
||||||
|
return mgoutil.Find[*relation.UserModel](ctx, u.coll, bson.M{"nickname": nickname})
|
||||||
|
}
|
||||||
|
|
||||||
func (u *UserMgo) Page(ctx context.Context, pagination pagination.Pagination) (count int64, users []*relation.UserModel, err error) {
|
func (u *UserMgo) Page(ctx context.Context, pagination pagination.Pagination) (count int64, users []*relation.UserModel, err error) {
|
||||||
return mgoutil.FindPage[*relation.UserModel](ctx, u.coll, bson.M{}, pagination)
|
return mgoutil.FindPage[*relation.UserModel](ctx, u.coll, bson.M{}, pagination)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -53,6 +53,7 @@ type UserModelInterface interface {
|
|||||||
UpdateByMap(ctx context.Context, userID string, args map[string]any) (err error)
|
UpdateByMap(ctx context.Context, userID string, args map[string]any) (err error)
|
||||||
Find(ctx context.Context, userIDs []string) (users []*UserModel, err error)
|
Find(ctx context.Context, userIDs []string) (users []*UserModel, err error)
|
||||||
Take(ctx context.Context, userID string) (user *UserModel, err error)
|
Take(ctx context.Context, userID string) (user *UserModel, err error)
|
||||||
|
TakeByNickname(ctx context.Context, nickname string) (user []*UserModel, err error)
|
||||||
Page(ctx context.Context, pagination pagination.Pagination) (count int64, users []*UserModel, err error)
|
Page(ctx context.Context, pagination pagination.Pagination) (count int64, users []*UserModel, err error)
|
||||||
Exist(ctx context.Context, userID string) (exist bool, err error)
|
Exist(ctx context.Context, userID string) (exist bool, err error)
|
||||||
GetAllUserID(ctx context.Context, pagination pagination.Pagination) (count int64, userIDs []string, err error)
|
GetAllUserID(ctx context.Context, pagination pagination.Pagination) (count int64, userIDs []string, err error)
|
||||||
|
|||||||
@ -30,10 +30,9 @@ func NewOptions(opts ...OptionsOpt) Options {
|
|||||||
options[constant.IsOfflinePush] = false
|
options[constant.IsOfflinePush] = false
|
||||||
options[constant.IsUnreadCount] = false
|
options[constant.IsUnreadCount] = false
|
||||||
options[constant.IsConversationUpdate] = false
|
options[constant.IsConversationUpdate] = false
|
||||||
options[constant.IsSenderSync] = false
|
options[constant.IsSenderSync] = true
|
||||||
options[constant.IsNotPrivate] = false
|
options[constant.IsNotPrivate] = false
|
||||||
options[constant.IsSenderConversationUpdate] = false
|
options[constant.IsSenderConversationUpdate] = false
|
||||||
options[constant.IsSenderNotificationPush] = false
|
|
||||||
options[constant.IsReactionFromCache] = false
|
options[constant.IsReactionFromCache] = false
|
||||||
for _, opt := range opts {
|
for _, opt := range opts {
|
||||||
opt(options)
|
opt(options)
|
||||||
@ -114,12 +113,6 @@ func WithSenderConversationUpdate() OptionsOpt {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func WithSenderNotificationPush() OptionsOpt {
|
|
||||||
return func(options Options) {
|
|
||||||
options[constant.IsSenderNotificationPush] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func WithReactionFromCache() OptionsOpt {
|
func WithReactionFromCache() OptionsOpt {
|
||||||
return func(options Options) {
|
return func(options Options) {
|
||||||
options[constant.IsReactionFromCache] = true
|
options[constant.IsReactionFromCache] = true
|
||||||
@ -174,10 +167,6 @@ func (o Options) IsSenderConversationUpdate() bool {
|
|||||||
return o.Is(constant.IsSenderConversationUpdate)
|
return o.Is(constant.IsSenderConversationUpdate)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o Options) IsSenderNotificationPush() bool {
|
|
||||||
return o.Is(constant.IsSenderNotificationPush)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o Options) IsReactionFromCache() bool {
|
func (o Options) IsReactionFromCache() bool {
|
||||||
return o.Is(constant.IsReactionFromCache)
|
return o.Is(constant.IsReactionFromCache)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -258,6 +258,7 @@ func (s *NotificationSender) NotificationWithSesstionType(ctx context.Context, s
|
|||||||
optionsConfig.ReliabilityLevel = constant.UnreliableNotification
|
optionsConfig.ReliabilityLevel = constant.UnreliableNotification
|
||||||
}
|
}
|
||||||
options := config.GetOptionsByNotification(optionsConfig)
|
options := config.GetOptionsByNotification(optionsConfig)
|
||||||
|
s.SetOptionsByContentType(ctx, options, contentType)
|
||||||
msg.Options = options
|
msg.Options = options
|
||||||
offlineInfo.Title = title
|
offlineInfo.Title = title
|
||||||
offlineInfo.Desc = desc
|
offlineInfo.Desc = desc
|
||||||
@ -276,3 +277,11 @@ func (s *NotificationSender) NotificationWithSesstionType(ctx context.Context, s
|
|||||||
func (s *NotificationSender) Notification(ctx context.Context, sendID, recvID string, contentType int32, m proto.Message, opts ...NotificationOptions) error {
|
func (s *NotificationSender) Notification(ctx context.Context, sendID, recvID string, contentType int32, m proto.Message, opts ...NotificationOptions) error {
|
||||||
return s.NotificationWithSesstionType(ctx, sendID, recvID, contentType, s.sessionTypeConf[contentType], m, opts...)
|
return s.NotificationWithSesstionType(ctx, sendID, recvID, contentType, s.sessionTypeConf[contentType], m, opts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *NotificationSender) SetOptionsByContentType(_ context.Context, options map[string]bool, contentType int32) {
|
||||||
|
switch contentType {
|
||||||
|
case constant.UserStatusChangeNotification:
|
||||||
|
options[constant.IsSenderSync] = false
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user