You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
4.5 KiB
104 lines
4.5 KiB
package relation
|
|
|
|
import (
|
|
"Open_IM/pkg/common/db/table"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type ConversationGorm struct {
|
|
DB *gorm.DB
|
|
}
|
|
|
|
func SetConversation(conversation table.ConversationModel) (bool, error) {
|
|
var isUpdate bool
|
|
newConversation := conversation
|
|
if ConversationDB.Model(&Conversation{}).Find(&newConversation).RowsAffected == 0 {
|
|
return isUpdate, ConversationDB.Model(&Conversation{}).Create(&conversation).Error
|
|
// if exist, then update record
|
|
} else {
|
|
//force update
|
|
isUpdate = true
|
|
return isUpdate, ConversationDB.Model(conversation).Where("owner_user_id = ? and conversation_id = ?", conversation.OwnerUserID, conversation.ConversationID).
|
|
Updates(map[string]interface{}{"recv_msg_opt": conversation.RecvMsgOpt, "is_pinned": conversation.IsPinned, "is_private_chat": conversation.IsPrivateChat,
|
|
"group_at_type": conversation.GroupAtType, "is_not_in_group": conversation.IsNotInGroup}).Error
|
|
}
|
|
}
|
|
func SetOneConversation(conversation Conversation) error {
|
|
return ConversationDB.Model(&Conversation{}).Create(&conversation).Error
|
|
|
|
}
|
|
|
|
func PeerUserSetConversation(conversation Conversation) error {
|
|
newConversation := conversation
|
|
if ConversationDB.Model(&Conversation{}).Find(&newConversation).RowsAffected == 0 {
|
|
return ConversationDB.Model(&Conversation{}).Create(&conversation).Error
|
|
// if exist, then update record
|
|
}
|
|
//force update
|
|
return ConversationDB.Model(conversation).Where("owner_user_id = ? and conversation_id = ?", conversation.OwnerUserID, conversation.ConversationID).
|
|
Updates(map[string]interface{}{"is_private_chat": conversation.IsPrivateChat}).Error
|
|
|
|
}
|
|
|
|
func SetRecvMsgOpt(conversation Conversation) (bool, error) {
|
|
var isUpdate bool
|
|
newConversation := conversation
|
|
if ConversationDB.Model(&Conversation{}).Find(&newConversation).RowsAffected == 0 {
|
|
return isUpdate, ConversationDB.Model(&Conversation{}).Create(&conversation).Error
|
|
// if exist, then update record
|
|
} else {
|
|
//force update
|
|
isUpdate = true
|
|
return isUpdate, ConversationDB.Model(conversation).Where("owner_user_id = ? and conversation_id = ?", conversation.OwnerUserID, conversation.ConversationID).
|
|
Updates(map[string]interface{}{"recv_msg_opt": conversation.RecvMsgOpt}).Error
|
|
}
|
|
}
|
|
|
|
func GetUserAllConversations(ownerUserID string) ([]Conversation, error) {
|
|
var conversations []Conversation
|
|
err := ConversationDB.Where("owner_user_id=?", ownerUserID).Find(&conversations).Error
|
|
return conversations, err
|
|
}
|
|
func GetMultipleUserConversationByConversationID(ownerUserIDList []string, conversationID string) ([]Conversation, error) {
|
|
var conversations []Conversation
|
|
err := ConversationDB.Where("owner_user_id IN ? and conversation_id=?", ownerUserIDList, conversationID).Find(&conversations).Error
|
|
return conversations, err
|
|
}
|
|
func GetExistConversationUserIDList(ownerUserIDList []string, conversationID string) ([]string, error) {
|
|
var resultArr []string
|
|
err := ConversationDB.Table("conversations").Where(" owner_user_id IN (?) and conversation_id=?", ownerUserIDList, conversationID).Pluck("owner_user_id", &resultArr).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return resultArr, nil
|
|
}
|
|
|
|
func GetConversation(OwnerUserID, conversationID string) (table.ConversationModel, error) {
|
|
var conversation Conversation
|
|
err := ConversationDB.Table("conversations").Where("owner_user_id=? and conversation_id=?", OwnerUserID, conversationID).Take(&conversation).Error
|
|
return conversation, err
|
|
}
|
|
|
|
func GetConversations(OwnerUserID string, conversationIDs []string) ([]Conversation, error) {
|
|
var conversations []Conversation
|
|
err := ConversationDB.Model(&Conversation{}).Where("conversation_id IN (?) and owner_user_id=?", conversationIDs, OwnerUserID).Find(&conversations).Error
|
|
return conversations, err
|
|
}
|
|
|
|
func GetConversationsByConversationIDMultipleOwner(OwnerUserIDList []string, conversationID string) ([]Conversation, error) {
|
|
var conversations []Conversation
|
|
err := ConversationDB.Model(&Conversation{}).Where("owner_user_id IN (?) and conversation_id=?", OwnerUserIDList, conversationID).Find(&conversations).Error
|
|
return conversations, err
|
|
}
|
|
|
|
func UpdateColumnsConversations(ownerUserIDList []string, conversationID string, args map[string]interface{}) error {
|
|
return ConversationDB.Model(&Conversation{}).Where("owner_user_id IN (?) and conversation_id=?", ownerUserIDList, conversationID).Updates(args).Error
|
|
|
|
}
|
|
|
|
func GetConversationIDsByUserID(userID string) ([]string, error) {
|
|
var IDList []string
|
|
err := ConversationDB.Model(&Conversation{}).Where("owner_user_id=?", userID).Pluck("conversation_id", &IDList).Error
|
|
return IDList, err
|
|
}
|