XuqmGroup-Server/im-service/src/main/java/com/xuqm/im/service/FriendRequestService.java
XuqmGroup bc329ec566 feat(chat): 添加聊天界面和会话管理功能
- 实现了本地IM缓存功能,支持会话、消息历史和草稿的存储
- 开发了聊天界面UI组件,包含消息列表、输入框和搜索功能
- 创建了聊天相关的ViewModel,处理消息收发和状态管理
- 构建了会话列表界面,支持置顶、免打扰和删除操作
- 集成了群组功能,实现群聊管理和群设置界面
- 添加了实时消息推送和会话状态同步机制
2026-04-27 23:41:58 +08:00

90 行
3.9 KiB
Java

package com.xuqm.im.service;
import com.xuqm.common.exception.BusinessException;
import com.xuqm.im.entity.ImFriendRequestEntity;
import com.xuqm.im.repository.ImFriendRequestRepository;
import com.xuqm.im.repository.ImFriendRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;
@Service
public class FriendRequestService {
private final ImFriendRequestRepository requestRepository;
private final ImFriendRepository friendRepository;
public FriendRequestService(ImFriendRequestRepository requestRepository,
ImFriendRepository friendRepository) {
this.requestRepository = requestRepository;
this.friendRepository = friendRepository;
}
@Transactional
public ImFriendRequestEntity send(String appId, String fromUserId, String toUserId, String remark) {
return requestRepository.findByAppIdAndFromUserIdAndToUserId(appId, fromUserId, toUserId)
.orElseGet(() -> {
ImFriendRequestEntity entity = new ImFriendRequestEntity();
entity.setId(UUID.randomUUID().toString());
entity.setAppId(appId);
entity.setFromUserId(fromUserId);
entity.setToUserId(toUserId);
entity.setRemark(remark);
entity.setStatus(ImFriendRequestEntity.Status.PENDING.name());
entity.setCreatedAt(LocalDateTime.now());
return requestRepository.save(entity);
});
}
@Transactional
public ImFriendRequestEntity accept(String appId, String requestId, String operatorId) {
ImFriendRequestEntity request = getRequest(appId, requestId, operatorId);
request.setStatus(ImFriendRequestEntity.Status.ACCEPTED.name());
request.setReviewedAt(LocalDateTime.now());
requestRepository.save(request);
friendRepository
.findByAppIdAndUserIdAndFriendId(appId, request.getFromUserId(), request.getToUserId())
.orElseGet(() -> friendEntity(appId, request.getFromUserId(), request.getToUserId()));
friendRepository
.findByAppIdAndUserIdAndFriendId(appId, request.getToUserId(), request.getFromUserId())
.orElseGet(() -> friendEntity(appId, request.getToUserId(), request.getFromUserId()));
return request;
}
@Transactional
public ImFriendRequestEntity reject(String appId, String requestId, String operatorId) {
ImFriendRequestEntity request = getRequest(appId, requestId, operatorId);
request.setStatus(ImFriendRequestEntity.Status.REJECTED.name());
request.setReviewedAt(LocalDateTime.now());
return requestRepository.save(request);
}
public List<ImFriendRequestEntity> incoming(String appId, String userId) {
return requestRepository.findByAppIdAndToUserId(appId, userId);
}
public List<ImFriendRequestEntity> outgoing(String appId, String userId) {
return requestRepository.findByAppIdAndFromUserId(appId, userId);
}
private ImFriendRequestEntity getRequest(String appId, String requestId, String operatorId) {
ImFriendRequestEntity request = requestRepository.findById(requestId)
.orElseThrow(() -> new BusinessException(404, "好友申请不存在"));
if (!request.getAppId().equals(appId) || !request.getToUserId().equals(operatorId)) {
throw new BusinessException(403, "无权操作");
}
return request;
}
private com.xuqm.im.entity.ImFriendEntity friendEntity(String appId, String userId, String friendId) {
com.xuqm.im.entity.ImFriendEntity entity = new com.xuqm.im.entity.ImFriendEntity();
entity.setAppId(appId);
entity.setUserId(userId);
entity.setFriendId(friendId);
return friendRepository.save(entity);
}
}