| package com.example.myproject.service; |
| |
| import com.example.myproject.entity.Users; |
| import com.example.myproject.entity.UserFollow; |
| import com.example.myproject.repository.UserFollowRepository; |
| import com.example.myproject.repository.UserRepository; |
| import org.springframework.beans.factory.annotation.Autowired; |
| import org.springframework.stereotype.Service; |
| |
| import java.util.*; |
| |
| @Service |
| public class UserFollowService { |
| |
| @Autowired |
| private UserFollowRepository userFollowRepository; |
| |
| @Autowired |
| private UserRepository userRepository; |
| |
| // 用户关注操作 |
| public Map<String, Object> follow(Long followerId, Long followedId) { |
| if (followerId.equals(followedId)) { |
| Map<String, Object> response = new LinkedHashMap<>(); |
| response.put("status", "error"); |
| response.put("message", "不能关注自己"); |
| return response; |
| } |
| |
| // 检查是否已关注该用户 |
| UserFollow existingFollow = userFollowRepository.findByFollowerIdAndFollowedId(followerId, followedId); |
| if (existingFollow == null) { |
| // 创建新的关注记录 |
| UserFollow userFollow = new UserFollow(); |
| userFollow.setFollowerId(followerId); |
| userFollow.setFollowedId(followedId); |
| userFollow.setFollowTime(new java.util.Date()); |
| |
| userFollowRepository.save(userFollow); |
| |
| // 返回关注成功响应 |
| Map<String, Object> response = new LinkedHashMap<>(); |
| response.put("status", "success"); |
| response.put("message", "关注成功"); |
| return response; |
| } else { |
| Map<String, Object> response = new LinkedHashMap<>(); |
| response.put("status", "error"); |
| response.put("message", "已经关注该用户"); |
| return response; |
| } |
| } |
| |
| // 取消关注操作 |
| public Map<String, Object> unfollow(Long followerId, Long followedId) { |
| UserFollow userFollow = userFollowRepository.findByFollowerIdAndFollowedId(followerId, followedId); |
| |
| if (userFollow != null) { |
| userFollowRepository.delete(userFollow); |
| |
| Map<String, Object> response = new LinkedHashMap<>(); |
| response.put("status", "success"); |
| response.put("message", "取消关注成功"); |
| return response; |
| } else { |
| Map<String, Object> response = new LinkedHashMap<>(); |
| response.put("status", "error"); |
| response.put("message", "未找到关注关系"); |
| return response; |
| } |
| } |
| |
| // 获取某个用户的所有粉丝 |
| public Map<String, Object> getFollowers(Long userId) { |
| List<UserFollow> followers = userFollowRepository.findByFollowedId(userId); |
| |
| List<Map<String, Object>> followersList = new ArrayList<>(); |
| for (UserFollow follow : followers) { |
| // 获取粉丝的用户信息 |
| Users follower = userRepository.findById(follow.getFollowerId()).orElse(null); |
| if (follower != null) { |
| Map<String, Object> followerInfo = new LinkedHashMap<>(); |
| followerInfo.put("user_id", follower.getUserId()); |
| followerInfo.put("username", follower.getUsername()); |
| followerInfo.put("avatar_url", follower.getAvatarUrl()); |
| followersList.add(followerInfo); |
| } |
| } |
| |
| // 返回响应数据 |
| Map<String, Object> response = new LinkedHashMap<>(); |
| response.put("status", "success"); |
| response.put("total", followersList.size()); |
| response.put("followers", followersList); |
| |
| return response; |
| } |
| |
| // 获取某个用户的所有关注用户 |
| public Map<String, Object> getFollowing(Long userId) { |
| List<UserFollow> following = userFollowRepository.findByFollowerId(userId); |
| |
| List<Map<String, Object>> followingList = new ArrayList<>(); |
| for (UserFollow follow : following) { |
| // 获取被关注的用户信息 |
| Users followedUser = userRepository.findById(follow.getFollowedId()).orElse(null); |
| if (followedUser != null) { |
| Map<String, Object> followingInfo = new HashMap<>(); |
| followingInfo.put("user_id", followedUser.getUserId()); |
| followingInfo.put("username", followedUser.getUsername()); |
| followingInfo.put("avatar_url", followedUser.getAvatarUrl()); |
| followingList.add(followingInfo); |
| } |
| } |
| Map<String, Object> response = new HashMap<>(); |
| response.put("status", "success"); |
| response.put("total", followingList.size()); |
| response.put("following", followingList); |
| |
| return response; |
| } |
| } |