2024-08-02 09:47:33 +08:00
|
|
|
|
package dao
|
|
|
|
|
|
|
2024-08-02 15:02:56 +08:00
|
|
|
|
import (
|
|
|
|
|
|
"gorm.io/gorm"
|
|
|
|
|
|
"videoplayer/proto"
|
|
|
|
|
|
)
|
2024-08-02 09:47:33 +08:00
|
|
|
|
|
|
|
|
|
|
type Message struct {
|
|
|
|
|
|
gorm.Model
|
|
|
|
|
|
FromUserID int `gorm:"column:from_user_id"`
|
|
|
|
|
|
ToUserID int `gorm:"column:to_user_id"`
|
|
|
|
|
|
GroupID int `gorm:"column:group_id"`
|
|
|
|
|
|
Msg string `gorm:"column:msg"`
|
|
|
|
|
|
Status int `gorm:"column:status"` //单聊时才有0,已读,2未读
|
|
|
|
|
|
Type int `gorm:"column:type"` //1为单聊,2为群聊,3为系统消息
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
type Group struct {
|
|
|
|
|
|
gorm.Model
|
|
|
|
|
|
GroupName string `gorm:"column:group_name"`
|
2024-08-02 15:02:56 +08:00
|
|
|
|
GroupInfo string `gorm:"column:group_info"`
|
|
|
|
|
|
GroupType int `gorm:"column:group_type"`
|
|
|
|
|
|
GroupIcon string `gorm:"column:group_icon"`
|
2024-08-02 09:47:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
type GroupUser struct {
|
|
|
|
|
|
gorm.Model
|
2024-08-02 15:02:56 +08:00
|
|
|
|
GroupID int `gorm:"column:group_id"`
|
|
|
|
|
|
UserID int `gorm:"column:user_id"`
|
|
|
|
|
|
IsMaster bool `gorm:"column:is_master"`
|
2024-08-02 09:47:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
type Friend struct {
|
|
|
|
|
|
gorm.Model
|
|
|
|
|
|
UserID int `gorm:"column:user_id"`
|
|
|
|
|
|
FriendID int `gorm:"column:friend_id"`
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 创建单聊消息
|
|
|
|
|
|
func CreateSimpleMessage(from_user_id, to_user_id int, message string) error {
|
2024-08-02 15:02:56 +08:00
|
|
|
|
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}
|
2024-08-02 09:47:33 +08:00
|
|
|
|
res := DB.Debug().Create(msg)
|
|
|
|
|
|
return res.Error
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 每20个消息一组,请求index*20
|
|
|
|
|
|
func GetMsgUserByIndex(from_user_id, to_user_id, index int) ([]Message, error) {
|
|
|
|
|
|
var msgs []Message
|
|
|
|
|
|
res := DB.Debug().Where("from_user_id = ? and to_user_id = ?", from_user_id, to_user_id).Find(&msgs).Order("order by createAt DESC").Limit(20 * index)
|
|
|
|
|
|
return msgs, res.Error
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 修改信息
|
|
|
|
|
|
func UpdateMessage() {
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-02 15:02:56 +08:00
|
|
|
|
// 添加好友
|
|
|
|
|
|
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查找消息
|
2024-08-02 09:47:33 +08:00
|
|
|
|
func FindMessageByID(id uint) []Message {
|
|
|
|
|
|
var msgs []Message
|
|
|
|
|
|
DB.Debug().Where("id = ?", id).Find(msgs)
|
|
|
|
|
|
return msgs
|
|
|
|
|
|
}
|
2024-08-02 15:02:56 +08:00
|
|
|
|
|
|
|
|
|
|
// 更新消息状态
|
|
|
|
|
|
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
|
|
|
|
|
|
}
|