blob: 6222b483516b569c0d236b197f27be14ac292394 [file] [log] [blame]
223011381c359102025-06-03 15:19:59 +08001package com.example.myproject.service;
2
3import com.example.myproject.entity.Users;
4import com.example.myproject.entity.UserFollow;
5import com.example.myproject.repository.UserFollowRepository;
6import com.example.myproject.repository.UserRepository;
7import org.springframework.beans.factory.annotation.Autowired;
8import org.springframework.stereotype.Service;
9
10import java.util.*;
11
12@Service
13public 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}