2021-12-23 17:22:49 +08:00
package friend
import (
2021-12-24 15:02:47 +08:00
chat "Open_IM/internal/rpc/msg"
2021-12-23 17:22:49 +08:00
"Open_IM/pkg/common/config"
"Open_IM/pkg/common/constant"
imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model"
2022-09-15 01:22:20 +08:00
rocksCache "Open_IM/pkg/common/db/rocks_cache"
2021-12-23 17:22:49 +08:00
"Open_IM/pkg/common/log"
2022-09-15 01:22:20 +08:00
promePkg "Open_IM/pkg/common/prometheus"
2021-12-23 17:22:49 +08:00
"Open_IM/pkg/common/token_verify"
2021-12-28 15:33:47 +08:00
cp "Open_IM/pkg/common/utils"
2022-04-28 15:13:39 +08:00
pbCache "Open_IM/pkg/proto/cache"
2021-12-23 17:22:49 +08:00
pbFriend "Open_IM/pkg/proto/friend"
2021-12-26 18:47:11 +08:00
sdkws "Open_IM/pkg/proto/sdk_ws"
2021-12-23 17:22:49 +08:00
"Open_IM/pkg/utils"
"context"
2023-01-04 11:28:52 +08:00
"errors"
"fmt"
2023-01-05 15:30:33 +08:00
"github.com/OpenIMSDK/getcdv3"
2021-12-23 17:22:49 +08:00
"net"
"strconv"
"strings"
2021-12-28 15:33:47 +08:00
"time"
2022-05-29 19:44:22 +08:00
2022-09-15 16:27:36 +08:00
grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
2022-05-29 19:44:22 +08:00
"google.golang.org/grpc"
2021-12-23 17:22:49 +08:00
)
type friendServer struct {
rpcPort int
rpcRegisterName string
etcdSchema string
etcdAddr [ ] string
}
func NewFriendServer ( port int ) * friendServer {
2022-03-31 11:15:06 +08:00
log . NewPrivateLog ( constant . LogFileName )
2021-12-23 17:22:49 +08:00
return & friendServer {
rpcPort : port ,
rpcRegisterName : config . Config . RpcRegisterName . OpenImFriendName ,
etcdSchema : config . Config . Etcd . EtcdSchema ,
etcdAddr : config . Config . Etcd . EtcdAddr ,
}
}
func ( s * friendServer ) Run ( ) {
2021-12-26 18:47:11 +08:00
log . NewInfo ( "0" , "friendServer run..." )
2021-12-23 17:22:49 +08:00
2022-05-07 17:05:05 +08:00
listenIP := ""
if config . Config . ListenIP == "" {
listenIP = "0.0.0.0"
} else {
listenIP = config . Config . ListenIP
}
address := listenIP + ":" + strconv . Itoa ( s . rpcPort )
2021-12-23 17:22:49 +08:00
//listener network
2022-05-07 17:05:05 +08:00
listener , err := net . Listen ( "tcp" , address )
2021-12-23 17:22:49 +08:00
if err != nil {
2022-05-10 09:09:37 +08:00
panic ( "listening err:" + err . Error ( ) + s . rpcRegisterName )
2021-12-23 17:22:49 +08:00
}
2022-05-07 17:05:05 +08:00
log . NewInfo ( "0" , "listen ok " , address )
2021-12-23 17:22:49 +08:00
defer listener . Close ( )
//grpc server
2022-09-15 01:22:20 +08:00
var grpcOpts [ ] grpc . ServerOption
if config . Config . Prometheus . Enable {
2022-09-15 08:45:10 +08:00
promePkg . NewGrpcRequestCounter ( )
promePkg . NewGrpcRequestFailedCounter ( )
promePkg . NewGrpcRequestSuccessCounter ( )
2022-09-15 16:27:36 +08:00
grpcOpts = append ( grpcOpts , [ ] grpc . ServerOption {
2022-09-15 16:39:49 +08:00
// grpc.UnaryInterceptor(promePkg.UnaryServerInterceptorProme),
2022-09-15 16:27:36 +08:00
grpc . StreamInterceptor ( grpcPrometheus . StreamServerInterceptor ) ,
grpc . UnaryInterceptor ( grpcPrometheus . UnaryServerInterceptor ) ,
} ... )
2022-09-15 01:22:20 +08:00
}
srv := grpc . NewServer ( grpcOpts ... )
2021-12-23 17:22:49 +08:00
defer srv . GracefulStop ( )
//User friend related services register to etcd
pbFriend . RegisterFriendServer ( srv , s )
2022-06-09 12:49:16 +08:00
rpcRegisterIP := config . Config . RpcRegisterIP
2022-05-07 17:05:05 +08:00
if config . Config . RpcRegisterIP == "" {
rpcRegisterIP , err = utils . GetLocalIP ( )
if err != nil {
log . Error ( "" , "GetLocalIP failed " , err . Error ( ) )
}
}
2022-05-29 19:44:22 +08:00
log . NewInfo ( "" , "rpcRegisterIP" , rpcRegisterIP )
2023-01-05 15:30:33 +08:00
err = getcdv3 . RegisterEtcd ( s . etcdSchema , strings . Join ( s . etcdAddr , "," ) , rpcRegisterIP , s . rpcPort , s . rpcRegisterName , 10 , "" )
2021-12-23 17:22:49 +08:00
if err != nil {
2022-05-07 17:05:05 +08:00
log . NewError ( "0" , "RegisterEtcd failed " , err . Error ( ) , s . etcdSchema , strings . Join ( s . etcdAddr , "," ) , rpcRegisterIP , s . rpcPort , s . rpcRegisterName )
2022-08-26 17:41:58 +08:00
panic ( utils . Wrap ( err , "register friend module rpc to etcd err" ) )
2021-12-23 17:22:49 +08:00
}
err = srv . Serve ( listener )
if err != nil {
2021-12-26 18:47:11 +08:00
log . NewError ( "0" , "Serve failed " , err . Error ( ) , listener )
2021-12-23 17:22:49 +08:00
return
}
}
2021-12-26 18:47:11 +08:00
func ( s * friendServer ) AddBlacklist ( ctx context . Context , req * pbFriend . AddBlacklistReq ) ( * pbFriend . AddBlacklistResp , error ) {
2021-12-23 17:22:49 +08:00
log . NewInfo ( req . CommID . OperationID , "AddBlacklist args " , req . String ( ) )
2023-01-04 17:21:33 +08:00
ok := token_verify . CheckAccess ( ctx , req . CommID . OpUserID , req . CommID . FromUserID )
2021-12-23 17:22:49 +08:00
if ! ok {
2023-01-04 17:21:33 +08:00
return & pbFriend . AddBlacklistResp { CommonResp : constant . Error2CommResp ( ctx , constant . ErrNoPermission , "accress" ) } , nil
2021-12-23 17:22:49 +08:00
}
2023-01-11 16:42:47 +08:00
black := imdb . Black { OwnerUserID : req . CommID . FromUserID , BlockUserID : req . CommID . ToUserID , OperatorUserID : req . CommID . OpUserID }
2023-01-04 17:21:33 +08:00
err := imdb . InsertInToUserBlackList ( ctx , black )
2021-12-23 17:22:49 +08:00
if err != nil {
2023-01-04 17:21:33 +08:00
return & pbFriend . AddBlacklistResp { CommonResp : constant . Error2CommResp ( ctx , constant . ErrDatabase , err . Error ( ) ) } , nil
2021-12-23 17:22:49 +08:00
}
2023-01-11 16:42:47 +08:00
etcdConn := getcdv3 . GetConn ( config . Config . Etcd . EtcdSchema , strings . Join ( config . Config . Etcd . EtcdAddr , "," ) , config . Config . RpcRegisterName . OpenImCacheName , req . CommID . OperationID , config . Config . Etcd . UserName , config . Config . Etcd . Password )
2022-06-16 14:55:38 +08:00
if etcdConn == nil {
2023-01-04 17:21:33 +08:00
return & pbFriend . AddBlacklistResp { CommonResp : constant . Error2CommResp ( ctx , constant . ErrInternalServer , "conn is nil" ) } , nil
2022-06-16 14:55:38 +08:00
}
2022-04-28 15:32:38 +08:00
cacheClient := pbCache . NewCacheClient ( etcdConn )
2023-01-04 17:21:33 +08:00
cacheResp , err := cacheClient . DelBlackIDListFromCache ( ctx , & pbCache . DelBlackIDListFromCacheReq { UserID : req . CommID . FromUserID , OperationID : req . CommID . OperationID } )
2022-04-28 15:10:42 +08:00
if err != nil {
2023-01-04 17:21:33 +08:00
return & pbFriend . AddBlacklistResp { CommonResp : constant . Error2CommResp ( ctx , constant . ErrInternalServer , err . Error ( ) ) } , nil
2022-04-28 15:10:42 +08:00
}
if cacheResp . CommonResp . ErrCode != 0 {
2023-01-04 11:28:52 +08:00
err = errors . New ( fmt . Sprintf ( "call DelBlackIDListFromCache rpc failed code is %d, err is %s, args is %s" , cacheResp . CommonResp . ErrCode , cacheResp . CommonResp . ErrMsg , req . CommID . FromUserID ) )
2023-01-04 17:21:33 +08:00
return & pbFriend . AddBlacklistResp { CommonResp : constant . Error2CommResp ( ctx , constant . ErrInternalServer , err . Error ( ) ) } , nil
2022-04-28 15:10:42 +08:00
}
2021-12-24 15:02:47 +08:00
chat . BlackAddedNotification ( req )
2023-01-04 17:21:33 +08:00
return & pbFriend . AddBlacklistResp { CommonResp : constant . Error2CommResp ( ctx , constant . ErrNone , "" ) } , nil
2021-12-23 17:22:49 +08:00
}
2021-12-26 18:47:11 +08:00
func ( s * friendServer ) AddFriend ( ctx context . Context , req * pbFriend . AddFriendReq ) ( * pbFriend . AddFriendResp , error ) {
2021-12-23 17:22:49 +08:00
log . NewInfo ( req . CommID . OperationID , "AddFriend args " , req . String ( ) )
2023-01-11 16:42:47 +08:00
ok := token_verify . CheckAccess ( ctx , req . CommID . OpUserID , req . CommID . FromUserID )
2021-12-23 17:22:49 +08:00
if ! ok {
2021-12-28 11:57:12 +08:00
log . NewError ( req . CommID . OperationID , "CheckAccess false " , req . CommID . OpUserID , req . CommID . FromUserID )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrAccess . ErrCode , ErrMsg : constant . ErrAccess . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
2022-10-19 21:06:48 +08:00
callbackResp := callbackBeforeAddFriend ( req )
if callbackResp . ErrCode != 0 {
log . NewError ( req . CommID . OperationID , utils . GetSelfFuncName ( ) , "callbackBeforeSendSingleMsg resp: " , callbackResp )
}
if callbackResp . ActionCode != constant . ActionAllow {
if callbackResp . ErrCode == 0 {
callbackResp . ErrCode = 201
}
log . NewDebug ( req . CommID . OperationID , utils . GetSelfFuncName ( ) , "callbackBeforeSendSingleMsg result" , "end rpc and return" , callbackResp )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResp { CommonResp : & sdkws . CommonResp {
2022-10-19 21:06:48 +08:00
ErrCode : int32 ( callbackResp . ErrCode ) ,
ErrMsg : callbackResp . ErrMsg ,
} } , nil
}
2022-11-10 18:05:14 +08:00
var isSend = true
2023-01-11 16:42:47 +08:00
userIDList , err := rocksCache . GetFriendIDListFromCache ( ctx , req . CommID . ToUserID )
2022-11-10 18:05:14 +08:00
if err != nil {
log . NewError ( req . CommID . OperationID , "GetFriendIDListFromCache failed " , err . Error ( ) , req . CommID . ToUserID )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrDB . ErrCode , ErrMsg : err . Error ( ) } } , nil
2022-11-10 18:05:14 +08:00
}
2023-01-11 16:42:47 +08:00
userIDList2 , err := rocksCache . GetFriendIDListFromCache ( ctx , req . CommID . FromUserID )
2022-11-10 18:05:14 +08:00
if err != nil {
log . NewError ( req . CommID . OperationID , "GetUserByUserID failed " , err . Error ( ) , req . CommID . FromUserID )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrDB . ErrCode , ErrMsg : err . Error ( ) } } , nil
2022-11-10 18:05:14 +08:00
}
2022-11-10 18:45:46 +08:00
log . NewDebug ( req . CommID . OperationID , "toUserID" , userIDList , "fromUserID" , userIDList2 )
2022-11-10 18:05:14 +08:00
for _ , v := range userIDList {
if v == req . CommID . FromUserID {
for _ , v2 := range userIDList2 {
if v2 == req . CommID . ToUserID {
isSend = false
2022-11-10 18:41:16 +08:00
break
2022-11-10 18:05:14 +08:00
}
}
2022-11-10 19:09:15 +08:00
break
2022-11-10 18:05:14 +08:00
}
2021-12-23 17:22:49 +08:00
}
2022-11-10 18:05:14 +08:00
//Cannot add non-existent users
if isSend {
if _ , err := imdb . GetUserByUserID ( req . CommID . ToUserID ) ; err != nil {
log . NewError ( req . CommID . OperationID , "GetUserByUserID failed " , err . Error ( ) , req . CommID . ToUserID )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrDB . ErrCode , ErrMsg : constant . ErrDB . ErrMsg } } , nil
2022-11-10 18:05:14 +08:00
}
2023-01-11 16:42:47 +08:00
friendRequest := imdb . FriendRequest {
2022-11-10 18:05:14 +08:00
HandleResult : 0 , ReqMsg : req . ReqMsg , CreateTime : time . Now ( ) }
utils . CopyStructFields ( & friendRequest , req . CommID )
// {openIM001 openIM002 0 test add friend 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC }]
log . NewDebug ( req . CommID . OperationID , "UpdateFriendApplication args " , friendRequest )
//err := imdb.InsertFriendApplication(&friendRequest)
err := imdb . InsertFriendApplication ( & friendRequest ,
map [ string ] interface { } { "handle_result" : 0 , "req_msg" : friendRequest . ReqMsg , "create_time" : friendRequest . CreateTime ,
"handler_user_id" : "" , "handle_msg" : "" , "handle_time" : utils . UnixSecondToTime ( 0 ) , "ex" : "" } )
if err != nil {
log . NewError ( req . CommID . OperationID , "UpdateFriendApplication failed " , err . Error ( ) , friendRequest )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrDB . ErrCode , ErrMsg : constant . ErrDB . ErrMsg } } , nil
2022-11-10 18:05:14 +08:00
}
chat . FriendApplicationNotification ( req )
2021-12-23 17:22:49 +08:00
}
2022-11-10 18:05:14 +08:00
//Establish a latest relationship in the friend request table
2021-12-23 17:22:49 +08:00
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResp { CommonResp : & sdkws . CommonResp { } } , nil
2021-12-23 17:22:49 +08:00
}
func ( s * friendServer ) ImportFriend ( ctx context . Context , req * pbFriend . ImportFriendReq ) ( * pbFriend . ImportFriendResp , error ) {
2021-12-29 16:44:24 +08:00
log . NewInfo ( req . OperationID , "ImportFriend args " , req . String ( ) )
2023-01-11 16:42:47 +08:00
resp := pbFriend . ImportFriendResp { CommonResp : & sdkws . CommonResp { } }
var c sdkws . CommonResp
2021-12-23 17:22:49 +08:00
if ! utils . IsContain ( req . OpUserID , config . Config . Manager . AppManagerUid ) {
2021-12-28 11:57:12 +08:00
log . NewError ( req . OperationID , "not authorized" , req . OpUserID , config . Config . Manager . AppManagerUid )
2021-12-26 18:47:11 +08:00
c . ErrCode = constant . ErrAccess . ErrCode
c . ErrMsg = constant . ErrAccess . ErrMsg
2021-12-29 16:17:55 +08:00
for _ , v := range req . FriendUserIDList {
resp . UserIDResultList = append ( resp . UserIDResultList , & pbFriend . UserIDResult { UserID : v , Result : - 1 } )
}
resp . CommonResp = & c
return & resp , nil
2021-12-23 17:22:49 +08:00
}
2021-12-27 21:08:42 +08:00
if _ , err := imdb . GetUserByUserID ( req . FromUserID ) ; err != nil {
2021-12-28 11:57:12 +08:00
log . NewError ( req . OperationID , "GetUserByUserID failed " , err . Error ( ) , req . FromUserID )
2021-12-26 18:47:11 +08:00
c . ErrCode = constant . ErrDB . ErrCode
2021-12-23 17:22:49 +08:00
c . ErrMsg = "this user not exists,cant not add friend"
2021-12-29 16:17:55 +08:00
for _ , v := range req . FriendUserIDList {
resp . UserIDResultList = append ( resp . UserIDResultList , & pbFriend . UserIDResult { UserID : v , Result : - 1 } )
}
resp . CommonResp = & c
return & resp , nil
2021-12-23 17:22:49 +08:00
}
for _ , v := range req . FriendUserIDList {
2021-12-29 17:06:40 +08:00
log . NewDebug ( req . OperationID , "FriendUserIDList " , v )
2021-12-27 21:08:42 +08:00
if _ , fErr := imdb . GetUserByUserID ( v ) ; fErr != nil {
2021-12-29 17:13:45 +08:00
log . NewError ( req . OperationID , "GetUserByUserID failed " , fErr . Error ( ) , v )
2021-12-29 16:17:55 +08:00
resp . UserIDResultList = append ( resp . UserIDResultList , & pbFriend . UserIDResult { UserID : v , Result : - 1 } )
2021-12-23 17:22:49 +08:00
} else {
2021-12-27 21:08:42 +08:00
if _ , err := imdb . GetFriendRelationshipFromFriend ( req . FromUserID , v ) ; err != nil {
2021-12-23 17:22:49 +08:00
//Establish two single friendship
2023-01-11 16:42:47 +08:00
toInsertFollow := imdb . Friend { OwnerUserID : req . FromUserID , FriendUserID : v }
2021-12-27 21:08:42 +08:00
err1 := imdb . InsertToFriend ( & toInsertFollow )
2021-12-23 17:22:49 +08:00
if err1 != nil {
2021-12-29 17:13:45 +08:00
log . NewError ( req . OperationID , "InsertToFriend failed " , err1 . Error ( ) , toInsertFollow )
2021-12-29 16:17:55 +08:00
resp . UserIDResultList = append ( resp . UserIDResultList , & pbFriend . UserIDResult { UserID : v , Result : - 1 } )
2021-12-23 17:22:49 +08:00
continue
}
2023-01-11 16:42:47 +08:00
toInsertFollow = imdb . Friend { OwnerUserID : v , FriendUserID : req . FromUserID }
2021-12-27 21:08:42 +08:00
err2 := imdb . InsertToFriend ( & toInsertFollow )
2021-12-23 17:22:49 +08:00
if err2 != nil {
2021-12-29 17:13:45 +08:00
log . NewError ( req . OperationID , "InsertToFriend failed " , err2 . Error ( ) , toInsertFollow )
2021-12-29 16:17:55 +08:00
resp . UserIDResultList = append ( resp . UserIDResultList , & pbFriend . UserIDResult { UserID : v , Result : - 1 } )
2021-12-23 17:22:49 +08:00
continue
}
2021-12-29 16:52:12 +08:00
resp . UserIDResultList = append ( resp . UserIDResultList , & pbFriend . UserIDResult { UserID : v , Result : 0 } )
2021-12-29 16:55:45 +08:00
log . NewDebug ( req . OperationID , "UserIDResultList " , resp . UserIDResultList )
2021-12-29 16:52:12 +08:00
chat . FriendAddedNotification ( req . OperationID , req . OpUserID , req . FromUserID , v )
2021-12-29 17:13:45 +08:00
} else {
log . NewWarn ( req . OperationID , "GetFriendRelationshipFromFriend ok" , req . FromUserID , v )
resp . UserIDResultList = append ( resp . UserIDResultList , & pbFriend . UserIDResult { UserID : v , Result : 0 } )
2021-12-23 17:22:49 +08:00
}
}
}
2022-07-14 12:08:28 +08:00
2023-01-11 16:46:20 +08:00
etcdConn := getcdv3 . GetConn ( config . Config . Etcd . EtcdSchema , strings . Join ( config . Config . Etcd . EtcdAddr , "," ) , config . Config . RpcRegisterName . OpenImCacheName , req . OperationID , config . Config . Etcd . UserName , config . Config . Etcd . Password ) )
2022-07-14 12:08:28 +08:00
if etcdConn == nil {
2022-08-17 12:12:54 +08:00
errMsg := req . OperationID + "getcdv3.GetDefaultConn == nil"
2022-07-14 12:08:28 +08:00
log . NewError ( req . OperationID , errMsg )
resp . CommonResp . ErrMsg = errMsg
resp . CommonResp . ErrCode = 500
return & resp , nil
}
cacheClient := pbCache . NewCacheClient ( etcdConn )
cacheResp , err := cacheClient . DelFriendIDListFromCache ( context . Background ( ) , & pbCache . DelFriendIDListFromCacheReq { UserID : req . FromUserID , OperationID : req . OperationID } )
if err != nil {
log . NewError ( req . OperationID , "DelBlackIDListFromCache rpc call failed " , err . Error ( ) )
resp . CommonResp . ErrCode = 500
resp . CommonResp . ErrMsg = err . Error ( )
return & resp , nil
}
if cacheResp . CommonResp . ErrCode != 0 {
log . NewError ( req . OperationID , "DelBlackIDListFromCache rpc logic call failed " , cacheResp . String ( ) )
resp . CommonResp . ErrCode = 500
resp . CommonResp . ErrMsg = cacheResp . CommonResp . ErrMsg
return & resp , nil
}
2023-01-11 16:42:47 +08:00
if err := rocksCache . DelAllFriendsInfoFromCache ( ctx , req . FromUserID ) ; err != nil {
2022-07-20 18:12:39 +08:00
log . NewError ( req . OperationID , utils . GetSelfFuncName ( ) , err . Error ( ) , req . FromUserID )
}
for _ , userID := range req . FriendUserIDList {
cacheResp , err := cacheClient . DelFriendIDListFromCache ( context . Background ( ) , & pbCache . DelFriendIDListFromCacheReq { UserID : userID , OperationID : req . OperationID } )
if err != nil {
log . NewError ( req . OperationID , "DelBlackIDListFromCache rpc call failed " , err . Error ( ) )
}
if cacheResp != nil && cacheResp . CommonResp != nil {
if cacheResp . CommonResp . ErrCode != 0 {
log . NewError ( req . OperationID , "DelBlackIDListFromCache rpc logic call failed " , cacheResp . String ( ) )
resp . CommonResp . ErrCode = 500
resp . CommonResp . ErrMsg = cacheResp . CommonResp . ErrMsg
return & resp , nil
}
}
2023-01-11 16:42:47 +08:00
if err := rocksCache . DelAllFriendsInfoFromCache ( ctx , userID ) ; err != nil {
2022-07-20 18:12:39 +08:00
log . NewError ( req . OperationID , utils . GetSelfFuncName ( ) , err . Error ( ) , userID )
}
}
2022-07-14 12:08:28 +08:00
2021-12-29 16:17:55 +08:00
resp . CommonResp . ErrCode = 0
log . NewInfo ( req . OperationID , "ImportFriend rpc ok " , resp . String ( ) )
2021-12-23 17:22:49 +08:00
return & resp , nil
}
2023-01-11 16:42:47 +08:00
// process Friend application
2021-12-26 18:47:11 +08:00
func ( s * friendServer ) AddFriendResponse ( ctx context . Context , req * pbFriend . AddFriendResponseReq ) ( * pbFriend . AddFriendResponseResp , error ) {
2021-12-23 17:22:49 +08:00
log . NewInfo ( req . CommID . OperationID , "AddFriendResponse args " , req . String ( ) )
2023-01-11 16:42:47 +08:00
if ! token_verify . CheckAccess ( ctx , req . CommID . OpUserID , req . CommID . FromUserID ) {
2021-12-28 11:57:12 +08:00
log . NewError ( req . CommID . OperationID , "CheckAccess false " , req . CommID . OpUserID , req . CommID . FromUserID )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResponseResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrAccess . ErrCode , ErrMsg : constant . ErrAccess . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
//Check there application before agreeing or refuse to a friend's application
//req.CommID.FromUserID process req.CommID.ToUserID
2021-12-27 21:08:42 +08:00
friendRequest , err := imdb . GetFriendApplicationByBothUserID ( req . CommID . ToUserID , req . CommID . FromUserID )
if err != nil {
log . NewError ( req . CommID . OperationID , "GetFriendApplicationByBothUserID failed " , err . Error ( ) , req . CommID . ToUserID , req . CommID . FromUserID )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResponseResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrDB . ErrCode , ErrMsg : constant . ErrDB . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
2022-01-16 16:31:28 +08:00
friendRequest . HandleResult = req . HandleResult
2021-12-28 11:57:12 +08:00
friendRequest . HandleTime = time . Now ( )
2021-12-28 15:33:47 +08:00
//friendRequest.HandleTime.Unix()
2021-12-28 11:57:12 +08:00
friendRequest . HandleMsg = req . HandleMsg
friendRequest . HandlerUserID = req . CommID . OpUserID
2021-12-27 21:08:42 +08:00
err = imdb . UpdateFriendApplication ( friendRequest )
2021-12-23 17:22:49 +08:00
if err != nil {
2021-12-27 21:08:42 +08:00
log . NewError ( req . CommID . OperationID , "UpdateFriendApplication failed " , err . Error ( ) , friendRequest )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResponseResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrDB . ErrCode , ErrMsg : constant . ErrDB . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
2021-12-27 21:08:42 +08:00
2021-12-23 17:22:49 +08:00
//Change the status of the friend request form
2022-01-16 16:31:28 +08:00
if req . HandleResult == constant . FriendFlag {
2022-11-10 17:37:46 +08:00
var isInsert int
2021-12-23 17:22:49 +08:00
//Establish friendship after find friend relationship not exists
2021-12-28 11:57:12 +08:00
_ , err := imdb . GetFriendRelationshipFromFriend ( req . CommID . FromUserID , req . CommID . ToUserID )
2021-12-23 17:22:49 +08:00
if err == nil {
2021-12-28 11:57:12 +08:00
log . NewWarn ( req . CommID . OperationID , "GetFriendRelationshipFromFriend exist" , req . CommID . FromUserID , req . CommID . ToUserID )
2021-12-23 17:22:49 +08:00
} else {
//Establish two single friendship
2023-01-11 16:42:47 +08:00
toInsertFollow := imdb . Friend { OwnerUserID : req . CommID . FromUserID , FriendUserID : req . CommID . ToUserID , OperatorUserID : req . CommID . OpUserID }
2021-12-28 11:57:12 +08:00
err = imdb . InsertToFriend ( & toInsertFollow )
2021-12-23 17:22:49 +08:00
if err != nil {
2021-12-28 11:57:12 +08:00
log . NewError ( req . CommID . OperationID , "InsertToFriend failed " , err . Error ( ) , toInsertFollow )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResponseResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrDB . ErrCode , ErrMsg : constant . ErrDB . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
2022-11-10 17:37:46 +08:00
isInsert = 1
2021-12-23 17:22:49 +08:00
}
2021-12-28 11:57:12 +08:00
_ , err = imdb . GetFriendRelationshipFromFriend ( req . CommID . ToUserID , req . CommID . FromUserID )
2021-12-23 17:22:49 +08:00
if err == nil {
2021-12-29 12:29:39 +08:00
log . NewWarn ( req . CommID . OperationID , "GetFriendRelationshipFromFriend exist" , req . CommID . ToUserID , req . CommID . FromUserID )
2021-12-29 12:13:00 +08:00
} else {
2023-01-11 16:42:47 +08:00
toInsertFollow := imdb . Friend { OwnerUserID : req . CommID . ToUserID , FriendUserID : req . CommID . FromUserID , OperatorUserID : req . CommID . OpUserID }
2021-12-29 12:13:00 +08:00
err = imdb . InsertToFriend ( & toInsertFollow )
if err != nil {
log . NewError ( req . CommID . OperationID , "InsertToFriend failed " , err . Error ( ) , toInsertFollow )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResponseResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrDB . ErrCode , ErrMsg : constant . ErrDB . ErrMsg } } , nil
2021-12-29 12:13:00 +08:00
}
2022-11-10 17:37:46 +08:00
isInsert = 1
}
// cache rpc
if isInsert == 1 {
2022-07-14 12:08:28 +08:00
delFriendIDListFromCacheReq := & pbCache . DelFriendIDListFromCacheReq { OperationID : req . CommID . OperationID }
2023-01-11 16:42:47 +08:00
etcdConn := getcdv3 . GetConn ( config . Config . Etcd . EtcdSchema , strings . Join ( config . Config . Etcd . EtcdAddr , "," ) , config . Config . RpcRegisterName . OpenImCacheName , req . CommID . OperationID , config . Config . Etcd . UserName , config . Config . Etcd . Password )
2022-06-16 14:55:38 +08:00
if etcdConn == nil {
2022-08-17 12:12:54 +08:00
errMsg := req . CommID . OperationID + "getcdv3.GetDefaultConn == nil"
2022-06-16 14:55:38 +08:00
log . NewError ( req . CommID . OperationID , errMsg )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResponseResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrInternal . ErrCode , ErrMsg : errMsg } } , nil
2022-06-16 14:55:38 +08:00
}
2022-04-29 14:26:04 +08:00
client := pbCache . NewCacheClient ( etcdConn )
2022-07-14 12:08:28 +08:00
delFriendIDListFromCacheReq . UserID = req . CommID . ToUserID
respPb , err := client . DelFriendIDListFromCache ( context . Background ( ) , delFriendIDListFromCacheReq )
2022-04-29 14:26:04 +08:00
if err != nil {
2022-07-14 12:08:28 +08:00
log . NewError ( req . CommID . OperationID , utils . GetSelfFuncName ( ) , "DelFriendIDListFromCache failed" , err . Error ( ) )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResponseResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrServer . ErrCode , ErrMsg : constant . ErrServer . ErrMsg } } , nil
2022-04-29 14:26:04 +08:00
}
if respPb . CommonResp . ErrCode != 0 {
2022-07-14 12:08:28 +08:00
log . NewError ( req . CommID . OperationID , utils . GetSelfFuncName ( ) , "DelFriendIDListFromCache failed" , respPb . CommonResp . String ( ) )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResponseResp { CommonResp : & sdkws . CommonResp { ErrCode : respPb . CommonResp . ErrCode , ErrMsg : respPb . CommonResp . ErrMsg } } , nil
2022-04-29 14:26:04 +08:00
}
2022-07-14 12:08:28 +08:00
delFriendIDListFromCacheReq . UserID = req . CommID . FromUserID
respPb , err = client . DelFriendIDListFromCache ( context . Background ( ) , delFriendIDListFromCacheReq )
2022-04-29 14:26:04 +08:00
if err != nil {
2022-07-14 12:08:28 +08:00
log . NewError ( req . CommID . OperationID , utils . GetSelfFuncName ( ) , "DelFriendIDListFromCache failed" , err . Error ( ) )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResponseResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrServer . ErrCode , ErrMsg : constant . ErrServer . ErrMsg } } , nil
2022-04-29 14:26:04 +08:00
}
if respPb . CommonResp . ErrCode != 0 {
2022-07-14 12:08:28 +08:00
log . NewError ( req . CommID . OperationID , utils . GetSelfFuncName ( ) , "DelFriendIDListFromCache failed" , respPb . CommonResp . String ( ) )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResponseResp { CommonResp : & sdkws . CommonResp { ErrCode : respPb . CommonResp . ErrCode , ErrMsg : respPb . CommonResp . ErrMsg } } , nil
2022-04-29 14:26:04 +08:00
}
2023-01-11 16:42:47 +08:00
if err := rocksCache . DelAllFriendsInfoFromCache ( ctx , req . CommID . ToUserID ) ; err != nil {
2022-07-20 18:12:39 +08:00
log . NewError ( req . CommID . OperationID , utils . GetSelfFuncName ( ) , err . Error ( ) , req . CommID . ToUserID )
}
2023-01-11 16:42:47 +08:00
if err := rocksCache . DelAllFriendsInfoFromCache ( ctx , req . CommID . FromUserID ) ; err != nil {
2022-07-20 18:12:39 +08:00
log . NewError ( req . CommID . OperationID , utils . GetSelfFuncName ( ) , err . Error ( ) , req . CommID . FromUserID )
}
2021-12-29 12:13:00 +08:00
chat . FriendAddedNotification ( req . CommID . OperationID , req . CommID . OpUserID , req . CommID . FromUserID , req . CommID . ToUserID )
2021-12-23 17:22:49 +08:00
}
}
2022-04-29 14:26:04 +08:00
2022-01-16 16:31:28 +08:00
if req . HandleResult == constant . FriendResponseAgree {
chat . FriendApplicationApprovedNotification ( req )
} else if req . HandleResult == constant . FriendResponseRefuse {
chat . FriendApplicationRejectedNotification ( req )
} else {
log . Error ( req . CommID . OperationID , "HandleResult failed " , req . HandleResult )
}
2022-04-28 15:13:39 +08:00
2021-12-28 11:57:12 +08:00
log . NewInfo ( req . CommID . OperationID , "rpc AddFriendResponse ok" )
2023-01-11 16:42:47 +08:00
return & pbFriend . AddFriendResponseResp { CommonResp : & sdkws . CommonResp { } } , nil
2021-12-23 17:22:49 +08:00
}
2021-12-26 18:47:11 +08:00
func ( s * friendServer ) DeleteFriend ( ctx context . Context , req * pbFriend . DeleteFriendReq ) ( * pbFriend . DeleteFriendResp , error ) {
2021-12-23 17:22:49 +08:00
log . NewInfo ( req . CommID . OperationID , "DeleteFriend args " , req . String ( ) )
//Parse token, to find current user information
2023-01-11 16:42:47 +08:00
if ! token_verify . CheckAccess ( ctx , req . CommID . OpUserID , req . CommID . FromUserID ) {
2021-12-23 17:22:49 +08:00
log . NewError ( req . CommID . OperationID , "CheckAccess false " , req . CommID . OpUserID , req . CommID . FromUserID )
2023-01-11 16:42:47 +08:00
return & pbFriend . DeleteFriendResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrAccess . ErrCode , ErrMsg : constant . ErrAccess . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
err := imdb . DeleteSingleFriendInfo ( req . CommID . FromUserID , req . CommID . ToUserID )
if err != nil {
log . NewError ( req . CommID . OperationID , "DeleteSingleFriendInfo failed" , err . Error ( ) , req . CommID . FromUserID , req . CommID . ToUserID )
2023-01-11 16:42:47 +08:00
return & pbFriend . DeleteFriendResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrAccess . ErrCode , ErrMsg : constant . ErrAccess . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
log . NewInfo ( req . CommID . OperationID , "DeleteFriend rpc ok" )
2022-07-14 12:08:28 +08:00
2023-01-11 16:46:20 +08:00
etcdConn := getcdv3 . GetConn ( config . Config . Etcd . EtcdSchema , strings . Join ( config . Config . Etcd . EtcdAddr , "," ) , config . Config . RpcRegisterName . OpenImCacheName , req . CommID . OperationID , config . Config . Etcd . UserName , config . Config . Etcd . Password )
2022-06-16 14:55:38 +08:00
if etcdConn == nil {
2022-08-17 12:12:54 +08:00
errMsg := req . CommID . OperationID + "getcdv3.GetDefaultConn == nil"
2022-06-16 14:55:38 +08:00
log . NewError ( req . CommID . OperationID , errMsg )
2023-01-11 16:42:47 +08:00
return & pbFriend . DeleteFriendResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrInternal . ErrCode , ErrMsg : errMsg } } , nil
2022-06-16 14:55:38 +08:00
}
2022-04-28 15:13:39 +08:00
client := pbCache . NewCacheClient ( etcdConn )
2022-07-14 12:08:28 +08:00
respPb , err := client . DelFriendIDListFromCache ( context . Background ( ) , & pbCache . DelFriendIDListFromCacheReq { OperationID : req . CommID . OperationID , UserID : req . CommID . FromUserID } )
2022-04-28 15:13:39 +08:00
if err != nil {
2022-07-14 12:08:28 +08:00
log . NewError ( req . CommID . OperationID , utils . GetSelfFuncName ( ) , "DelFriendIDListFromCache rpc failed" , err . Error ( ) )
2023-01-11 16:42:47 +08:00
return & pbFriend . DeleteFriendResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrServer . ErrCode , ErrMsg : constant . ErrServer . ErrMsg } } , nil
2022-04-28 15:13:39 +08:00
}
if respPb . CommonResp . ErrCode != 0 {
2022-07-14 12:08:28 +08:00
log . NewError ( req . CommID . OperationID , utils . GetSelfFuncName ( ) , "DelFriendIDListFromCache failed" , respPb . CommonResp . String ( ) )
2023-01-11 16:42:47 +08:00
return & pbFriend . DeleteFriendResp { CommonResp : & sdkws . CommonResp { ErrCode : respPb . CommonResp . ErrCode , ErrMsg : respPb . CommonResp . ErrMsg } } , nil
2022-04-28 15:13:39 +08:00
}
2023-01-11 16:42:47 +08:00
if err := rocksCache . DelAllFriendsInfoFromCache ( ctx , req . CommID . FromUserID ) ; err != nil {
2022-07-20 18:12:39 +08:00
log . NewError ( req . CommID . OperationID , utils . GetSelfFuncName ( ) , err . Error ( ) , req . CommID . FromUserID )
}
2023-01-11 16:42:47 +08:00
if err := rocksCache . DelAllFriendsInfoFromCache ( ctx , req . CommID . ToUserID ) ; err != nil {
2022-07-20 18:12:39 +08:00
log . NewError ( req . CommID . OperationID , utils . GetSelfFuncName ( ) , err . Error ( ) , req . CommID . FromUserID )
}
2022-04-29 14:26:04 +08:00
chat . FriendDeletedNotification ( req )
2023-01-11 16:42:47 +08:00
return & pbFriend . DeleteFriendResp { CommonResp : & sdkws . CommonResp { } } , nil
2021-12-23 17:22:49 +08:00
}
func ( s * friendServer ) GetBlacklist ( ctx context . Context , req * pbFriend . GetBlacklistReq ) ( * pbFriend . GetBlacklistResp , error ) {
log . NewInfo ( req . CommID . OperationID , "GetBlacklist args " , req . String ( ) )
2023-01-11 16:42:47 +08:00
if ! token_verify . CheckAccess ( ctx , req . CommID . OpUserID , req . CommID . FromUserID ) {
2021-12-28 11:57:12 +08:00
log . NewError ( req . CommID . OperationID , "CheckAccess false " , req . CommID . OpUserID , req . CommID . FromUserID )
2023-01-11 16:46:20 +08:00
return & pbFriend . GetBlacklistResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrAccess . ErrCode , ErrMsg : constant . ErrAccess . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
2023-01-11 16:42:47 +08:00
blackIDList , err := rocksCache . GetBlackListFromCache ( ctx , req . CommID . FromUserID )
2021-12-23 17:22:49 +08:00
if err != nil {
log . NewError ( req . CommID . OperationID , "GetBlackListByUID failed " , err . Error ( ) , req . CommID . FromUserID )
2023-01-11 16:46:20 +08:00
return & pbFriend . GetBlacklistResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrDB . ErrCode , ErrMsg : constant . ErrDB . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
var (
2021-12-26 18:47:11 +08:00
userInfoList [ ] * sdkws . PublicUserInfo
2021-12-23 17:22:49 +08:00
)
2022-07-14 12:08:28 +08:00
for _ , userID := range blackIDList {
2023-01-11 16:42:47 +08:00
user , err := rocksCache . GetUserInfoFromCache ( ctx , userID )
2021-12-23 17:22:49 +08:00
if err != nil {
2022-07-14 12:08:28 +08:00
log . NewError ( req . CommID . OperationID , "GetUserByUserID failed " , err . Error ( ) , userID )
2021-12-23 17:22:49 +08:00
continue
}
2022-07-14 12:08:28 +08:00
var blackUserInfo sdkws . PublicUserInfo
utils . CopyStructFields ( & blackUserInfo , user )
2021-12-23 17:22:49 +08:00
userInfoList = append ( userInfoList , & blackUserInfo )
}
2021-12-28 11:57:12 +08:00
log . NewInfo ( req . CommID . OperationID , "rpc GetBlacklist ok " , pbFriend . GetBlacklistResp { BlackUserInfoList : userInfoList } )
2021-12-26 18:47:11 +08:00
return & pbFriend . GetBlacklistResp { BlackUserInfoList : userInfoList } , nil
2021-12-23 17:22:49 +08:00
}
2021-12-29 14:25:39 +08:00
func ( s * friendServer ) SetFriendRemark ( ctx context . Context , req * pbFriend . SetFriendRemarkReq ) ( * pbFriend . SetFriendRemarkResp , error ) {
2021-12-23 17:22:49 +08:00
log . NewInfo ( req . CommID . OperationID , "SetFriendComment args " , req . String ( ) )
//Parse token, to find current user information
2023-01-11 16:42:47 +08:00
if ! token_verify . CheckAccess ( ctx , req . CommID . OpUserID , req . CommID . FromUserID ) {
2021-12-28 11:57:12 +08:00
log . NewError ( req . CommID . OperationID , "CheckAccess false " , req . CommID . OpUserID , req . CommID . FromUserID )
2023-01-11 16:42:47 +08:00
return & pbFriend . SetFriendRemarkResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrAccess . ErrCode , ErrMsg : constant . ErrAccess . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
2021-12-28 11:57:12 +08:00
err := imdb . UpdateFriendComment ( req . CommID . FromUserID , req . CommID . ToUserID , req . Remark )
2021-12-23 17:22:49 +08:00
if err != nil {
2022-07-14 12:08:28 +08:00
log . NewError ( req . CommID . OperationID , "UpdateFriendComment failed " , req . CommID . FromUserID , req . CommID . ToUserID , req . Remark , err . Error ( ) )
2023-01-11 16:42:47 +08:00
return & pbFriend . SetFriendRemarkResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrDB . ErrCode , ErrMsg : constant . ErrDB . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
log . NewInfo ( req . CommID . OperationID , "rpc SetFriendComment ok" )
2023-01-11 16:42:47 +08:00
err = rocksCache . DelAllFriendsInfoFromCache ( ctx , req . CommID . FromUserID )
2022-07-14 12:08:28 +08:00
if err != nil {
log . NewError ( req . CommID . OperationID , "DelAllFriendInfoFromCache failed " , req . CommID . FromUserID , err . Error ( ) )
2023-01-11 16:42:47 +08:00
return & pbFriend . SetFriendRemarkResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrDB . ErrCode , ErrMsg : constant . ErrDB . ErrMsg } } , nil
2022-07-14 12:08:28 +08:00
}
2022-01-16 16:31:28 +08:00
chat . FriendRemarkSetNotification ( req . CommID . OperationID , req . CommID . OpUserID , req . CommID . FromUserID , req . CommID . ToUserID )
2023-01-11 16:42:47 +08:00
return & pbFriend . SetFriendRemarkResp { CommonResp : & sdkws . CommonResp { } } , nil
2021-12-23 17:22:49 +08:00
}
2021-12-26 18:47:11 +08:00
func ( s * friendServer ) RemoveBlacklist ( ctx context . Context , req * pbFriend . RemoveBlacklistReq ) ( * pbFriend . RemoveBlacklistResp , error ) {
2021-12-23 17:22:49 +08:00
log . NewInfo ( req . CommID . OperationID , "RemoveBlacklist args " , req . String ( ) )
//Parse token, to find current user information
2023-01-11 16:42:47 +08:00
if ! token_verify . CheckAccess ( ctx , req . CommID . OpUserID , req . CommID . FromUserID ) {
2021-12-28 11:57:12 +08:00
log . NewError ( req . CommID . OperationID , "CheckAccess false " , req . CommID . OpUserID , req . CommID . FromUserID )
2023-01-11 16:42:47 +08:00
return & pbFriend . RemoveBlacklistResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrAccess . ErrCode , ErrMsg : constant . ErrAccess . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
err := imdb . RemoveBlackList ( req . CommID . FromUserID , req . CommID . ToUserID )
if err != nil {
log . NewError ( req . CommID . OperationID , "RemoveBlackList failed" , err . Error ( ) , req . CommID . FromUserID , req . CommID . ToUserID )
2023-01-11 16:42:47 +08:00
return & pbFriend . RemoveBlacklistResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrAccess . ErrCode , ErrMsg : constant . ErrAccess . ErrMsg } } , nil
2021-12-26 18:47:11 +08:00
2021-12-23 17:22:49 +08:00
}
2021-12-28 11:57:12 +08:00
log . NewInfo ( req . CommID . OperationID , "rpc RemoveBlacklist ok " )
2022-07-14 12:08:28 +08:00
2023-01-11 16:42:47 +08:00
etcdConn := getcdv3 . GetConn ( config . Config . Etcd . EtcdSchema , strings . Join ( config . Config . Etcd . EtcdAddr , "," ) , config . Config . RpcRegisterName . OpenImCacheName , req . CommID . OperationID , config . Config . Etcd . UserName , config . Config . Etcd . Password )
2022-06-16 14:55:38 +08:00
if etcdConn == nil {
2022-08-17 12:12:54 +08:00
errMsg := req . CommID . OperationID + "getcdv3.GetDefaultConn == nil"
2022-06-16 14:55:38 +08:00
log . NewError ( req . CommID . OperationID , errMsg )
2023-01-11 16:42:47 +08:00
return & pbFriend . RemoveBlacklistResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrInternal . ErrCode , ErrMsg : errMsg } } , nil
2022-06-16 14:55:38 +08:00
}
2022-04-28 15:32:38 +08:00
cacheClient := pbCache . NewCacheClient ( etcdConn )
2022-07-14 12:08:28 +08:00
cacheResp , err := cacheClient . DelBlackIDListFromCache ( context . Background ( ) , & pbCache . DelBlackIDListFromCacheReq { UserID : req . CommID . FromUserID , OperationID : req . CommID . OperationID } )
2022-04-28 15:10:42 +08:00
if err != nil {
2022-07-14 12:08:28 +08:00
log . NewError ( req . CommID . OperationID , "DelBlackIDListFromCache rpc call failed " , err . Error ( ) )
2023-01-11 16:42:47 +08:00
return & pbFriend . RemoveBlacklistResp { CommonResp : & sdkws . CommonResp { ErrCode : 500 , ErrMsg : "ReduceBlackUserFromCache rpc call failed" } } , nil
2022-04-28 15:10:42 +08:00
}
if cacheResp . CommonResp . ErrCode != 0 {
2022-07-14 12:08:28 +08:00
log . NewError ( req . CommID . OperationID , "DelBlackIDListFromCache rpc logic call failed " , cacheResp . CommonResp . String ( ) )
2023-01-11 16:42:47 +08:00
return & pbFriend . RemoveBlacklistResp { CommonResp : & sdkws . CommonResp { ErrCode : cacheResp . CommonResp . ErrCode , ErrMsg : cacheResp . CommonResp . ErrMsg } } , nil
2022-04-28 15:10:42 +08:00
}
2021-12-24 15:02:47 +08:00
chat . BlackDeletedNotification ( req )
2023-01-11 16:42:47 +08:00
return & pbFriend . RemoveBlacklistResp { CommonResp : & sdkws . CommonResp { } } , nil
2021-12-23 17:22:49 +08:00
}
func ( s * friendServer ) IsInBlackList ( ctx context . Context , req * pbFriend . IsInBlackListReq ) ( * pbFriend . IsInBlackListResp , error ) {
log . NewInfo ( "IsInBlackList args " , req . String ( ) )
2023-01-11 16:42:47 +08:00
if ! token_verify . CheckAccess ( ctx , req . CommID . OpUserID , req . CommID . FromUserID ) {
2021-12-28 11:57:12 +08:00
log . NewError ( req . CommID . OperationID , "CheckAccess false " , req . CommID . OpUserID , req . CommID . FromUserID )
2023-01-11 16:46:20 +08:00
return & pbFriend . IsInBlackListResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrAccess . ErrCode , ErrMsg : constant . ErrAccess . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
2023-01-11 16:42:47 +08:00
blackIDList , err := rocksCache . GetBlackListFromCache ( ctx , req . CommID . FromUserID )
2022-07-14 12:08:28 +08:00
if err != nil {
log . NewError ( req . CommID . OperationID , utils . GetSelfFuncName ( ) , err . Error ( ) , req . CommID . FromUserID )
2023-01-11 16:46:20 +08:00
return & pbFriend . IsInBlackListResp { CommonResp : & sdkws . CommonResp { ErrMsg : err . Error ( ) , ErrCode : constant . ErrDB . ErrCode } } , nil
2022-07-14 12:08:28 +08:00
}
var isInBlacklist bool
if utils . IsContain ( req . CommID . ToUserID , blackIDList ) {
2021-12-23 17:22:49 +08:00
isInBlacklist = true
}
2021-12-28 11:57:12 +08:00
log . NewInfo ( req . CommID . OperationID , "IsInBlackList rpc ok " , pbFriend . IsInBlackListResp { Response : isInBlacklist } )
2021-12-23 17:22:49 +08:00
return & pbFriend . IsInBlackListResp { Response : isInBlacklist } , nil
}
func ( s * friendServer ) IsFriend ( ctx context . Context , req * pbFriend . IsFriendReq ) ( * pbFriend . IsFriendResp , error ) {
2022-03-18 18:18:10 +08:00
log . NewInfo ( req . CommID . OperationID , req . String ( ) )
2023-01-11 16:42:47 +08:00
if ! token_verify . CheckAccess ( ctx , req . CommID . OpUserID , req . CommID . FromUserID ) {
2021-12-23 17:22:49 +08:00
log . NewError ( req . CommID . OperationID , "CheckAccess false " , req . CommID . OpUserID , req . CommID . FromUserID )
2023-01-11 16:46:20 +08:00
return & pbFriend . IsFriendResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrAccess . ErrCode , ErrMsg : constant . ErrAccess . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
2023-01-11 16:42:47 +08:00
friendIDList , err := rocksCache . GetFriendIDListFromCache ( ctx , req . CommID . FromUserID )
2022-07-14 12:08:28 +08:00
if err != nil {
log . NewError ( req . CommID . OperationID , utils . GetSelfFuncName ( ) , err . Error ( ) , req . CommID . FromUserID )
2023-01-11 16:46:20 +08:00
return & pbFriend . IsFriendResp { CommonResp : & sdkws . CommonResp { ErrMsg : err . Error ( ) , ErrCode : constant . ErrDB . ErrCode } } , nil
2022-07-14 12:08:28 +08:00
}
var isFriend bool
if utils . IsContain ( req . CommID . ToUserID , friendIDList ) {
2021-12-26 18:47:11 +08:00
isFriend = true
2021-12-23 17:22:49 +08:00
}
2022-03-18 18:18:10 +08:00
log . NewInfo ( req . CommID . OperationID , pbFriend . IsFriendResp { Response : isFriend } )
2021-12-26 18:47:11 +08:00
return & pbFriend . IsFriendResp { Response : isFriend } , nil
2021-12-23 17:22:49 +08:00
}
func ( s * friendServer ) GetFriendList ( ctx context . Context , req * pbFriend . GetFriendListReq ) ( * pbFriend . GetFriendListResp , error ) {
log . NewInfo ( "GetFriendList args " , req . String ( ) )
2023-01-11 16:42:47 +08:00
if ! token_verify . CheckAccess ( ctx , req . CommID . OpUserID , req . CommID . FromUserID ) {
2021-12-23 17:22:49 +08:00
log . NewError ( req . CommID . OperationID , "CheckAccess false " , req . CommID . OpUserID , req . CommID . FromUserID )
2023-01-11 16:46:20 +08:00
return & pbFriend . GetFriendListResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrAccess . ErrCode , ErrMsg : constant . ErrAccess . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
2023-01-11 16:42:47 +08:00
friendList , err := rocksCache . GetAllFriendsInfoFromCache ( ctx , req . CommID . FromUserID )
2021-12-23 17:22:49 +08:00
if err != nil {
2022-07-14 12:08:28 +08:00
log . NewError ( req . CommID . OperationID , utils . GetSelfFuncName ( ) , "GetFriendIDListFromCache failed" , err . Error ( ) , req . CommID . FromUserID )
2023-01-11 16:46:20 +08:00
return & pbFriend . GetFriendListResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrDB . ErrCode , ErrMsg : constant . ErrDB . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
2022-07-14 12:08:28 +08:00
2021-12-28 11:57:12 +08:00
var userInfoList [ ] * sdkws . FriendInfo
2022-07-14 12:08:28 +08:00
for _ , friendUser := range friendList {
2021-12-29 14:14:08 +08:00
friendUserInfo := sdkws . FriendInfo { FriendUser : & sdkws . UserInfo { } }
2022-07-14 12:08:28 +08:00
cp . FriendDBCopyOpenIM ( & friendUserInfo , friendUser )
2021-12-29 14:06:25 +08:00
log . NewDebug ( req . CommID . OperationID , "friends : " , friendUser , "openim friends: " , friendUserInfo )
2021-12-23 17:22:49 +08:00
userInfoList = append ( userInfoList , & friendUserInfo )
}
2021-12-26 18:47:11 +08:00
log . NewInfo ( req . CommID . OperationID , "rpc GetFriendList ok" , pbFriend . GetFriendListResp { FriendInfoList : userInfoList } )
return & pbFriend . GetFriendListResp { FriendInfoList : userInfoList } , nil
2021-12-23 17:22:49 +08:00
}
2023-01-11 16:42:47 +08:00
// received
2021-12-26 18:47:11 +08:00
func ( s * friendServer ) GetFriendApplyList ( ctx context . Context , req * pbFriend . GetFriendApplyListReq ) ( * pbFriend . GetFriendApplyListResp , error ) {
2021-12-23 17:22:49 +08:00
log . NewInfo ( req . CommID . OperationID , "GetFriendApplyList args " , req . String ( ) )
//Parse token, to find current user information
2023-01-11 16:42:47 +08:00
if ! token_verify . CheckAccess ( ctx , req . CommID . OpUserID , req . CommID . FromUserID ) {
2021-12-23 17:22:49 +08:00
log . NewError ( req . CommID . OperationID , "CheckAccess false " , req . CommID . OpUserID , req . CommID . FromUserID )
2023-01-11 16:46:20 +08:00
return & pbFriend . GetFriendApplyListResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrAccess . ErrCode , ErrMsg : constant . ErrAccess . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
// Find the current user friend applications received
2021-12-27 21:08:42 +08:00
ApplyUsersInfo , err := imdb . GetReceivedFriendsApplicationListByUserID ( req . CommID . FromUserID )
2021-12-23 17:22:49 +08:00
if err != nil {
2021-12-28 11:57:12 +08:00
log . NewError ( req . CommID . OperationID , "GetReceivedFriendsApplicationListByUserID " , err . Error ( ) , req . CommID . FromUserID )
2023-01-11 16:46:20 +08:00
return & pbFriend . GetFriendApplyListResp { CommonResp : & sdkws . CommonResp { ErrCode : constant . ErrDB . ErrCode , ErrMsg : constant . ErrDB . ErrMsg } } , nil
2021-12-23 17:22:49 +08:00
}
2021-12-26 18:47:11 +08:00
var appleUserList [ ] * sdkws . FriendRequest
2021-12-23 17:22:49 +08:00
for _ , applyUserInfo := range ApplyUsersInfo {
2021-12-26 18:47:11 +08:00
var userInfo sdkws . FriendRequest
2022-02-11 19:58:42 +08:00
cp . FriendRequestDBCopyOpenIM ( & userInfo , & applyUserInfo )
// utils.CopyStructFields(&userInfo, applyUserInfo)
// u, err := imdb.GetUserByUserID(userInfo.FromUserID)
// if err != nil {
// log.Error(req.CommID.OperationID, "GetUserByUserID", userInfo.FromUserID)
// continue
// }
// userInfo.FromNickname = u.Nickname
// userInfo.FromFaceURL = u.FaceURL
// userInfo.FromGender = u.Gender
//
// u, err = imdb.GetUserByUserID(userInfo.ToUserID)
// if err != nil {
// log.Error(req.CommID.OperationID, "GetUserByUserID", userInfo.ToUserID)
// continue
// }
// userInfo.ToNickname = u.Nickname
// userInfo.ToFaceURL = u.FaceURL
// userInfo.ToGender = u.Gender
2021-12-23 17:22:49 +08:00
appleUserList = append ( appleUserList , & userInfo )
}
2022-01-14 18:29:09 +08:00
2021-12-26 18:47:11 +08:00
log . NewInfo ( req . CommID . OperationID , "rpc GetFriendApplyList ok" , pbFriend . GetFriendApplyListResp { FriendRequestList : appleUserList } )
return & pbFriend . GetFriendApplyListResp { FriendRequestList : appleUserList } , nil
2021-12-23 17:22:49 +08:00
}
2021-12-26 18:47:11 +08:00
func ( s * friendServer ) GetSelfApplyList ( ctx context . Context , req * pbFriend . GetSelfApplyListReq ) ( * pbFriend . GetSelfApplyListResp , error ) {
2021-12-23 17:22:49 +08:00
log . NewInfo ( req . CommID . OperationID , "GetSelfApplyList args " , req . String ( ) )
2021-12-28 11:57:12 +08:00
2021-12-23 17:22:49 +08:00
//Parse token, to find current user information
2023-01-11 16:42:47 +08:00
if ! token_verify . CheckAccess ( ctx , req . CommID . OpUserID , req . CommID . FromUserID ) {
2021-12-23 17:22:49 +08:00
log . NewError ( req . CommID . OperationID , "CheckAccess false " , req . CommID . OpUserID , req . CommID . FromUserID )
2021-12-26 18:47:11 +08:00
return & pbFriend . GetSelfApplyListResp { ErrCode : constant . ErrAccess . ErrCode , ErrMsg : constant . ErrAccess . ErrMsg } , nil
2021-12-23 17:22:49 +08:00
}
// Find the self add other userinfo
2021-12-27 21:08:42 +08:00
usersInfo , err := imdb . GetSendFriendApplicationListByUserID ( req . CommID . FromUserID )
2021-12-23 17:22:49 +08:00
if err != nil {
2021-12-28 11:57:12 +08:00
log . NewError ( req . CommID . OperationID , "GetSendFriendApplicationListByUserID failed " , err . Error ( ) , req . CommID . FromUserID )
2021-12-26 18:47:11 +08:00
return & pbFriend . GetSelfApplyListResp { ErrCode : constant . ErrDB . ErrCode , ErrMsg : constant . ErrDB . ErrMsg } , nil
2021-12-23 17:22:49 +08:00
}
2021-12-28 11:57:12 +08:00
var selfApplyOtherUserList [ ] * sdkws . FriendRequest
2021-12-23 17:22:49 +08:00
for _ , selfApplyOtherUserInfo := range usersInfo {
2021-12-26 18:47:11 +08:00
var userInfo sdkws . FriendRequest // pbFriend.ApplyUserInfo
2021-12-29 14:08:46 +08:00
cp . FriendRequestDBCopyOpenIM ( & userInfo , & selfApplyOtherUserInfo )
2022-02-11 20:31:57 +08:00
//u, err := imdb.GetUserByUserID(userInfo.FromUserID)
//if err != nil {
// log.Error(req.CommID.OperationID, "GetUserByUserID", userInfo.FromUserID)
// continue
//}
//userInfo.FromNickname = u.Nickname
//userInfo.FromFaceURL = u.FaceURL
//userInfo.FromGender = u.Gender
//
//u, err = imdb.GetUserByUserID(userInfo.ToUserID)
//if err != nil {
// log.Error(req.CommID.OperationID, "GetUserByUserID", userInfo.ToUserID)
// continue
//}
//userInfo.ToNickname = u.Nickname
//userInfo.ToFaceURL = u.FaceURL
//userInfo.ToGender = u.Gender
2022-01-14 18:33:06 +08:00
2021-12-23 17:22:49 +08:00
selfApplyOtherUserList = append ( selfApplyOtherUserList , & userInfo )
}
2021-12-26 18:47:11 +08:00
log . NewInfo ( req . CommID . OperationID , "rpc GetSelfApplyList ok" , pbFriend . GetSelfApplyListResp { FriendRequestList : selfApplyOtherUserList } )
return & pbFriend . GetSelfApplyListResp { FriendRequestList : selfApplyOtherUserList } , nil
2021-12-23 17:22:49 +08:00
}
2022-01-16 16:31:28 +08:00
////
//func (s *friendServer) GetFriendsInfo(ctx context.Context, req *pbFriend.GetFriendsInfoReq) (*pbFriend.GetFriendInfoResp, error) {
// return nil, nil
//// log.NewInfo(req.CommID.OperationID, "GetFriendsInfo args ", req.String())
//// var (
//// isInBlackList int32
//// // isFriend int32
//// comment string
//// )
////
//// friendShip, err := imdb.FindFriendRelationshipFromFriend(req.CommID.FromUserID, req.CommID.ToUserID)
//// if err != nil {
//// log.NewError(req.CommID.OperationID, "FindFriendRelationshipFromFriend failed ", err.Error())
//// return &pbFriend.GetFriendInfoResp{ErrCode: constant.ErrSearchUserInfo.ErrCode, ErrMsg: constant.ErrSearchUserInfo.ErrMsg}, nil
//// // isFriend = constant.FriendFlag
//// }
//// comment = friendShip.Remark
////
//// friendUserInfo, err := imdb.FindUserByUID(req.CommID.ToUserID)
//// if err != nil {
//// log.NewError(req.CommID.OperationID, "FindUserByUID failed ", err.Error())
//// return &pbFriend.GetFriendInfoResp{ErrCode: constant.ErrSearchUserInfo.ErrCode, ErrMsg: constant.ErrSearchUserInfo.ErrMsg}, nil
//// }
////
//// err = imdb.FindRelationshipFromBlackList(req.CommID.FromUserID, req.CommID.ToUserID)
//// if err == nil {
//// isInBlackList = constant.BlackListFlag
//// }
////
//// resp := pbFriend.GetFriendInfoResp{ErrCode: 0, ErrMsg: "",}
////
//// utils.CopyStructFields(resp.FriendInfoList, friendUserInfo)
//// resp.Data.IsBlack = isInBlackList
//// resp.Data.OwnerUserID = req.CommID.FromUserID
//// resp.Data.Remark = comment
//// resp.Data.CreateTime = friendUserInfo.CreateTime
////
//// log.NewInfo(req.CommID.OperationID, "GetFriendsInfo ok ", resp)
//// return &resp, nil
////
//}