diff --git a/dao/im.go b/dao/im.go index f17944a..9af0c27 100644 --- a/dao/im.go +++ b/dao/im.go @@ -1,6 +1,9 @@ package dao -import "gorm.io/gorm" +import ( + "gorm.io/gorm" + "videoplayer/proto" +) type Message struct { gorm.Model @@ -15,13 +18,16 @@ type Message struct { type Group struct { gorm.Model 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 { gorm.Model - GroupID int `gorm:"column:group_id"` - UserID int `gorm:"column:user_id"` - IsMaster int `gorm:"column:is_master"` + GroupID int `gorm:"column:group_id"` + UserID int `gorm:"column:user_id"` + IsMaster bool `gorm:"column:is_master"` } type Friend struct { @@ -32,7 +38,13 @@ type Friend struct { // 创建单聊消息 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) 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 { var msgs []Message DB.Debug().Where("id = ?", id).Find(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 +} diff --git a/proto/conf.go b/proto/conf.go index 5130b5f..ee2e550 100644 --- a/proto/conf.go +++ b/proto/conf.go @@ -20,6 +20,18 @@ const ( 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 { gorm.Model Name string `gorm:"column:name"`