package repo import ( "gim/internal/logic/domain/group/model" "gim/pkg/db" "gim/pkg/gerrors" "gim/pkg/pb" "github.com/jinzhu/gorm" ) type groupUserRepo struct{} var GroupUserRepo = new(groupUserRepo) // ListByUserId 获取用户加入的群组信息 func (*groupUserRepo) ListByUserId(userId int64) ([]model.Group, error) { var groups []model.Group err := db.DB.Select("g.id,g.name,g.avatar_url,g.introduction,g.user_num,g.extra,g.create_time,g.update_time"). Table("group_user u"). Joins("join `group` g on u.group_id = g.id"). Where("u.user_id = ?", userId). Find(&groups).Error if err != nil { return nil, gerrors.WrapError(err) } return groups, nil } // ListUser 获取群组用户信息 func (*groupUserRepo) ListUser(groupId int64) ([]model.GroupUser, error) { var groupUsers []model.GroupUser err := db.DB.Find(&groupUsers, "group_id = ?", groupId).Error if err != nil { return nil, gerrors.WrapError(err) } return groupUsers, nil } // ListUserLimit 获取群组用户信息(限量) func (*groupUserRepo) ListUserLimit(groupId, limit int64) ([]model.GroupUser, error) { var groupUsers []model.GroupUser err := db.DB.Limit(limit).Find(&groupUsers, "group_id = ?", groupId).Error if err != nil { return nil, gerrors.WrapError(err) } return groupUsers, nil } // ListBannedUser 获取群组禁言用户信息 func (*groupUserRepo) ListBannedUser(groupId int64) ([]model.GroupUser, error) { var groupUsers []model.GroupUser err := db.DB.Find(&groupUsers, "group_id = ? and status = ?", groupId, pb.GroupUserStatusType_GROUP_USER_STATUS_Banned).Error if err != nil { return nil, gerrors.WrapError(err) } return groupUsers, nil } // Get 获取群组用户信息,用户不存在返回nil func (*groupUserRepo) Get(groupId, userId int64) (*model.GroupUser, error) { var groupUser model.GroupUser err := db.DB.First(&groupUser, "group_id = ? and user_id = ?", groupId, userId).Error if err != nil && err != gorm.ErrRecordNotFound { return nil, gerrors.WrapError(err) } if err == gorm.ErrRecordNotFound { return nil, nil } return &groupUser, nil } // Save 将用户添加到群组 func (*groupUserRepo) Save(groupUser *model.GroupUser) error { err := db.DB.Save(&groupUser).Error if err != nil { return gerrors.WrapError(err) } return nil } // Delete 将用户从群组删除 func (d *groupUserRepo) Delete(groupId int64, userId int64) error { err := db.DB.Exec("delete from group_user where group_id = ? and user_id = ?", groupId, userId).Error if err != nil { return gerrors.WrapError(err) } return nil }