22301138 | 5e9c35a | 2025-06-04 15:52:45 +0800 | [diff] [blame] | 1 | package com.example.myproject.service; |
| 2 | |
| 3 | import com.example.myproject.entity.Users; |
| 4 | import com.example.myproject.entity.UserFollow; |
| 5 | import com.example.myproject.repository.UserFollowRepository; |
| 6 | import com.example.myproject.repository.UserRepository; |
| 7 | import org.springframework.beans.factory.annotation.Autowired; |
| 8 | import org.springframework.stereotype.Service; |
| 9 | |
| 10 | import java.util.*; |
| 11 | |
| 12 | @Service |
| 13 | public class UserFollowService { |
| 14 | |
| 15 | @Autowired |
| 16 | private UserFollowRepository userFollowRepository; |
| 17 | |
| 18 | @Autowired |
| 19 | private UserRepository userRepository; |
| 20 | |
| 21 | // 用户关注操作 |
| 22 | public Map<String, Object> follow(Long followerId, Long followedId) { |
| 23 | if (followerId.equals(followedId)) { |
| 24 | Map<String, Object> response = new LinkedHashMap<>(); |
| 25 | response.put("status", "error"); |
| 26 | response.put("message", "不能关注自己"); |
| 27 | return response; |
| 28 | } |
| 29 | |
| 30 | // 检查是否已关注该用户 |
| 31 | UserFollow existingFollow = userFollowRepository.findByFollowerIdAndFollowedId(followerId, followedId); |
| 32 | if (existingFollow == null) { |
| 33 | // 创建新的关注记录 |
| 34 | UserFollow userFollow = new UserFollow(); |
| 35 | userFollow.setFollowerId(followerId); |
| 36 | userFollow.setFollowedId(followedId); |
| 37 | userFollow.setFollowTime(new java.util.Date()); |
| 38 | |
| 39 | userFollowRepository.save(userFollow); |
| 40 | |
| 41 | // 返回关注成功响应 |
| 42 | Map<String, Object> response = new LinkedHashMap<>(); |
| 43 | response.put("status", "success"); |
| 44 | response.put("message", "关注成功"); |
| 45 | return response; |
| 46 | } else { |
| 47 | Map<String, Object> response = new LinkedHashMap<>(); |
| 48 | response.put("status", "error"); |
| 49 | response.put("message", "已经关注该用户"); |
| 50 | return response; |
| 51 | } |
| 52 | } |
| 53 | |
| 54 | // 取消关注操作 |
| 55 | public Map<String, Object> unfollow(Long followerId, Long followedId) { |
| 56 | UserFollow userFollow = userFollowRepository.findByFollowerIdAndFollowedId(followerId, followedId); |
| 57 | |
| 58 | if (userFollow != null) { |
| 59 | userFollowRepository.delete(userFollow); |
| 60 | |
| 61 | Map<String, Object> response = new LinkedHashMap<>(); |
| 62 | response.put("status", "success"); |
| 63 | response.put("message", "取消关注成功"); |
| 64 | return response; |
| 65 | } else { |
| 66 | Map<String, Object> response = new LinkedHashMap<>(); |
| 67 | response.put("status", "error"); |
| 68 | response.put("message", "未找到关注关系"); |
| 69 | return response; |
| 70 | } |
| 71 | } |
| 72 | |
| 73 | // 获取某个用户的所有粉丝 |
| 74 | public Map<String, Object> getFollowers(Long userId) { |
| 75 | List<UserFollow> followers = userFollowRepository.findByFollowedId(userId); |
| 76 | |
| 77 | List<Map<String, Object>> followersList = new ArrayList<>(); |
| 78 | for (UserFollow follow : followers) { |
| 79 | // 获取粉丝的用户信息 |
| 80 | Users follower = userRepository.findById(follow.getFollowerId()).orElse(null); |
| 81 | if (follower != null) { |
| 82 | Map<String, Object> followerInfo = new LinkedHashMap<>(); |
| 83 | followerInfo.put("user_id", follower.getUserId()); |
| 84 | followerInfo.put("username", follower.getUsername()); |
| 85 | followerInfo.put("avatar_url", follower.getAvatarUrl()); |
| 86 | followersList.add(followerInfo); |
| 87 | } |
| 88 | } |
| 89 | |
| 90 | // 返回响应数据 |
| 91 | Map<String, Object> response = new LinkedHashMap<>(); |
| 92 | response.put("status", "success"); |
| 93 | response.put("total", followersList.size()); |
| 94 | response.put("followers", followersList); |
| 95 | |
| 96 | return response; |
| 97 | } |
| 98 | |
| 99 | // 获取某个用户的所有关注用户 |
| 100 | public Map<String, Object> getFollowing(Long userId) { |
| 101 | List<UserFollow> following = userFollowRepository.findByFollowerId(userId); |
| 102 | |
| 103 | List<Map<String, Object>> followingList = new ArrayList<>(); |
| 104 | for (UserFollow follow : following) { |
| 105 | // 获取被关注的用户信息 |
| 106 | Users followedUser = userRepository.findById(follow.getFollowedId()).orElse(null); |
| 107 | if (followedUser != null) { |
| 108 | Map<String, Object> followingInfo = new HashMap<>(); |
| 109 | followingInfo.put("user_id", followedUser.getUserId()); |
| 110 | followingInfo.put("username", followedUser.getUsername()); |
| 111 | followingInfo.put("avatar_url", followedUser.getAvatarUrl()); |
| 112 | followingList.add(followingInfo); |
| 113 | } |
| 114 | } |
| 115 | Map<String, Object> response = new HashMap<>(); |
| 116 | response.put("status", "success"); |
| 117 | response.put("total", followingList.size()); |
| 118 | response.put("following", followingList); |
| 119 | |
| 120 | return response; |
| 121 | } |
| 122 | } |