mirror of https://github.com/kone-net/go-chat.git
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.
107 lines
2.4 KiB
107 lines
2.4 KiB
package service |
|
|
|
import ( |
|
"chat-room/internal/dao/pool" |
|
"chat-room/pkg/errors" |
|
"chat-room/pkg/common/response" |
|
|
|
"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 |
|
}
|
|
|