feat: friends related logic refactor

This commit is contained in:
merlin
2025-12-02 10:09:57 +08:00
parent 0ea6e13064
commit 3fce5b2f01
14 changed files with 353 additions and 11 deletions

View File

@@ -1,10 +1,71 @@
package xin.merlin.myplayerbackend.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import xin.merlin.myplayerbackend.entity.Friends;
import xin.merlin.myplayerbackend.entity.Inviting;
import xin.merlin.myplayerbackend.entity.UserInfo;
import xin.merlin.myplayerbackend.entity.http.InvitingDetails;
import xin.merlin.myplayerbackend.mapper.FriendsMapper;
import xin.merlin.myplayerbackend.mapper.InvitingMapper;
import xin.merlin.myplayerbackend.mapper.UserMapper;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Service
@RequiredArgsConstructor
public class InvitingServiceImpl extends ServiceImpl<InvitingMapper, Inviting> {
private final InvitingMapper invitingMapper;
private final UserMapper userMapper;
private final FriendsMapper friendsMapper;
public Boolean inviting(Integer inviter, Integer target,Integer room){
Inviting inviting = new Inviting();
inviting.setInviter(inviter);
inviting.setTarget(target);
inviting.setStatus(0);
if (room != null){
inviting.setRoom(room);
}
if (invitingMapper.selectCount(Wrappers.<Inviting>lambdaQuery().eq(Inviting::getInviter,inviter).eq(Inviting::getTarget,target).eq(Inviting::getStatus,0).eq(Inviting::getRoom,room)) > 0) return false;
return invitingMapper.insert(inviting) == 1;
}
public Map<String,Object> getInvitingDetail(Integer target, Integer size, Integer page){
List<Inviting> invitings = invitingMapper.selectList(new Page<Inviting>(page,size), Wrappers.<Inviting>lambdaQuery().eq(Inviting::getTarget,target));
List<InvitingDetails> invitingDetails = new ArrayList<>();
for (Inviting inviting : invitings){
InvitingDetails invitingDetail = new InvitingDetails(inviting,
userMapper.selectOne(Wrappers.<UserInfo>lambdaQuery().eq(UserInfo::getId,target)));
invitingDetails.add(invitingDetail);
}
return Map.of("result",invitingDetails);
}
@Transactional
public Boolean handleFriendInviting(Inviting inviting) {
try {
if (inviting.getStatus().equals(0)) return false;
else if (inviting.getStatus().equals(1)){
friendsMapper.insert(new Friends(inviting.getInviter(), inviting.getTarget(), null));
friendsMapper.insert(new Friends(inviting.getTarget(), inviting.getInviter(), null));
return true;
}
else return true;
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
}
}