diff --git a/internal/rpc/msg/as_read.go b/internal/rpc/msg/as_read.go index 3eb182a6a..33f26558c 100644 --- a/internal/rpc/msg/as_read.go +++ b/internal/rpc/msg/as_read.go @@ -16,6 +16,7 @@ package msg import ( "context" + "github.com/openimsdk/tools/utils/goassist" cbapi "github.com/openimsdk/open-im-server/v3/pkg/callbackstruct" "github.com/openimsdk/protocol/constant" @@ -23,7 +24,6 @@ import ( "github.com/openimsdk/protocol/sdkws" "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" - utils2 "github.com/openimsdk/tools/utils" "github.com/redis/go-redis/v9" ) @@ -59,13 +59,13 @@ func (m *msgServer) GetConversationsHasReadAndMaxSeq(ctx context.Context, req *m return nil, err } resp = &msg.GetConversationsHasReadAndMaxSeqResp{Seqs: make(map[string]*msg.Seqs)} - for conversarionID, maxSeq := range maxSeqs { - resp.Seqs[conversarionID] = &msg.Seqs{ - HasReadSeq: hasReadSeqs[conversarionID], + for conversationID, maxSeq := range maxSeqs { + resp.Seqs[conversationID] = &msg.Seqs{ + HasReadSeq: hasReadSeqs[conversationID], MaxSeq: maxSeq, } - if v, ok := conversationMaxSeqMap[conversarionID]; ok { - resp.Seqs[conversarionID].MaxSeq = v + if v, ok := conversationMaxSeqMap[conversationID]; ok { + resp.Seqs[conversationID].MaxSeq = v } } return resp, nil @@ -157,7 +157,7 @@ func (m *msgServer) MarkConversationAsRead(ctx context.Context, req *msg.MarkCon } // avoid client missed call MarkConversationMessageAsRead by order for _, val := range req.Seqs { - if !utils2.Contain(val, seqs...) { + if !goassist.Contain(val, seqs...) { seqs = append(seqs, val) } } diff --git a/pkg/common/servererrs/code.go b/pkg/common/servererrs/code.go new file mode 100644 index 000000000..444e19707 --- /dev/null +++ b/pkg/common/servererrs/code.go @@ -0,0 +1,88 @@ +// Copyright © 2023 OpenIM. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package servererrs + +// UnknownCode represents the error code when code is not parsed or parsed code equals 0. +const UnknownCode = 1000 + +// Error codes for various error scenarios. +const ( + FormattingError = 10001 // Error in formatting + HasRegistered = 10002 // User has already registered + NotRegistered = 10003 // User is not registered + PasswordErr = 10004 // Password error + GetIMTokenErr = 10005 // Error in getting IM token + RepeatSendCode = 10006 // Repeat sending code + MailSendCodeErr = 10007 // Error in sending code via email + SmsSendCodeErr = 10008 // Error in sending code via SMS + CodeInvalidOrExpired = 10009 // Code is invalid or expired + RegisterFailed = 10010 // Registration failed + ResetPasswordFailed = 10011 // Resetting password failed + RegisterLimit = 10012 // Registration limit exceeded + LoginLimit = 10013 // Login limit exceeded + InvitationError = 10014 // Error in invitation +) + +// General error codes. +const ( + NoError = 0 // No error + DatabaseError = 90002 // Database error (redis/mysql, etc.) + NetworkError = 90004 // Network error + DataError = 90007 // Data error + + CallbackError = 80000 + + // Account error codes. + UserIDNotFoundError = 1101 // UserID does not exist or is not registered + RegisteredAlreadyError = 1102 // User is already registered + + // Group error codes. + GroupIDNotFoundError = 1201 // GroupID does not exist + GroupIDExisted = 1202 // GroupID already exists + NotInGroupYetError = 1203 // Not in the group yet + DismissedAlreadyError = 1204 // Group has already been dismissed + GroupTypeNotSupport = 1205 + GroupRequestHandled = 1206 + + // Relationship error codes. + CanNotAddYourselfError = 1301 // Cannot add yourself as a friend + BlockedByPeer = 1302 // Blocked by the peer + NotPeersFriend = 1303 // Not the peer's friend + RelationshipAlreadyError = 1304 // Already in a friend relationship + + // Message error codes. + MessageHasReadDisable = 1401 + MutedInGroup = 1402 // Member muted in the group + MutedGroup = 1403 // Group is muted + MsgAlreadyRevoke = 1404 // Message already revoked + + // Token error codes. + TokenExpiredError = 1501 + TokenInvalidError = 1502 + TokenMalformedError = 1503 + TokenNotValidYetError = 1504 + TokenUnknownError = 1505 + TokenKickedError = 1506 + TokenNotExistError = 1507 + + // Long connection gateway error codes. + ConnOverMaxNumLimit = 1601 + ConnArgsErr = 1602 + PushMsgErr = 1603 + IOSBackgroundPushErr = 1604 + + // S3 error codes. + FileUploadedExpiredError = 1701 // Upload expired +) diff --git a/pkg/common/servererrs/predefine.go b/pkg/common/servererrs/predefine.go new file mode 100644 index 000000000..9eb1a5b8a --- /dev/null +++ b/pkg/common/servererrs/predefine.go @@ -0,0 +1,62 @@ +// Copyright © 2023 OpenIM. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package servererrs + +import "github.com/openimsdk/tools/errs" + +var ( + ErrDatabase = errs.NewCodeError(DatabaseError, "DatabaseError") + ErrNetwork = errs.NewCodeError(NetworkError, "NetworkError") + ErrCallback = errs.NewCodeError(CallbackError, "CallbackError") + ErrCallbackContinue = errs.NewCodeError(CallbackError, "ErrCallbackContinue") + + ErrUserIDNotFound = errs.NewCodeError(UserIDNotFoundError, "UserIDNotFoundError") + ErrGroupIDNotFound = errs.NewCodeError(GroupIDNotFoundError, "GroupIDNotFoundError") + ErrGroupIDExisted = errs.NewCodeError(GroupIDExisted, "GroupIDExisted") + + ErrNotInGroupYet = errs.NewCodeError(NotInGroupYetError, "NotInGroupYetError") + ErrDismissedAlready = errs.NewCodeError(DismissedAlreadyError, "DismissedAlreadyError") + ErrRegisteredAlready = errs.NewCodeError(RegisteredAlreadyError, "RegisteredAlreadyError") + ErrGroupTypeNotSupport = errs.NewCodeError(GroupTypeNotSupport, "") + ErrGroupRequestHandled = errs.NewCodeError(GroupRequestHandled, "GroupRequestHandled") + + ErrData = errs.NewCodeError(DataError, "DataError") + ErrTokenExpired = errs.NewCodeError(TokenExpiredError, "TokenExpiredError") + ErrTokenInvalid = errs.NewCodeError(TokenInvalidError, "TokenInvalidError") // + ErrTokenMalformed = errs.NewCodeError(TokenMalformedError, "TokenMalformedError") // + ErrTokenNotValidYet = errs.NewCodeError(TokenNotValidYetError, "TokenNotValidYetError") // + ErrTokenUnknown = errs.NewCodeError(TokenUnknownError, "TokenUnknownError") // + ErrTokenKicked = errs.NewCodeError(TokenKickedError, "TokenKickedError") + ErrTokenNotExist = errs.NewCodeError(TokenNotExistError, "TokenNotExistError") // + + ErrMessageHasReadDisable = errs.NewCodeError(MessageHasReadDisable, "MessageHasReadDisable") + + ErrCanNotAddYourself = errs.NewCodeError(CanNotAddYourselfError, "CanNotAddYourselfError") + ErrBlockedByPeer = errs.NewCodeError(BlockedByPeer, "BlockedByPeer") + ErrNotPeersFriend = errs.NewCodeError(NotPeersFriend, "NotPeersFriend") + ErrRelationshipAlready = errs.NewCodeError(RelationshipAlreadyError, "RelationshipAlreadyError") + + ErrMutedInGroup = errs.NewCodeError(MutedInGroup, "MutedInGroup") + ErrMutedGroup = errs.NewCodeError(MutedGroup, "MutedGroup") + ErrMsgAlreadyRevoke = errs.NewCodeError(MsgAlreadyRevoke, "MsgAlreadyRevoke") + + ErrConnOverMaxNumLimit = errs.NewCodeError(ConnOverMaxNumLimit, "ConnOverMaxNumLimit") + + ErrConnArgsErr = errs.NewCodeError(ConnArgsErr, "args err, need token, sendID, platformID") + ErrPushMsgErr = errs.NewCodeError(PushMsgErr, "push msg err") + ErrIOSBackgroundPushErr = errs.NewCodeError(IOSBackgroundPushErr, "ios background push err") + + ErrFileUploadedExpired = errs.NewCodeError(FileUploadedExpiredError, "FileUploadedExpiredError") +) diff --git a/pkg/common/servererrs/relation.go b/pkg/common/servererrs/relation.go new file mode 100644 index 000000000..62b056147 --- /dev/null +++ b/pkg/common/servererrs/relation.go @@ -0,0 +1,58 @@ +// Copyright © 2023 OpenIM. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package servererrs + +import "github.com/openimsdk/tools/errs" + +var Relation = &relation{m: make(map[int]map[int]struct{})} + +func init() { + Relation.Add(errs.RecordNotFoundError, UserIDNotFoundError) + Relation.Add(errs.RecordNotFoundError, GroupIDNotFoundError) + Relation.Add(errs.DuplicateKeyError, GroupIDExisted) +} + +type relation struct { + m map[int]map[int]struct{} +} + +func (r *relation) Add(codes ...int) { + if len(codes) < 2 { + panic("codes length must be greater than 2") + } + for i := 1; i < len(codes); i++ { + parent := codes[i-1] + s, ok := r.m[parent] + if !ok { + s = make(map[int]struct{}) + r.m[parent] = s + } + for _, code := range codes[i:] { + s[code] = struct{}{} + } + } +} + +func (r *relation) Is(parent, child int) bool { + if parent == child { + return true + } + s, ok := r.m[parent] + if !ok { + return false + } + _, ok = s[child] + return ok +}