🎨 新增讲师关注功能
This commit is contained in:
@@ -79,6 +79,11 @@ func (u *AppUserService) WechatLogin(info *providers.User) (users user.User, err
|
||||
global.GVA_LOG.Error("查询用户失败", zap.Error(err))
|
||||
return
|
||||
}
|
||||
if users.Status != 1 {
|
||||
err = fmt.Errorf("用户已被封禁")
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -244,5 +249,128 @@ func (u *AppUserService) GetTeacherList(p common.PageInfo) (list []vo.TeacherInf
|
||||
global.GVA_LOG.Error("查询教师列表失败", zap.Error(err))
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 获取每个教师的粉丝数
|
||||
for i := range list {
|
||||
followCount, err := u.GetTeacherFansCount(list[i].ID)
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("查询教师粉丝数失败", zap.Error(err))
|
||||
return nil, 0, err
|
||||
}
|
||||
list[i].Follow = followCount
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (u *AppUserService) GetFollowTeacherList(id uint, p common.PageInfo) (list []vo.TeacherInfo, total int64, err error) {
|
||||
limit := p.PageSize
|
||||
offset := (p.Page - 1) * p.PageSize
|
||||
|
||||
// 1. 获取用户关注的教师ID列表
|
||||
var followings []app.Follow
|
||||
err = global.GVA_DB.Model(&app.Follow{}).Where("user_id = ?", id).Find(&followings).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("查询关注列表失败", zap.Error(err))
|
||||
return
|
||||
}
|
||||
if len(followings) == 0 {
|
||||
return
|
||||
}
|
||||
var teacherIDs []uint
|
||||
for _, f := range followings {
|
||||
teacherIDs = append(teacherIDs, f.TeacherId)
|
||||
}
|
||||
|
||||
// 2. 根据教师ID列表获取教师信息
|
||||
db := global.GVA_DB.Model(&user.User{}).Where("id IN ?", teacherIDs)
|
||||
|
||||
if p.Keyword != "" {
|
||||
db = db.Where("nick_name LIKE ?", "%"+p.Keyword+"%")
|
||||
}
|
||||
|
||||
err = db.Count(&total).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("查询关注教师总数失败", zap.Error(err))
|
||||
return
|
||||
}
|
||||
err = db.Limit(limit).Offset(offset).Select("id, nick_name, avatar,des").Find(&list).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("查询关注教师列表失败", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
// 获取每个教师的粉丝数
|
||||
for i := range list {
|
||||
followCount, err := u.GetTeacherFansCount(list[i].ID)
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("查询教师粉丝数失败", zap.Error(err))
|
||||
return nil, 0, err
|
||||
}
|
||||
list[i].Follow = followCount
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// FollowTeacher 用户关注/取消关注教师
|
||||
func (u *AppUserService) FollowTeacher(p app.Follow) error {
|
||||
var follow app.Follow
|
||||
// 用 Unscoped 查询所有记录(包括软删除)
|
||||
db := global.GVA_DB.Unscoped().Where("user_id = ? AND teacher_id = ?", p.UserId, p.TeacherId)
|
||||
err := db.First(&follow).Error
|
||||
if err == nil {
|
||||
if follow.DeletedAt.Valid {
|
||||
// 已软删除,恢复关注
|
||||
err = global.GVA_DB.Model(&app.Follow{}).Unscoped().Where("id = ?", follow.ID).Update("deleted_at", nil).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("恢复关注失败", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
return nil // 恢复关注成功
|
||||
} else {
|
||||
// 已关注,取消关注
|
||||
err = global.GVA_DB.Where("user_id = ? AND teacher_id = ?", p.UserId, p.TeacherId).Delete(&app.Follow{}).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("取消关注失败", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
return nil // 取消关注成功
|
||||
}
|
||||
} else if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
// 没有任何记录,直接关注
|
||||
err = global.GVA_DB.Create(&p).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("关注教师失败", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
return nil // 关注成功
|
||||
} else {
|
||||
global.GVA_LOG.Error("查询关注记录失败", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// GetTeacherFansCount 获取讲师粉丝数
|
||||
func (u *AppUserService) GetTeacherFansCount(teacherId uint) (int64, error) {
|
||||
var count int64
|
||||
err := global.GVA_DB.Model(&app.Follow{}).Where("teacher_id = ?", teacherId).Count(&count).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("统计粉丝数失败", zap.Error(err))
|
||||
return 0, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
// IsFollowTeacher 判断用户是否关注某讲师
|
||||
func (u *AppUserService) IsFollowTeacher(userId, teacherId uint) (bool, error) {
|
||||
var count int64
|
||||
err := global.GVA_DB.Model(&app.Follow{}).
|
||||
Where("user_id = ? AND teacher_id = ?", userId, teacherId).
|
||||
Count(&count).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("查询关注状态失败", zap.Error(err))
|
||||
return false, err
|
||||
}
|
||||
return count > 0, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user