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.
108 lines
2.4 KiB
108 lines
2.4 KiB
2 months ago
|
package service
|
||
|
|
||
|
import (
|
||
|
"chat-room/internal/dao/pool"
|
||
|
"chat-room/pkg/common/response"
|
||
|
"chat-room/pkg/errors"
|
||
|
|
||
|
"chat-room/internal/model"
|
||
|
|
||
|
"github.com/google/uuid"
|
||
|
)
|
||
|
|
||
|
type groupService struct {
|
||
|
}
|
||
|
|
||
|
var GroupService = new(groupService)
|
||
|
|
||
|
func (g *groupService) GetGroups(uuid string) ([]response.GroupResponse, error) {
|
||
|
db := pool.GetDB()
|
||
|
|
||
|
migrate := &model.Group{}
|
||
|
pool.GetDB().AutoMigrate(&migrate)
|
||
|
migrate2 := &model.GroupMember{}
|
||
|
pool.GetDB().AutoMigrate(&migrate2)
|
||
|
|
||
|
var queryUser *model.User
|
||
|
db.First(&queryUser, "uuid = ?", uuid)
|
||
|
|
||
|
if queryUser.Id <= 0 {
|
||
|
return nil, errors.New("用户不存在")
|
||
|
}
|
||
|
|
||
|
var groups []response.GroupResponse
|
||
|
|
||
|
db.Raw("SELECT g.id AS group_id, g.uuid, g.created_at, g.name, g.notice FROM group_members AS gm LEFT JOIN `groups` AS g ON gm.group_id = g.id WHERE gm.user_id = ?",
|
||
|
queryUser.Id).Scan(&groups)
|
||
|
|
||
|
return groups, nil
|
||
|
}
|
||
|
|
||
|
func (g *groupService) SaveGroup(userUuid string, group model.Group) {
|
||
|
db := pool.GetDB()
|
||
|
var fromUser model.User
|
||
|
db.Find(&fromUser, "uuid = ?", userUuid)
|
||
|
if fromUser.Id <= 0 {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
group.UserId = fromUser.Id
|
||
|
group.Uuid = uuid.New().String()
|
||
|
db.Save(&group)
|
||
|
|
||
|
groupMember := model.GroupMember{
|
||
|
UserId: fromUser.Id,
|
||
|
GroupId: group.ID,
|
||
|
Nickname: fromUser.Username,
|
||
|
Mute: 0,
|
||
|
}
|
||
|
db.Save(&groupMember)
|
||
|
}
|
||
|
|
||
|
func (g *groupService) GetUserIdByGroupUuid(groupUuid string) []model.User {
|
||
|
var group model.Group
|
||
|
db := pool.GetDB()
|
||
|
db.First(&group, "uuid = ?", groupUuid)
|
||
|
if group.ID <= 0 {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
var users []model.User
|
||
|
db.Raw("SELECT u.uuid, u.avatar, u.username FROM `groups` AS g JOIN group_members AS gm ON gm.group_id = g.id JOIN users AS u ON u.id = gm.user_id WHERE g.id = ?",
|
||
|
group.ID).Scan(&users)
|
||
|
return users
|
||
|
}
|
||
|
|
||
|
func (g *groupService) JoinGroup(groupUuid, userUuid string) error {
|
||
|
var user model.User
|
||
|
db := pool.GetDB()
|
||
|
db.First(&user, "uuid = ?", userUuid)
|
||
|
if user.Id <= 0 {
|
||
|
return errors.New("用户不存在")
|
||
|
}
|
||
|
|
||
|
var group model.Group
|
||
|
db.First(&group, "uuid = ?", groupUuid)
|
||
|
if user.Id <= 0 {
|
||
|
return errors.New("群组不存在")
|
||
|
}
|
||
|
var groupMember model.GroupMember
|
||
|
db.First(&groupMember, "user_id = ? and group_id = ?", user.Id, group.ID)
|
||
|
if groupMember.ID > 0 {
|
||
|
return errors.New("已经加入该群组")
|
||
|
}
|
||
|
nickname := user.Nickname
|
||
|
if nickname == "" {
|
||
|
nickname = user.Username
|
||
|
}
|
||
|
groupMemberInsert := model.GroupMember{
|
||
|
UserId: user.Id,
|
||
|
GroupId: group.ID,
|
||
|
Nickname: nickname,
|
||
|
Mute: 0,
|
||
|
}
|
||
|
db.Save(&groupMemberInsert)
|
||
|
|
||
|
return nil
|
||
|
}
|