follow+sendMessage
Change-Id: I3e9bbcc89dfc53b9651fd8722da1b445a597629a
diff --git a/src/main/java/com/example/g8backend/service/IUserService.java b/src/main/java/com/example/g8backend/service/IUserService.java
index af94d27..1f178f8 100644
--- a/src/main/java/com/example/g8backend/service/IUserService.java
+++ b/src/main/java/com/example/g8backend/service/IUserService.java
@@ -1,11 +1,25 @@
package com.example.g8backend.service;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.example.g8backend.entity.Message;
import com.example.g8backend.entity.User;
import org.apache.ibatis.annotations.Param;
+import java.util.List;
+
public interface IUserService extends IService<User> {
User getUserByName(@Param("name") String name);
User getUserByEmail(@Param("email") String email);
User getUserByPasskey(@Param("passkey") String passkey);
+
+ // 关注功能
+ boolean followUser(Long followerId, Long followedId);
+ boolean unfollowUser(Long followerId, Long followedId);
+ List<User> getFollowings(Long userId);
+ List<User> getFollowers(Long userId);
+
+ // 私信功能
+ Long sendMessage(Long senderId, Long receiverId, String content);
+ List<Message> getMessages(Long userId, Long partnerId);
+ List<Message> getMessageHistory(Long userId);
}
diff --git a/src/main/java/com/example/g8backend/service/impl/UserServiceImpl.java b/src/main/java/com/example/g8backend/service/impl/UserServiceImpl.java
index e8bcf20..1d1b6dc 100644
--- a/src/main/java/com/example/g8backend/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/example/g8backend/service/impl/UserServiceImpl.java
@@ -1,12 +1,22 @@
package com.example.g8backend.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.example.g8backend.entity.Follow;
+import com.example.g8backend.entity.Message;
import com.example.g8backend.entity.User;
+import com.example.g8backend.mapper.FollowMapper;
+import com.example.g8backend.mapper.MessageMapper;
import com.example.g8backend.mapper.UserMapper;
import com.example.g8backend.service.IUserService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
@@ -22,4 +32,89 @@
@Override
public User getUserByPasskey(String passkey) { return userMapper.getUserByPasskey(passkey);}
+ @Resource
+ private FollowMapper followMapper;
+ @Resource
+ private MessageMapper messageMapper;
+
+ @Override
+ public boolean followUser(Long followerId, Long followedId) {
+ if (followerId.equals(followedId)) return false;
+ Follow follow = new Follow();
+ follow.setFollowerId(followerId);
+ follow.setFollowedId(followedId);
+ return followMapper.insert(follow) > 0;
+ }
+
+ @Override
+ public boolean unfollowUser(Long followerId, Long followedId) {
+ // 删除关注关系
+ return followMapper.deleteByPair(followerId, followedId) > 0;
+ }
+
+ @Override
+ public List<User> getFollowings(Long userId) {
+ // 1. 获取关注ID列表
+ List<Long> followingIds = followMapper.selectFollowings(userId);
+ // 2. 批量查询用户信息
+ return followingIds.isEmpty() ?
+ Collections.emptyList() :
+ this.listByIds(followingIds).stream()
+ .peek(user -> user.setPassword(null)) // 敏感信息脱敏
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public List<User> getFollowers(Long userId) {
+ // 1. 获取粉丝ID列表
+ List<Long> followerIds = followMapper.selectFollowers(userId);
+ // 2. 批量查询用户信息
+ return followerIds.isEmpty() ?
+ Collections.emptyList() :
+ this.listByIds(followerIds).stream()
+ .peek(user -> user.setPassword(null))
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public Long sendMessage(Long senderId, Long receiverId, String content) {
+ // 1. 校验接收者是否存在(方案一)
+ if (userMapper.selectById(receiverId) == null) {
+ throw new RuntimeException("接收用户不存在");
+ }
+
+ // 2. 创建消息实体
+ Message message = new Message()
+ .setSenderId(senderId)
+ .setReceiverId(receiverId)
+ .setContent(content)
+ .setSentAt(LocalDateTime.now());
+
+ // 3. 插入数据库
+ messageMapper.insert(message);
+ return message.getMessageId();
+ }
+
+ @Override
+ public List<Message> getMessages(Long userId, Long partnerId) {
+ // 获取双方对话记录
+ return messageMapper.selectConversation(userId, partnerId).stream()
+ .peek(msg -> {
+ // 标记消息为已读
+ if (!msg.getIsRead() && msg.getReceiverId().equals(userId)) {
+ msg.setIsRead(true);
+ messageMapper.updateById(msg);
+ }
+ })
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public List<Message> getMessageHistory(Long userId) {
+ // 获取用户所有相关消息
+ return messageMapper.selectUserMessages(userId).stream()
+ .sorted(Comparator.comparing(Message::getSentAt).reversed())
+ .collect(Collectors.toList());
+ }
+
}