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
2024-08-02 16:33:52 +08:00
func GetMsgUserByIndex ( from_user_id , to_user_id , msg_type , index int ) ( [ ] Message , error ) {
2024-08-02 09:47:33 +08:00
var msgs [ ] Message
2024-08-02 16:33:52 +08:00
res := DB . Debug ( ) . Where ( "from_user_id = ? and to_user_id = ? and type = ?" , from_user_id , to_user_id , msg_type ) . Find ( & msgs ) . Order ( "order by createAt DESC" ) . Limit ( 20 * index )
2024-08-02 09:47:33 +08:00
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
}