添加消息数据库操作

This commit is contained in:
junleea 2024-08-02 15:02:56 +08:00
parent c4404caf49
commit 7cef0ec8db
2 changed files with 111 additions and 5 deletions

104
dao/im.go
View File

@ -1,6 +1,9 @@
package dao package dao
import "gorm.io/gorm" import (
"gorm.io/gorm"
"videoplayer/proto"
)
type Message struct { type Message struct {
gorm.Model gorm.Model
@ -15,13 +18,16 @@ type Message struct {
type Group struct { type Group struct {
gorm.Model gorm.Model
GroupName string `gorm:"column:group_name"` GroupName string `gorm:"column:group_name"`
GroupInfo string `gorm:"column:group_info"`
GroupType int `gorm:"column:group_type"`
GroupIcon string `gorm:"column:group_icon"`
} }
type GroupUser struct { type GroupUser struct {
gorm.Model gorm.Model
GroupID int `gorm:"column:group_id"` GroupID int `gorm:"column:group_id"`
UserID int `gorm:"column:user_id"` UserID int `gorm:"column:user_id"`
IsMaster int `gorm:"column:is_master"` IsMaster bool `gorm:"column:is_master"`
} }
type Friend struct { type Friend struct {
@ -32,7 +38,13 @@ type Friend struct {
// 创建单聊消息 // 创建单聊消息
func CreateSimpleMessage(from_user_id, to_user_id int, message string) error { func CreateSimpleMessage(from_user_id, to_user_id int, message string) error {
msg := Message{FromUserID: from_user_id, ToUserID: to_user_id, Msg: message, Type: 1, Status: 0} msg := Message{FromUserID: from_user_id, ToUserID: to_user_id, Msg: message, Type: proto.MSG_TYPE_SIMPLE, Status: proto.MSG_STATUS_UNREAD}
res := DB.Debug().Create(msg)
return res.Error
}
func CreateGeneralMessage(from_user_id, to_user_id, msg_type, status int, message string) error {
msg := Message{FromUserID: from_user_id, ToUserID: to_user_id, Msg: message, Type: msg_type, Status: status}
res := DB.Debug().Create(msg) res := DB.Debug().Create(msg)
return res.Error return res.Error
} }
@ -49,8 +61,90 @@ func UpdateMessage() {
} }
// 添加好友
func AddFriend(user_id, friend_id int) error {
friend := Friend{UserID: user_id, FriendID: friend_id}
friend2 := Friend{UserID: friend_id, FriendID: user_id}
//开启事务
tx := DB.Begin()
if err := tx.Create(&friend); err.Error != nil {
tx.Rollback()
return err.Error
}
if err := tx.Create(&friend2); err.Error != nil {
tx.Rollback()
return err.Error
}
//提交事务
if err := tx.Commit().Error; err != nil {
return err
}
return error(nil)
}
// 删除好友,删除后双方都不是好友
func DeleteFriend(user_id, friend_id int) error {
//开启事务
tx := DB.Begin()
if err := tx.Delete(&Friend{}, "user_id = ? and friend_id = ?", user_id, friend_id); err.Error != nil {
tx.Rollback()
return err.Error
}
if err := tx.Delete(&Friend{}, "user_id = ? and friend_id = ?", friend_id, user_id); err.Error != nil {
tx.Rollback()
return err.Error
}
//提交事务
if err := tx.Commit().Error; err != nil {
return err
}
return error(nil)
}
// 通过id查找消息
func FindMessageByID(id uint) []Message { func FindMessageByID(id uint) []Message {
var msgs []Message var msgs []Message
DB.Debug().Where("id = ?", id).Find(msgs) DB.Debug().Where("id = ?", id).Find(msgs)
return msgs return msgs
} }
// 更新消息状态
func UpdateMessageStatus(id uint, status int) error {
res := DB.Debug().Model(&Message{}).Where("id = ?", id).Update("status", status)
return res.Error
}
// 创建群聊,需要事务
func CreateGroup(group_name string, master_user_id int) uint {
group := Group{GroupName: group_name}
//开启事务
tx := DB.Begin()
if err := tx.Create(&group); err.Error != nil {
tx.Rollback()
return 0
}
groupUser := GroupUser{GroupID: int(group.ID), UserID: master_user_id, IsMaster: true}
if err := tx.Create(&groupUser); err.Error != nil {
tx.Rollback()
return 0
}
//提交事务
if err := tx.Commit().Error; err != nil {
return 0
}
return group.ID
}
// 加入群聊
func JoinGroup(group_id, user_id int) error {
groupUser := GroupUser{GroupID: group_id, UserID: user_id}
res := DB.Debug().Create(&groupUser)
return res.Error
}
// 退出群聊
func QuitGroup(group_id, user_id int) error {
res := DB.Debug().Delete(&GroupUser{}, "group_id = ? and user_id = ?", group_id, user_id)
return res.Error
}

View File

@ -20,6 +20,18 @@ const (
CID_BASE_DIR = "/home/lijun/cid/" CID_BASE_DIR = "/home/lijun/cid/"
) )
const (
// 以下是消息类型
MSG_TYPE_SIMPLE = 1 // 单聊
MSG_TYPE_GROUP = 2 // 群聊
MSG_TYPE_SYSTEM = 3 // 系统消息
MSG_TYPE_FRIEND = 4 // 好友请求
// 以下是消息状态
MSG_STATUS_READ = 1 // 已读
MSG_STATUS_UNREAD = 0 // 未读
)
type User struct { type User struct {
gorm.Model gorm.Model
Name string `gorm:"column:name"` Name string `gorm:"column:name"`