diff --git a/src/main/java/com/steadon/saber/biz/IGroupBiz.java b/src/main/java/com/steadon/saber/biz/IGroupBiz.java new file mode 100644 index 0000000000000000000000000000000000000000..1d6d4062df45fae197b5dc978ab0bdcd9ad2ec91 --- /dev/null +++ b/src/main/java/com/steadon/saber/biz/IGroupBiz.java @@ -0,0 +1,15 @@ +package com.steadon.saber.biz; + +import com.steadon.saber.pojo.SaberResponse; +import com.steadon.saber.pojo.domain.Group; +import com.steadon.saber.pojo.model.GroupRequest; +import com.steadon.saber.pojo.model.GroupSearchRequest; +import com.steadon.saber.pojo.model.pageData.PageData; + +public interface IGroupBiz { + SaberResponse<PageData<Group>> getGroupBatch(Integer pageNo, Integer pageSize); + + SaberResponse<PageData<Group>> searchGroup(GroupSearchRequest request, Integer pageNo, Integer pageSize); + + SaberResponse<String> updateGroup(Integer gid, GroupRequest request); +} diff --git a/src/main/java/com/steadon/saber/biz/impl/GroupBiz.java b/src/main/java/com/steadon/saber/biz/impl/GroupBiz.java new file mode 100644 index 0000000000000000000000000000000000000000..140f7ebab7e267c9772d20f1a396398e7890dac8 --- /dev/null +++ b/src/main/java/com/steadon/saber/biz/impl/GroupBiz.java @@ -0,0 +1,41 @@ +package com.steadon.saber.biz.impl; + +import com.steadon.saber.biz.IGroupBiz; +import com.steadon.saber.pojo.SaberResponse; +import com.steadon.saber.pojo.domain.Group; +import com.steadon.saber.pojo.model.GroupRequest; +import com.steadon.saber.pojo.model.GroupSearchRequest; +import com.steadon.saber.pojo.model.pageData.PageData; +import com.steadon.saber.service.UserGroupService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class GroupBiz implements IGroupBiz { + + private UserGroupService userGroupService; + + @Override + public SaberResponse<PageData<Group>> getGroupBatch(Integer pageNo, Integer pageSize) { + PageData<Group> groupPageData = userGroupService.getGroupBatch(pageNo, pageSize); + return SaberResponse.success(groupPageData); + } + + @Override + public SaberResponse<PageData<Group>> searchGroup(GroupSearchRequest request, Integer pageNo, Integer pageSize) { + PageData<Group> groupPageData = userGroupService.searchGroup(request.getKeyword(), pageNo, pageSize); + return SaberResponse.success(groupPageData); + } + + @Override + public SaberResponse<String> updateGroup(Integer gid, GroupRequest request) { + Group group = new Group(); + group.setId(gid); + group.loadDataFromReq(request); + group.updateStatus(); + + userGroupService.updateGroup(group); + return SaberResponse.success(); + } +} diff --git a/src/main/java/com/steadon/saber/controller/GroupController.java b/src/main/java/com/steadon/saber/controller/GroupController.java new file mode 100644 index 0000000000000000000000000000000000000000..b79dd68612fed8c6fa5efc517bc2926ce01d1ae8 --- /dev/null +++ b/src/main/java/com/steadon/saber/controller/GroupController.java @@ -0,0 +1,37 @@ +package com.steadon.saber.controller; + +import com.steadon.saber.biz.IGroupBiz; +import com.steadon.saber.pojo.SaberResponse; +import com.steadon.saber.pojo.domain.Group; +import com.steadon.saber.pojo.model.GroupRequest; +import com.steadon.saber.pojo.model.GroupSearchRequest; +import com.steadon.saber.pojo.model.pageData.PageData; +import lombok.AllArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +@RestController +@AllArgsConstructor +@RequestMapping("/saber") +public class GroupController { + + private IGroupBiz iGroupBiz; + + @GetMapping("/group/list") + public SaberResponse<PageData<Group>> showGroup(@RequestParam(value = "page_no", required = false, defaultValue = "1") Integer pageNo, + @RequestParam(value = "page_size", required = false, defaultValue = "10") Integer pageSize){ + return iGroupBiz.getGroupBatch(pageNo, pageSize); + } + + @GetMapping("/group/search") + public SaberResponse<PageData<Group>> searchGroup(@Validated @RequestBody GroupSearchRequest request, + @RequestParam(value = "page_no", required = false, defaultValue = "1") Integer pageNo, + @RequestParam(value = "page_size", required = false, defaultValue = "10") Integer pageSize){ + return iGroupBiz.searchGroup(request, pageNo, pageSize); + } + @PostMapping("/group/update") + public SaberResponse<String> updateGroup(@RequestParam(value = "gid") Integer gid, + @Validated @RequestBody GroupRequest request){ + return iGroupBiz.updateGroup(gid, request); + } +} diff --git a/src/main/java/com/steadon/saber/pojo/domain/Group.java b/src/main/java/com/steadon/saber/pojo/domain/Group.java index 3e763a6e7b6fae9c55bc9abab3196f038e815ea1..7745860ab767a3d2cb1da0db3a8d907514deed53 100644 --- a/src/main/java/com/steadon/saber/pojo/domain/Group.java +++ b/src/main/java/com/steadon/saber/pojo/domain/Group.java @@ -2,6 +2,7 @@ package com.steadon.saber.pojo.domain; import com.baomidou.mybatisplus.annotation.*; import com.steadon.saber.handler.token.TokenHandler; +import com.steadon.saber.pojo.model.GroupRequest; import lombok.Data; import java.io.Serial; @@ -58,4 +59,8 @@ public class Group implements Serializable { this.updateBy = TokenHandler.getUsername(); this.updateTime = LocalDateTime.now(); } + + public void loadDataFromReq(GroupRequest request) { + this.name = request.getName(); + } } diff --git a/src/main/java/com/steadon/saber/pojo/model/GroupRequest.java b/src/main/java/com/steadon/saber/pojo/model/GroupRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..7a106290c4e7c892bdd1db215cd367d8095a2008 --- /dev/null +++ b/src/main/java/com/steadon/saber/pojo/model/GroupRequest.java @@ -0,0 +1,8 @@ +package com.steadon.saber.pojo.model; + +import lombok.Data; + +@Data +public class GroupRequest { + private String name; +} \ No newline at end of file diff --git a/src/main/java/com/steadon/saber/pojo/model/GroupSearchRequest.java b/src/main/java/com/steadon/saber/pojo/model/GroupSearchRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..94506b2cf5a65fba6797e0c1cc9a2d6d86fa8561 --- /dev/null +++ b/src/main/java/com/steadon/saber/pojo/model/GroupSearchRequest.java @@ -0,0 +1,8 @@ +package com.steadon.saber.pojo.model; + +import lombok.Data; + +@Data +public class GroupSearchRequest { + private String keyword; +} diff --git a/src/main/java/com/steadon/saber/service/UserGroupService.java b/src/main/java/com/steadon/saber/service/UserGroupService.java index e0c849721e30277bddcc1d0764c81eccb7568b19..13b17e00854c276a158de7615ed6b908d83f8665 100644 --- a/src/main/java/com/steadon/saber/service/UserGroupService.java +++ b/src/main/java/com/steadon/saber/service/UserGroupService.java @@ -1,6 +1,8 @@ package com.steadon.saber.service; +import com.steadon.saber.pojo.domain.Group; import com.steadon.saber.pojo.domain.UserInfo; +import com.steadon.saber.pojo.model.GroupSearchRequest; import com.steadon.saber.pojo.model.UserInfoRequest; import com.steadon.saber.pojo.model.pageData.PageData; @@ -16,4 +18,10 @@ public interface UserGroupService { PageData<UserInfo> getInfoBatch(Integer pageNo, Integer pageSize); PageData<UserInfo> searchUserInfo(String keyword, Integer pageNo, Integer pageSize); + + PageData<Group> getGroupBatch(Integer pageNo, Integer pageSize); + + PageData<Group> searchGroup(String keyword, Integer pageNo, Integer pageSize); + + void updateGroup(Group group); } \ No newline at end of file diff --git a/src/main/java/com/steadon/saber/service/impl/UserGroupServiceImpl.java b/src/main/java/com/steadon/saber/service/impl/UserGroupServiceImpl.java index b44dfbe765592749a5bd9c43b48e7603cade1f6a..463ed9d6a169bfc26272e5da32e19725d3564ff5 100644 --- a/src/main/java/com/steadon/saber/service/impl/UserGroupServiceImpl.java +++ b/src/main/java/com/steadon/saber/service/impl/UserGroupServiceImpl.java @@ -66,6 +66,36 @@ public class UserGroupServiceImpl implements UserGroupService { return userInfoPageData; } + @Override + public PageData<Group> getGroupBatch(Integer pageNo, Integer pageSize) { + Page<Group> page = new Page<>(pageNo, pageSize); + Page<Group> groupPage = groupMapper.selectPage(page, null); + + PageData<Group> groupPageData = new PageData<>(); + groupPageData.praiseIPage(groupPage); + return groupPageData; + } + + @Override + public PageData<Group> searchGroup(String keyword, Integer pageNo, Integer pageSize) { + QueryWrapper<Group> wrapper = new QueryWrapper<Group>().like("name", keyword); + + Page<Group> page = new Page<>(pageNo, pageSize); + Page<Group> groupPage = groupMapper.selectPage(page, wrapper); + + PageData<Group> groupPageData = new PageData<>(); + groupPageData.praiseIPage(groupPage); + return groupPageData; + } + + @Override + @Retryable(retryFor = OptimisticLockingFailureException.class) + public void updateGroup(Group group) { + if (groupMapper.updateById(group) == 0){ + throw new OptimisticLockingFailureException("Optimistic locking failed"); + } + } + @Override @Retryable(retryFor = OptimisticLockingFailureException.class) @Transactional(noRollbackFor = OptimisticLockingFailureException.class)