diff --git a/src/main/java/xin/merlin/myplayerbackend/config/security/JWTAuthenticationFilter.java b/src/main/java/xin/merlin/myplayerbackend/config/security/JWTAuthenticationFilter.java index fc84d1a..431830b 100644 --- a/src/main/java/xin/merlin/myplayerbackend/config/security/JWTAuthenticationFilter.java +++ b/src/main/java/xin/merlin/myplayerbackend/config/security/JWTAuthenticationFilter.java @@ -35,7 +35,7 @@ public class JWTAuthenticationFilter extends OncePerRequestFilter { try { if (!jwtUtil.isTokenExpired(token)) { - System.out.println("token expired: " + token); +// System.out.println("token expired: " + token); String account = jwtUtil.getAccount(token); if (account != null && SecurityContextHolder.getContext().getAuthentication() == null) { diff --git a/src/main/java/xin/merlin/myplayerbackend/controller/FriendController.java b/src/main/java/xin/merlin/myplayerbackend/controller/FriendController.java new file mode 100644 index 0000000..b51c4e6 --- /dev/null +++ b/src/main/java/xin/merlin/myplayerbackend/controller/FriendController.java @@ -0,0 +1,67 @@ +package xin.merlin.myplayerbackend.controller; + + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import xin.merlin.myplayerbackend.entity.Friends; +import xin.merlin.myplayerbackend.entity.UserInfo; +import xin.merlin.myplayerbackend.service.impl.FriendsServiceImpl; +import xin.merlin.myplayerbackend.service.impl.InvitingServiceImpl; +import xin.merlin.myplayerbackend.utils.JwtUtil; +import xin.merlin.myplayerbackend.utils.result.Response; +import xin.merlin.myplayerbackend.utils.result.ResultCode; + +import static com.baomidou.mybatisplus.extension.ddl.DdlScriptErrorHandler.PrintlnLogErrorHandler.log; + +@Slf4j +@RequestMapping("/friend") +@RestController +@RequiredArgsConstructor +public class FriendController { + + private final FriendsServiceImpl friendsService; + + private final InvitingServiceImpl invitingService; + + private final JwtUtil jwtUtil; + + + @GetMapping("/get") + Response getFriend(@RequestHeader("Authorization")String token, @RequestParam Integer size, @RequestParam Integer page) { + try { + token = token.substring(7); + Integer id = jwtUtil.getId(token); + return Response.success(ResultCode.SUCCESS,friendsService.getFriends(id,size,page)); + } catch (Exception e) { + log.error(e.getMessage()); + return Response.fail(ResultCode.SERVER_ERROR); + } + } + + @PostMapping("/delete") + Response deleteFriend(@RequestHeader("Authorization")String token, @RequestParam Integer f_id) { + try { + token = token.substring(7); + Integer id = jwtUtil.getId(token); + friendsService.removeFriend(id,f_id); + return Response.success(ResultCode.SUCCESS); + } catch (Exception e) { + log.error(e.getMessage()); + return Response.fail(ResultCode.SERVER_ERROR); + } + } + + @PostMapping("/nickname") + Response nickname(@RequestHeader("Authorization")String token, @RequestBody Friends friends) { + token = token.substring(7); + Integer id = jwtUtil.getId(token); + if (!id.equals(friends.getId())) return Response.success(ResultCode.SERVER_ERROR); + friendsService.saveOrUpdate(friends); + return Response.success(ResultCode.SUCCESS); + + } + + + +} diff --git a/src/main/java/xin/merlin/myplayerbackend/controller/InvitingController.java b/src/main/java/xin/merlin/myplayerbackend/controller/InvitingController.java new file mode 100644 index 0000000..4953e3b --- /dev/null +++ b/src/main/java/xin/merlin/myplayerbackend/controller/InvitingController.java @@ -0,0 +1,69 @@ +package xin.merlin.myplayerbackend.controller; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; +import xin.merlin.myplayerbackend.entity.Inviting; +import xin.merlin.myplayerbackend.entity.UserInfo; +import xin.merlin.myplayerbackend.service.impl.InvitingServiceImpl; +import xin.merlin.myplayerbackend.utils.JwtUtil; +import xin.merlin.myplayerbackend.utils.result.Response; +import xin.merlin.myplayerbackend.utils.result.ResultCode; + +import java.util.Map; +import java.util.Objects; + +import static com.baomidou.mybatisplus.extension.ddl.DdlScriptErrorHandler.PrintlnLogErrorHandler.log; + +@RequestMapping("/inviting") +@RestController +@RequiredArgsConstructor +public class InvitingController { + + private final InvitingServiceImpl invitingService; + + private final JwtUtil jwtUtil; + + @PostMapping("/friends") + Response requestFriend(@RequestHeader("Authorization")String token, @RequestBody UserInfo userInfo) { + try { + token = token.substring(7); + Integer id = jwtUtil.getId(token); + if (Objects.equals(id, userInfo.getId())) return Response.success(ResultCode.INVITING_ILLEGAL_REQUEST); + if(invitingService.inviting(id,userInfo.getId(),null)) return Response.success(ResultCode.SUCCESS); + return Response.success(ResultCode.INVITING_REQUEST_ERROR); + } catch (Exception e) { + log.error(e.getMessage()); + return Response.fail(ResultCode.SERVER_ERROR); + } + } + + @GetMapping("/friends/get") + Response getFriend(@RequestHeader("Authorization")String token, @RequestParam Integer size, @RequestParam Integer page) { + try { + token = token.substring(7); + Integer id = jwtUtil.getId(token); + return Response.success(ResultCode.SUCCESS, invitingService.getInvitingDetail(id,size,page)); + } catch (Exception e) { + log.error(e.getMessage()); + return Response.fail(ResultCode.SERVER_ERROR); + } + + } + + @PostMapping("/friends/handle") + Response handleFriend(@RequestHeader("Authorization")String token, @RequestBody Inviting inviting) { + try { + token = token.substring(7); + Integer id = jwtUtil.getId(token); + if(!inviting.getTarget().equals(id)) return Response.success(ResultCode.INVITING_ILLEGAL_RESPONSE); + if(!invitingService.handleFriendInviting(inviting)) return Response.success(ResultCode.SERVER_ERROR); + return Response.success(ResultCode.SUCCESS); + } catch (Exception e) { + log.error(e.getMessage()); + return Response.fail(ResultCode.SERVER_ERROR); + } + } + +} diff --git a/src/main/java/xin/merlin/myplayerbackend/controller/UserController.java b/src/main/java/xin/merlin/myplayerbackend/controller/UserController.java index 5c6ec9c..aa27761 100644 --- a/src/main/java/xin/merlin/myplayerbackend/controller/UserController.java +++ b/src/main/java/xin/merlin/myplayerbackend/controller/UserController.java @@ -3,6 +3,7 @@ package xin.merlin.myplayerbackend.controller; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import xin.merlin.myplayerbackend.entity.UserInfo; import xin.merlin.myplayerbackend.service.impl.UserServiceImpl; @@ -10,8 +11,10 @@ import xin.merlin.myplayerbackend.utils.JwtUtil; import xin.merlin.myplayerbackend.utils.result.Response; import xin.merlin.myplayerbackend.utils.result.ResultCode; +import java.util.Map; import java.util.Objects; +@Slf4j @RestController @RequestMapping("/user") @RequiredArgsConstructor @@ -29,17 +32,42 @@ public class UserController { @GetMapping("/info") Response getInfo(@RequestHeader("Authorization")String token){ - token = token.substring(7); - Integer id = jwtUtil.getId(token); - return Response.success(ResultCode.SUCCESS,userService.getOne(Wrappers.lambdaQuery().eq(UserInfo::getId,id))); + try { + token = token.substring(7); + Integer id = jwtUtil.getId(token); + return Response.success(ResultCode.SUCCESS,userService.getOne(Wrappers.lambdaQuery().eq(UserInfo::getId,id))); + } catch (Exception e) { + log.error(e.getMessage()); + return Response.fail(ResultCode.SERVER_ERROR); + } } @PostMapping("/update") Response updateInfo(@RequestHeader("Authorization")String token,@RequestBody UserInfo userinfo){ - if(!consistencyTest(token,userinfo.getId())) return Response.success(ResultCode.USER_ILLEGAL_REQUEST); - userService.updateById(userinfo); - return Response.success(ResultCode.SUCCESS); + try { + if(!consistencyTest(token,userinfo.getId())) return Response.success(ResultCode.USER_ILLEGAL_REQUEST); + userService.updateById(userinfo); + return Response.success(ResultCode.SUCCESS); + } catch (Exception e) { + log.error(e.getMessage(),e); + return Response.fail(ResultCode.SERVER_ERROR); + } + } + + @PostMapping("/search") + Response search(@RequestBody UserInfo userinfo){ + try { + if(userinfo.getU_id()!=null){ + return Response.success(ResultCode.SUCCESS, Map.of("result",userService.searchByUID(userinfo.getU_id()))); + } + else + return Response.success(ResultCode.SUCCESS, Map.of("result",userService.searchByName(userinfo.getU_name()))); + } catch (Exception e) { + log.error(e.getMessage(),e); + return Response.fail(ResultCode.SERVER_ERROR); + } + } } diff --git a/src/main/java/xin/merlin/myplayerbackend/entity/Friends.java b/src/main/java/xin/merlin/myplayerbackend/entity/Friends.java index 3901c33..768b69b 100644 --- a/src/main/java/xin/merlin/myplayerbackend/entity/Friends.java +++ b/src/main/java/xin/merlin/myplayerbackend/entity/Friends.java @@ -2,10 +2,12 @@ package xin.merlin.myplayerbackend.entity; import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; import lombok.Data; @Data @TableName("friends") +@AllArgsConstructor public class Friends { private Integer id; private Integer f_id; diff --git a/src/main/java/xin/merlin/myplayerbackend/entity/Inviting.java b/src/main/java/xin/merlin/myplayerbackend/entity/Inviting.java index 1951629..a20697e 100644 --- a/src/main/java/xin/merlin/myplayerbackend/entity/Inviting.java +++ b/src/main/java/xin/merlin/myplayerbackend/entity/Inviting.java @@ -13,6 +13,7 @@ public class Inviting { private Integer inviter; private Integer target; + // 0 表示未处理 1 表示同意 2 表示拒绝 private Integer status; private Integer room; } diff --git a/src/main/java/xin/merlin/myplayerbackend/entity/http/Friend.java b/src/main/java/xin/merlin/myplayerbackend/entity/http/Friend.java new file mode 100644 index 0000000..33eed4a --- /dev/null +++ b/src/main/java/xin/merlin/myplayerbackend/entity/http/Friend.java @@ -0,0 +1,24 @@ +package xin.merlin.myplayerbackend.entity.http; + +import lombok.Data; +import xin.merlin.myplayerbackend.entity.UserInfo; + +@Data +public class Friend { + + private String u_id; + private Integer id; + private String u_name; + private String u_introduction; + private String u_avatar; + private String nickname; + + public Friend(UserInfo userInfo,String nickname) { + this.id = userInfo.getId(); + this.u_id = userInfo.getU_id(); + this.u_name = userInfo.getU_name(); + this.u_introduction = userInfo.getU_introduction(); + this.u_avatar = userInfo.getU_avatar(); + this.nickname = nickname; + } +} diff --git a/src/main/java/xin/merlin/myplayerbackend/entity/http/InvitingDetails.java b/src/main/java/xin/merlin/myplayerbackend/entity/http/InvitingDetails.java new file mode 100644 index 0000000..42a375a --- /dev/null +++ b/src/main/java/xin/merlin/myplayerbackend/entity/http/InvitingDetails.java @@ -0,0 +1,31 @@ +package xin.merlin.myplayerbackend.entity.http; + +import lombok.Data; +import lombok.NoArgsConstructor; +import xin.merlin.myplayerbackend.entity.Inviting; +import xin.merlin.myplayerbackend.entity.UserInfo; + +@Data +@NoArgsConstructor +public class InvitingDetails { + private Integer i_id; + + private Integer inviter; + private String inviter_name; + private String inviter_avatar; + + private Integer target; + // 0 表示未处理 1 表示已处理 + private Integer status; + private Integer room; + + public InvitingDetails(Inviting inviting, UserInfo userInfo) { + this.i_id = inviting.getI_id(); + this.inviter = inviting.getInviter(); + this.target = inviting.getTarget(); + this.status = inviting.getStatus(); + this.room = inviting.getRoom(); + this.inviter_name = userInfo.getU_name(); + this.inviter_avatar = userInfo.getU_avatar(); + } +} diff --git a/src/main/java/xin/merlin/myplayerbackend/service/LoginService.java b/src/main/java/xin/merlin/myplayerbackend/service/LoginService.java index e064df0..9b89b5c 100644 --- a/src/main/java/xin/merlin/myplayerbackend/service/LoginService.java +++ b/src/main/java/xin/merlin/myplayerbackend/service/LoginService.java @@ -69,9 +69,9 @@ public class LoginService{ u.setU_id(RandomCode.generateID()); }while (userMapper.selectById(u.getU_id())!=null); userMapper.insert(u); - u = userMapper.selectById(u.getId()); + u = userMapper.selectById(u.getU_id()); codeService.getWaitingList().invalidate(code.getC_id()); - return Response.success(ResultCode.SUCCESS,Map.of("token",jwtUtil.generateToken(account),"userinfo",u)); + return Response.success(ResultCode.SUCCESS,Map.of("token",jwtUtil.generateToken(account),"token_type","Bearer","userinfo",u)); } return response; } catch (Exception e) { diff --git a/src/main/java/xin/merlin/myplayerbackend/service/impl/FriendsServiceImpl.java b/src/main/java/xin/merlin/myplayerbackend/service/impl/FriendsServiceImpl.java index 4059927..dc8ff0e 100644 --- a/src/main/java/xin/merlin/myplayerbackend/service/impl/FriendsServiceImpl.java +++ b/src/main/java/xin/merlin/myplayerbackend/service/impl/FriendsServiceImpl.java @@ -1,10 +1,47 @@ 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.UserInfo; +import xin.merlin.myplayerbackend.entity.http.Friend; import xin.merlin.myplayerbackend.mapper.FriendsMapper; +import xin.merlin.myplayerbackend.mapper.UserMapper; + +import java.util.ArrayList; +import java.util.List; @Service +@RequiredArgsConstructor public class FriendsServiceImpl extends ServiceImpl { + + private final FriendsMapper friendsMapper; + + private final UserMapper userMapper; + + public List getFriends(Integer id, Integer size, Integer page) { + + List friends = friendsMapper.selectList(new Page<>(page,size),Wrappers.lambdaQuery().eq(Friends::getId, id)); + List fs = new ArrayList<>(); + for (Friends f : friends) { + + fs.add(new Friend(userMapper.selectOne(Wrappers.lambdaQuery().eq(UserInfo::getId,f.getF_id())),f.getNickname())); + } + + return fs; + } + + @Transactional + public void removeFriend(Integer id, Integer f_id) { + try { + friendsMapper.delete(Wrappers.lambdaQuery().eq(Friends::getF_id,f_id).eq(Friends::getId,id)); + friendsMapper.delete(Wrappers.lambdaQuery().eq(Friends::getF_id,id).eq(Friends::getId,f_id)); + } catch (Exception e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/xin/merlin/myplayerbackend/service/impl/InvitingServiceImpl.java b/src/main/java/xin/merlin/myplayerbackend/service/impl/InvitingServiceImpl.java index 0ba2fa9..7283c31 100644 --- a/src/main/java/xin/merlin/myplayerbackend/service/impl/InvitingServiceImpl.java +++ b/src/main/java/xin/merlin/myplayerbackend/service/impl/InvitingServiceImpl.java @@ -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 { + + 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.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 getInvitingDetail(Integer target, Integer size, Integer page){ + List invitings = invitingMapper.selectList(new Page(page,size), Wrappers.lambdaQuery().eq(Inviting::getTarget,target)); + List invitingDetails = new ArrayList<>(); + for (Inviting inviting : invitings){ + InvitingDetails invitingDetail = new InvitingDetails(inviting, + userMapper.selectOne(Wrappers.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); + } + + } } diff --git a/src/main/java/xin/merlin/myplayerbackend/service/impl/UserServiceImpl.java b/src/main/java/xin/merlin/myplayerbackend/service/impl/UserServiceImpl.java index f352620..42f0c64 100644 --- a/src/main/java/xin/merlin/myplayerbackend/service/impl/UserServiceImpl.java +++ b/src/main/java/xin/merlin/myplayerbackend/service/impl/UserServiceImpl.java @@ -1,10 +1,26 @@ 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 xin.merlin.myplayerbackend.entity.UserInfo; import xin.merlin.myplayerbackend.mapper.UserMapper; @Service +@RequiredArgsConstructor public class UserServiceImpl extends ServiceImpl { + + private final UserMapper userMapper; + + public Object searchByUID(String u_id) { + Page page = new Page<>(1, 5); + return userMapper.selectList(page,Wrappers.lambdaQuery().like(UserInfo::getU_id, u_id)); + } + + public Object searchByName(String u_name) { + Page page = new Page<>(1, 5); + return userMapper.selectList(page,Wrappers.lambdaQuery().like(UserInfo::getU_name, u_name)); + } } diff --git a/src/main/java/xin/merlin/myplayerbackend/utils/JwtUtil.java b/src/main/java/xin/merlin/myplayerbackend/utils/JwtUtil.java index bfea6d3..3f20694 100644 --- a/src/main/java/xin/merlin/myplayerbackend/utils/JwtUtil.java +++ b/src/main/java/xin/merlin/myplayerbackend/utils/JwtUtil.java @@ -76,7 +76,7 @@ public class JwtUtil { private Claims getClaims(String token) { try { Jws jws = jwtParser.parseSignedClaims(token); - System.out.println(jws.getPayload()); +// System.out.println(jws.getPayload()); return jws.getPayload(); } catch (ExpiredJwtException e) { throw new TokenExpiredException("Token 已过期", e); diff --git a/src/main/java/xin/merlin/myplayerbackend/utils/result/ResultCode.java b/src/main/java/xin/merlin/myplayerbackend/utils/result/ResultCode.java index bf94157..2d2fdcb 100644 --- a/src/main/java/xin/merlin/myplayerbackend/utils/result/ResultCode.java +++ b/src/main/java/xin/merlin/myplayerbackend/utils/result/ResultCode.java @@ -45,7 +45,13 @@ public enum ResultCode { MAIL_VERIFY_CODE_ERROR("4106","验证码错误,请重新输入"), //审核相关 - AUDIT_NO_RECORD("4201","无审核记录条目"); + AUDIT_NO_RECORD("4201","无审核记录条目"), + + //邀请相关 + INVITING_REQUEST_ERROR("4301","邀请请求错误"), + INVITING_ILLEGAL_REQUEST("4302","非法邀请"), + INVITING_ILLEGAL_RESPONSE("4303","非法邀请"); +