|
|
|
// 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 jinzhu
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/rocboss/paopao-ce/internal/core"
|
|
|
|
"github.com/rocboss/paopao-ce/internal/core/ms"
|
|
|
|
"github.com/rocboss/paopao-ce/internal/dao/jinzhu/dbr"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
_ core.FollowingManageService = (*followingManageSrv)(nil)
|
|
|
|
)
|
|
|
|
|
|
|
|
type followingManageSrv struct {
|
|
|
|
db *gorm.DB
|
|
|
|
f *dbr.Following
|
|
|
|
u *dbr.User
|
|
|
|
}
|
|
|
|
|
|
|
|
func newFollowingManageService(db *gorm.DB) core.FollowingManageService {
|
|
|
|
return &followingManageSrv{
|
|
|
|
db: db,
|
|
|
|
f: &dbr.Following{},
|
|
|
|
u: &dbr.User{},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *followingManageSrv) FollowUser(userId int64, followId int64) error {
|
|
|
|
if _, err := s.f.GetFollowing(s.db, userId, followId); err != nil {
|
|
|
|
following := &dbr.Following{
|
|
|
|
UserId: userId,
|
|
|
|
FollowId: followId,
|
|
|
|
}
|
|
|
|
if _, err = following.Create(s.db); err != nil {
|
|
|
|
logrus.Errorf("contactManageSrv.fetchOrNewContact create new contact err:%s", err)
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *followingManageSrv) UnfollowUser(userId int64, followId int64) error {
|
|
|
|
return s.f.DelFollowing(s.db, userId, followId)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *followingManageSrv) ListFollows(userId int64, limit, offset int) (*ms.ContactList, error) {
|
|
|
|
follows, totoal, err := s.f.ListFollows(s.db, userId, limit, offset)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
res := &ms.ContactList{
|
|
|
|
Total: totoal,
|
|
|
|
}
|
|
|
|
for _, f := range follows {
|
|
|
|
res.Contacts = append(res.Contacts, ms.ContactItem{
|
|
|
|
UserId: f.User.ID,
|
|
|
|
Username: f.User.Username,
|
|
|
|
Nickname: f.User.Nickname,
|
|
|
|
Avatar: f.User.Avatar,
|
|
|
|
CreatedOn: f.User.CreatedOn,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
return res, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *followingManageSrv) ListFollowings(userId int64, limit, offset int) (*ms.ContactList, error) {
|
|
|
|
followingIds, totoal, err := s.f.ListFollowingIds(s.db, userId, limit, offset)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
followings, err := s.u.ListUserInfoById(s.db, followingIds)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
res := &ms.ContactList{
|
|
|
|
Total: totoal,
|
|
|
|
}
|
|
|
|
for _, user := range followings {
|
|
|
|
res.Contacts = append(res.Contacts, ms.ContactItem{
|
|
|
|
UserId: user.ID,
|
|
|
|
Username: user.Username,
|
|
|
|
Nickname: user.Nickname,
|
|
|
|
Avatar: user.Avatar,
|
|
|
|
CreatedOn: user.CreatedOn,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
return res, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *followingManageSrv) GetFollowCount(userId int64) (int64, int64, error) {
|
|
|
|
return s.f.FollowCount(s.db, userId)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *followingManageSrv) IsFollow(userId int64, followId int64) bool {
|
|
|
|
if _, err := s.f.GetFollowing(s.db, userId, followId); err == nil {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|