2023-01-28 13:19:36 +08:00
package relation
2022-04-24 15:55:19 +08:00
import (
2023-02-03 12:16:48 +08:00
"Open_IM/pkg/common/db/table/relation"
2023-01-11 16:23:16 +08:00
"gorm.io/gorm"
2022-04-24 15:55:19 +08:00
)
2023-02-02 19:40:54 +08:00
type ConversationGorm struct {
DB * gorm . DB
2023-01-11 16:23:16 +08:00
}
2023-02-03 12:16:48 +08:00
func SetConversation ( conversation relation . ConversationModel ) ( bool , error ) {
2022-08-21 17:33:40 +08:00
var isUpdate bool
2022-04-24 15:55:19 +08:00
newConversation := conversation
2023-01-11 16:23:16 +08:00
if ConversationDB . Model ( & Conversation { } ) . Find ( & newConversation ) . RowsAffected == 0 {
return isUpdate , ConversationDB . Model ( & Conversation { } ) . Create ( & conversation ) . Error
2022-04-24 15:55:19 +08:00
// if exist, then update record
} else {
//force update
2022-08-21 17:33:40 +08:00
isUpdate = true
2023-01-11 16:23:16 +08:00
return isUpdate , ConversationDB . Model ( conversation ) . Where ( "owner_user_id = ? and conversation_id = ?" , conversation . OwnerUserID , conversation . ConversationID ) .
2022-07-14 12:08:28 +08:00
Updates ( map [ string ] interface { } { "recv_msg_opt" : conversation . RecvMsgOpt , "is_pinned" : conversation . IsPinned , "is_private_chat" : conversation . IsPrivateChat ,
2022-04-24 15:55:19 +08:00
"group_at_type" : conversation . GroupAtType , "is_not_in_group" : conversation . IsNotInGroup } ) . Error
}
}
2023-01-04 17:22:55 +08:00
func SetOneConversation ( conversation Conversation ) error {
2023-01-11 16:23:16 +08:00
return ConversationDB . Model ( & Conversation { } ) . Create ( & conversation ) . Error
2022-04-24 15:55:19 +08:00
}
2023-01-04 17:22:55 +08:00
func PeerUserSetConversation ( conversation Conversation ) error {
2022-04-24 15:55:19 +08:00
newConversation := conversation
2023-01-11 16:23:16 +08:00
if ConversationDB . Model ( & Conversation { } ) . Find ( & newConversation ) . RowsAffected == 0 {
return ConversationDB . Model ( & Conversation { } ) . Create ( & conversation ) . Error
2022-04-24 15:55:19 +08:00
// if exist, then update record
}
//force update
2023-01-11 16:23:16 +08:00
return ConversationDB . Model ( conversation ) . Where ( "owner_user_id = ? and conversation_id = ?" , conversation . OwnerUserID , conversation . ConversationID ) .
2022-07-14 12:08:28 +08:00
Updates ( map [ string ] interface { } { "is_private_chat" : conversation . IsPrivateChat } ) . Error
2022-04-24 15:55:19 +08:00
}
2023-01-04 17:22:55 +08:00
func SetRecvMsgOpt ( conversation Conversation ) ( bool , error ) {
2022-08-23 12:06:44 +08:00
var isUpdate bool
2022-04-24 15:55:19 +08:00
newConversation := conversation
2023-01-11 16:23:16 +08:00
if ConversationDB . Model ( & Conversation { } ) . Find ( & newConversation ) . RowsAffected == 0 {
return isUpdate , ConversationDB . Model ( & Conversation { } ) . Create ( & conversation ) . Error
2022-04-24 15:55:19 +08:00
// if exist, then update record
} else {
//force update
2022-08-23 12:06:44 +08:00
isUpdate = true
2023-01-11 16:23:16 +08:00
return isUpdate , ConversationDB . Model ( conversation ) . Where ( "owner_user_id = ? and conversation_id = ?" , conversation . OwnerUserID , conversation . ConversationID ) .
2022-07-14 12:08:28 +08:00
Updates ( map [ string ] interface { } { "recv_msg_opt" : conversation . RecvMsgOpt } ) . Error
2022-04-24 15:55:19 +08:00
}
}
2023-01-04 17:22:55 +08:00
func GetUserAllConversations ( ownerUserID string ) ( [ ] Conversation , error ) {
var conversations [ ] Conversation
2023-01-11 16:23:16 +08:00
err := ConversationDB . Where ( "owner_user_id=?" , ownerUserID ) . Find ( & conversations ) . Error
2022-04-24 15:55:19 +08:00
return conversations , err
}
2023-01-04 17:22:55 +08:00
func GetMultipleUserConversationByConversationID ( ownerUserIDList [ ] string , conversationID string ) ( [ ] Conversation , error ) {
var conversations [ ] Conversation
2023-01-11 16:23:16 +08:00
err := ConversationDB . Where ( "owner_user_id IN ? and conversation_id=?" , ownerUserIDList , conversationID ) . Find ( & conversations ) . Error
2022-04-24 15:55:19 +08:00
return conversations , err
}
2022-04-25 19:56:46 +08:00
func GetExistConversationUserIDList ( ownerUserIDList [ ] string , conversationID string ) ( [ ] string , error ) {
2022-04-24 15:55:19 +08:00
var resultArr [ ] string
2023-01-11 16:23:16 +08:00
err := ConversationDB . Table ( "conversations" ) . Where ( " owner_user_id IN (?) and conversation_id=?" , ownerUserIDList , conversationID ) . Pluck ( "owner_user_id" , & resultArr ) . Error
2022-04-24 15:55:19 +08:00
if err != nil {
return nil , err
}
return resultArr , nil
}
2023-02-03 12:16:48 +08:00
func GetConversation ( OwnerUserID , conversationID string ) ( relation . ConversationModel , error ) {
2023-01-04 17:22:55 +08:00
var conversation Conversation
2023-01-11 16:23:16 +08:00
err := ConversationDB . Table ( "conversations" ) . Where ( "owner_user_id=? and conversation_id=?" , OwnerUserID , conversationID ) . Take ( & conversation ) . Error
2022-04-24 15:55:19 +08:00
return conversation , err
}
2023-01-04 17:22:55 +08:00
func GetConversations ( OwnerUserID string , conversationIDs [ ] string ) ( [ ] Conversation , error ) {
var conversations [ ] Conversation
2023-01-11 16:23:16 +08:00
err := ConversationDB . Model ( & Conversation { } ) . Where ( "conversation_id IN (?) and owner_user_id=?" , conversationIDs , OwnerUserID ) . Find ( & conversations ) . Error
2022-04-24 15:55:19 +08:00
return conversations , err
}
2022-08-19 12:09:05 +08:00
2023-01-04 17:22:55 +08:00
func GetConversationsByConversationIDMultipleOwner ( OwnerUserIDList [ ] string , conversationID string ) ( [ ] Conversation , error ) {
var conversations [ ] Conversation
2023-01-11 16:23:16 +08:00
err := ConversationDB . Model ( & Conversation { } ) . Where ( "owner_user_id IN (?) and conversation_id=?" , OwnerUserIDList , conversationID ) . Find ( & conversations ) . Error
2022-04-24 15:55:19 +08:00
return conversations , err
}
2022-08-19 12:09:05 +08:00
2022-04-24 15:55:19 +08:00
func UpdateColumnsConversations ( ownerUserIDList [ ] string , conversationID string , args map [ string ] interface { } ) error {
2023-01-11 16:23:16 +08:00
return ConversationDB . Model ( & Conversation { } ) . Where ( "owner_user_id IN (?) and conversation_id=?" , ownerUserIDList , conversationID ) . Updates ( args ) . Error
2022-04-24 15:55:19 +08:00
}
2022-08-19 12:09:05 +08:00
2023-02-02 19:40:54 +08:00
func GetConversationIDsByUserID ( userID string ) ( [ ] string , error ) {
2022-08-19 12:09:05 +08:00
var IDList [ ] string
2023-01-11 16:23:16 +08:00
err := ConversationDB . Model ( & Conversation { } ) . Where ( "owner_user_id=?" , userID ) . Pluck ( "conversation_id" , & IDList ) . Error
2022-08-19 12:09:05 +08:00
return IDList , err
}