|
|
|
// Copyright 2023 ROC. All rights reserved.
|
|
|
|
// Use of this source code is governed by a MIT style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package dbr
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/sirupsen/logrus"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
"gorm.io/gorm/clause"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Following struct {
|
|
|
|
*Model
|
|
|
|
User *User `json:"-" gorm:"foreignKey:ID;references:FollowId"`
|
|
|
|
UserId int64 `json:"user_id"`
|
|
|
|
FollowId int64 `json:"follow_id"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f *Following) GetFollowing(db *gorm.DB, userId, followId int64) (*Following, error) {
|
|
|
|
var following Following
|
|
|
|
err := db.Omit("User").Unscoped().Where("user_id = ? AND follow_id = ?", userId, followId).First(&following).Error
|
|
|
|
if err != nil {
|
|
|
|
logrus.Debugf("Following.GetFollowing get following error:%s", err)
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return &following, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f *Following) DelFollowing(db *gorm.DB, userId, followId int64) error {
|
|
|
|
return db.Omit("User").Unscoped().Where("user_id = ? AND follow_id = ?", userId, followId).Delete(f).Error
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f *Following) ListFollows(db *gorm.DB, userId int64, limit int, offset int) (res []*Following, total int64, err error) {
|
|
|
|
db = db.Model(f).Where("user_id=?", userId)
|
|
|
|
if err = db.Count(&total).Error; err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if offset >= 0 && limit > 0 {
|
|
|
|
db = db.Offset(offset).Limit(limit)
|
|
|
|
}
|
|
|
|
db.Joins("User").Order(clause.OrderByColumn{Column: clause.Column{Table: "User", Name: "nickname"}, Desc: false})
|
|
|
|
if err = db.Find(&res).Error; err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f *Following) ListFollowingIds(db *gorm.DB, userId int64, limit, offset int) (ids []int64, total int64, err error) {
|
|
|
|
db = db.Model(f).Where("follow_id=?", userId)
|
|
|
|
if err = db.Count(&total).Error; err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if offset >= 0 && limit > 0 {
|
|
|
|
db = db.Offset(offset).Limit(limit)
|
|
|
|
}
|
|
|
|
if err = db.Omit("User").Select("user_id").Find(&ids).Error; err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f *Following) FollowCount(db *gorm.DB, userId int64) (follows int64, followings int64, err error) {
|
|
|
|
if err = db.Model(f).Where("user_id=?", userId).Count(&follows).Error; err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if err = db.Model(f).Where("follow_id=?", userId).Count(&followings).Error; err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *Following) IsFollow(db *gorm.DB, userId int64, followId int64) bool {
|
|
|
|
if _, err := s.GetFollowing(db, userId, followId); err == nil {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f *Following) Create(db *gorm.DB) (*Following, error) {
|
|
|
|
err := db.Omit("User").Create(f).Error
|
|
|
|
return f, err
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Following) UpdateInUnscoped(db *gorm.DB) error {
|
|
|
|
return db.Unscoped().Omit("User").Save(c).Error
|
|
|
|
}
|