feat: group related logic refactor
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
package xin.merlin.myplayerbackend.controller;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import xin.merlin.myplayerbackend.entity.GroupInfo;
|
||||
import xin.merlin.myplayerbackend.entity.Groups;
|
||||
import xin.merlin.myplayerbackend.entity.Playrooms;
|
||||
import xin.merlin.myplayerbackend.entity.UserInfo;
|
||||
import xin.merlin.myplayerbackend.service.impl.GroupServiceImpl;
|
||||
import xin.merlin.myplayerbackend.service.impl.GroupsServiceImpl;
|
||||
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;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/group")
|
||||
@RequiredArgsConstructor
|
||||
public class GroupController {
|
||||
|
||||
private final GroupServiceImpl groupService;
|
||||
|
||||
private final GroupsServiceImpl groupsService;
|
||||
|
||||
private final JwtUtil jwtUtil;
|
||||
|
||||
private Boolean isAdmin(Integer id,Integer g_id){
|
||||
return groupsService.groupIsAdmin(id,g_id)==0;
|
||||
}
|
||||
|
||||
@PostMapping("/create")
|
||||
Response createGroup(@RequestHeader("Authorization")String token, @RequestBody GroupInfo groupInfo){
|
||||
try {
|
||||
token = token.substring(7);
|
||||
Integer id = jwtUtil.getId(token);
|
||||
return Response.success(ResultCode.SUCCESS, groupService.createGroup(id,groupInfo));
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
return Response.fail(ResultCode.SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
Response getGroup(@RequestHeader("Authorization")String token){
|
||||
try {
|
||||
token = token.substring(7);
|
||||
Integer id = jwtUtil.getId(token);
|
||||
return Response.success(ResultCode.SUCCESS,groupService.getGroups(id));
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
return Response.fail(ResultCode.SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/search")
|
||||
Response searchGroup(@RequestHeader("Authorization")String token, @RequestBody GroupInfo groupInfo){
|
||||
// TODO:视情况开放api参数currentPage和 pageSize
|
||||
try {
|
||||
Integer currentPage = 1;
|
||||
Integer pageSize = 10;
|
||||
return Response.success(ResultCode.SUCCESS,groupService.searchGroups(groupInfo,currentPage,pageSize));
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
return Response.fail(ResultCode.SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
// 主动加入群聊
|
||||
@GetMapping("/join/{g_id}")
|
||||
Response joinGroup(@RequestHeader("Authorization")String token, @PathVariable Integer g_id){
|
||||
try {
|
||||
token = token.substring(7);
|
||||
Integer id = jwtUtil.getId(token);
|
||||
if(!groupService.joinGroup(id,g_id)) return Response.success(ResultCode.GROUP_USER_EXISTED);
|
||||
return Response.success(ResultCode.SUCCESS);
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
return Response.fail(ResultCode.SERVER_ERROR);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@PostMapping("/join/{g_id}")
|
||||
Response joinGroup(@PathVariable Integer g_id,@RequestBody UserInfo userInfo){
|
||||
try {
|
||||
if(!groupService.joinGroup(userInfo.getId(),g_id)) return Response.success(ResultCode.GROUP_USER_EXISTED);
|
||||
return Response.success(ResultCode.SUCCESS);
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
return Response.fail(ResultCode.SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@GetMapping("/leave/{g_id}")
|
||||
Response leaveGroup(@RequestHeader("Authorization")String token, @PathVariable Integer g_id){
|
||||
try {
|
||||
token = token.substring(7);
|
||||
Integer id = jwtUtil.getId(token);
|
||||
if(!groupService.leaveGroup(id,g_id)) return Response.success(ResultCode.GROUP_USER_NOT_EXISTED);
|
||||
return Response.success(ResultCode.SUCCESS);
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
return Response.fail(ResultCode.SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/leave/{g_id}")
|
||||
Response leaveGroup(@RequestHeader("Authorization")String token,@PathVariable Integer g_id,@RequestBody UserInfo userInfo){
|
||||
try {
|
||||
token = token.substring(7);
|
||||
Integer id = jwtUtil.getId(token);
|
||||
if(!isAdmin(id,g_id)) return Response.success(ResultCode.ACCOUNT_PERMISSION_DENY);
|
||||
if(!groupService.leaveGroup(id,g_id)) return Response.success(ResultCode.GROUP_USER_NOT_EXISTED);
|
||||
return Response.success(ResultCode.SUCCESS);
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
return Response.fail(ResultCode.SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/update")
|
||||
Response updatePlayroom(@RequestHeader("Authorization")String token, @RequestBody GroupInfo groupInfo) {
|
||||
try {
|
||||
token = token.substring(7);
|
||||
Integer id = jwtUtil.getId(token);
|
||||
if(!isAdmin(id,groupInfo.getG_id())) return Response.success(ResultCode.ACCOUNT_PERMISSION_DENY);
|
||||
groupService.updateById(groupInfo);
|
||||
return Response.success(ResultCode.SUCCESS);
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
return Response.fail(ResultCode.SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/delete")
|
||||
Response deletePlayroom(@RequestHeader("Authorization")String token, @RequestBody GroupInfo groupInfo) {
|
||||
try {
|
||||
token = token.substring(7);
|
||||
Integer id = jwtUtil.getId(token);
|
||||
if(!isAdmin(id,groupInfo.getG_id())) return Response.success(ResultCode.ACCOUNT_PERMISSION_DENY);
|
||||
return Response.success(ResultCode.SUCCESS,groupService.deletePlayroom(groupInfo));
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
return Response.fail(ResultCode.SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@GetMapping("/member/{g_id}")
|
||||
Response getMember(@PathVariable("g_id")Integer g_id,@RequestParam Integer currentPage,@RequestParam Integer pageSize){
|
||||
try {
|
||||
return Response.success(ResultCode.SUCCESS,groupService.getMember(g_id,currentPage,pageSize));
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
return Response.fail(ResultCode.SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/member/delete/{g_id}")
|
||||
Response deleteMember(@RequestHeader("Authorization")String token, @PathVariable("g_id")Integer g_id, @RequestBody UserInfo userInfo){
|
||||
try {
|
||||
token = token.substring(7);
|
||||
Integer id = jwtUtil.getId(token);
|
||||
if(!isAdmin(id,g_id)) return Response.success(ResultCode.ACCOUNT_PERMISSION_DENY);
|
||||
groupsService.remove(Wrappers.<Groups>lambdaQuery().eq(Groups::getG_id,g_id).eq(Groups::getId,userInfo.getId()));
|
||||
return Response.success(ResultCode.SUCCESS);
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
return Response.fail(ResultCode.SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,14 @@
|
||||
package xin.merlin.myplayerbackend.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@TableName("groups")
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class Groups {
|
||||
private Integer g_id;
|
||||
private Integer id;
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package xin.merlin.myplayerbackend.entity.http;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import xin.merlin.myplayerbackend.entity.GroupInfo;
|
||||
import xin.merlin.myplayerbackend.entity.Groups;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
public class GroupDetails {
|
||||
private Integer g_id;
|
||||
private String g_name;
|
||||
private String g_introduction;
|
||||
private String g_avatar;
|
||||
private Integer id;
|
||||
private Integer role;
|
||||
|
||||
public GroupDetails(GroupInfo groupInfo, Groups groups) {
|
||||
this.g_id = groupInfo.getG_id();
|
||||
this.g_name = groupInfo.getG_name();
|
||||
this.g_introduction = groupInfo.getG_introduction();
|
||||
this.g_avatar = groupInfo.getG_avatar();
|
||||
this.id = groups.getId();
|
||||
this.role = groups.getRole();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,10 +1,118 @@
|
||||
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.GroupInfo;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import xin.merlin.myplayerbackend.entity.*;
|
||||
import xin.merlin.myplayerbackend.entity.http.GroupDetails;
|
||||
import xin.merlin.myplayerbackend.entity.http.PlayroomDetails;
|
||||
import xin.merlin.myplayerbackend.mapper.GroupMapper;
|
||||
import xin.merlin.myplayerbackend.mapper.GroupsMapper;
|
||||
import xin.merlin.myplayerbackend.mapper.UserMapper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class GroupServiceImpl extends ServiceImpl<GroupMapper, GroupInfo> {
|
||||
|
||||
private final UserMapper userMapper;
|
||||
|
||||
private final GroupMapper groupMapper;
|
||||
|
||||
private final GroupsMapper groupsMapper;
|
||||
|
||||
@Transactional
|
||||
public GroupInfo createGroup(Integer id, GroupInfo groupInfo) {
|
||||
try {
|
||||
groupMapper.insert(groupInfo);
|
||||
groupsMapper.insert(new Groups(groupInfo.getG_id(),id,0));
|
||||
return groupInfo;
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: 优化点:使用xml语句写关联查询
|
||||
public List<GroupDetails> getGroups(Integer id) {
|
||||
try {
|
||||
List<Groups> groups = groupsMapper.selectList(Wrappers.<Groups>lambdaQuery().eq(Groups::getId,id));
|
||||
// System.out.println(groups);
|
||||
List<GroupDetails> groupDetails = new ArrayList<>();
|
||||
for (Groups group : groups) {
|
||||
groupDetails.add(new GroupDetails(groupMapper.selectById(group.getG_id()),group));
|
||||
}
|
||||
return groupDetails;
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public Page<GroupInfo> searchGroups(GroupInfo groupInfo, Integer currentPage, Integer pageSize) {
|
||||
try {
|
||||
return groupMapper.selectPage(new Page<>(currentPage,pageSize),Wrappers.<GroupInfo>lambdaQuery().like(GroupInfo::getG_name,groupInfo.getG_name()));
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public Integer deletePlayroom(GroupInfo groupInfo) {
|
||||
try {
|
||||
groupsMapper.delete(Wrappers.<Groups>lambdaQuery().eq(Groups::getG_id,groupInfo.getG_id()));
|
||||
return groupMapper.deleteById(groupInfo.getG_id());
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public List<UserInfo> getMember(Integer g_id, Integer currentPage, Integer pageSize) {
|
||||
try {
|
||||
List<Groups> ids = groupsMapper.selectPage(new Page<>(currentPage,pageSize),Wrappers.<Groups>lambdaQuery().eq(Groups::getG_id,g_id)).getRecords();
|
||||
List<UserInfo> members = new ArrayList<>();
|
||||
for(Groups group:ids){
|
||||
members.add(userMapper.selectById(group.getId()));
|
||||
}
|
||||
return members;
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public Boolean joinGroup(Integer id, Integer g_id) {
|
||||
try {
|
||||
if(groupsMapper.selectOne(Wrappers.<Groups>lambdaQuery().eq(Groups::getG_id,g_id).eq(Groups::getId,id))!=null) return false;
|
||||
else {
|
||||
groupsMapper.insert(new Groups(g_id,id,1));
|
||||
return true;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public Boolean leaveGroup(Integer id, Integer g_id) {
|
||||
try {
|
||||
if(groupsMapper.selectOne(Wrappers.<Groups>lambdaQuery().eq(Groups::getG_id,g_id).eq(Groups::getId,id))==null) return false;
|
||||
else {
|
||||
groupsMapper.delete(Wrappers.<Groups>lambdaQuery().eq(Groups::getG_id,g_id).eq(Groups::getId,id));
|
||||
return true;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,10 +1,26 @@
|
||||
package xin.merlin.myplayerbackend.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import xin.merlin.myplayerbackend.entity.Groups;
|
||||
import xin.merlin.myplayerbackend.mapper.GroupsMapper;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class GroupsServiceImpl extends ServiceImpl<GroupsMapper, Groups> {
|
||||
|
||||
private final GroupsMapper groupsMapper;
|
||||
|
||||
public Integer groupIsAdmin(Integer id, Integer g_id) {
|
||||
try {
|
||||
Groups groups = groupsMapper.selectOne(Wrappers.<Groups>lambdaQuery().eq(Groups::getId,id).eq(Groups::getG_id,g_id));
|
||||
if (groups == null) return 1;
|
||||
else return groups.getRole();
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +43,8 @@ public class PlayroomServiceImpl extends ServiceImpl<PlayroomMapper, PlayroomInf
|
||||
// TODO: 优化点:使用xml语句写关联查询
|
||||
public List<PlayroomDetails> getPlayrooms(Integer id) {
|
||||
try {
|
||||
List<Playrooms> playrooms = playroomsMapper.selectObjs(Wrappers.<Playrooms>lambdaQuery().eq(Playrooms::getId,id));
|
||||
List<Playrooms> playrooms = playroomsMapper.selectList(Wrappers.<Playrooms>lambdaQuery().eq(Playrooms::getId,id));
|
||||
// System.out.println(playrooms);
|
||||
List<PlayroomDetails> playroomDetails = new ArrayList<>();
|
||||
for (Playrooms playroom : playrooms) {
|
||||
playroomDetails.add(new PlayroomDetails(playroomMapper.selectById(playroom.getR_id()),playroom));
|
||||
@@ -68,7 +69,8 @@ public class PlayroomServiceImpl extends ServiceImpl<PlayroomMapper, PlayroomInf
|
||||
@Transactional
|
||||
public Integer deletePlayroom(PlayroomInfo playroomInfo) {
|
||||
try {
|
||||
return playroomsMapper.delete(Wrappers.<Playrooms>lambdaQuery().eq(Playrooms::getR_id,playroomInfo.getR_id()));
|
||||
playroomsMapper.delete(Wrappers.<Playrooms>lambdaQuery().eq(Playrooms::getR_id,playroomInfo.getR_id()));
|
||||
return playroomMapper.deleteById(playroomInfo.getR_id());
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
|
||||
@@ -52,7 +52,12 @@ public enum ResultCode {
|
||||
INVITING_ILLEGAL_REQUEST("4302","非法邀请"),
|
||||
INVITING_ILLEGAL_RESPONSE("4303","非法邀请"),
|
||||
INVITING_RE_REQUEST("4304","重复请求"),
|
||||
INVITING_AUTH_ERROR("4305","权限错误");
|
||||
INVITING_AUTH_ERROR("4305","权限错误"),
|
||||
|
||||
//群组相关
|
||||
GROUP_USER_EXISTED("4401","用户已加入群组"),
|
||||
GROUP_USER_NOT_EXISTED("4402","用户不在群组")
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user