From 5a0c6f530b22407ca63c147a8fa1a94523c1d30b Mon Sep 17 00:00:00 2001 From: wzp Date: Wed, 25 Dec 2024 16:38:18 +0800 Subject: [PATCH] feat: add club user api --- .../blue/club/controller/ClubController.java | 13 ++++-- .../org/blue/club/dao/ClubUserAuthDao.java | 9 ++++ .../org/blue/club/services/ClubServices.java | 46 +++++++++++++++++++ 3 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/blue/club/dao/ClubUserAuthDao.java diff --git a/src/main/java/org/blue/club/controller/ClubController.java b/src/main/java/org/blue/club/controller/ClubController.java index 0d8d143..265053d 100644 --- a/src/main/java/org/blue/club/controller/ClubController.java +++ b/src/main/java/org/blue/club/controller/ClubController.java @@ -7,7 +7,9 @@ import lombok.RequiredArgsConstructor; import org.blue.club.annotation.Auth; import org.blue.club.annotation.DescriptionType; import org.blue.club.annotation.PermissionDescription; +import org.blue.club.entities.dto.club.req.ClubAddUserRequest; import org.blue.club.entities.dto.club.req.CreateClubRequest; +import org.blue.club.entities.dto.user.User; import org.blue.club.entities.vo.data.ClubVo; import org.blue.club.services.ClubServices; import org.mmga.spring.boot.starter.entities.PagerData; @@ -36,8 +38,13 @@ public class ClubController { @Operation(description = "向社团添加用户") @PutMapping("/user/add") - @Auth(permissions = {@PermissionDescription(3), @PermissionDescription(value = 2, type = DescriptionType.CLUB)}) - public Result addUserToClub() { - return Result.failed(); + public Result clubAddUser(@Auth(permissions = {@PermissionDescription(3), @PermissionDescription(value = 2, type = DescriptionType.CLUB)}) User user, @RequestBody ClubAddUserRequest request) { + return clubServices.clubAddUser(user, request); + } + + @Operation(description = "分页列出社团的所有用户") + @GetMapping("/user/list") + public Result> clubGetUsers(@Schema(description = "分页数据第几页") @RequestParam Integer page, @Schema(description = "分页数据每页数据量") @RequestParam Integer num, @Schema(description = "社团ID") @RequestParam Long clubId) { + return clubServices.clubGetUsers(page, num, clubId); } } diff --git a/src/main/java/org/blue/club/dao/ClubUserAuthDao.java b/src/main/java/org/blue/club/dao/ClubUserAuthDao.java new file mode 100644 index 0000000..bd79261 --- /dev/null +++ b/src/main/java/org/blue/club/dao/ClubUserAuthDao.java @@ -0,0 +1,9 @@ +package org.blue.club.dao; + +import com.mybatisflex.core.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.blue.club.entities.vo.data.ClubUserAuthVo; + +@Mapper +public interface ClubUserAuthDao extends BaseMapper { +} diff --git a/src/main/java/org/blue/club/services/ClubServices.java b/src/main/java/org/blue/club/services/ClubServices.java index ae5d3a1..3627cdd 100644 --- a/src/main/java/org/blue/club/services/ClubServices.java +++ b/src/main/java/org/blue/club/services/ClubServices.java @@ -5,20 +5,37 @@ import com.mybatisflex.core.query.QueryCondition; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.blue.club.dao.ClubDao; +import org.blue.club.dao.ClubUserAuthDao; +import org.blue.club.dao.UserDao; +import org.blue.club.entities.dto.club.req.ClubAddUserRequest; import org.blue.club.entities.dto.club.req.CreateClubRequest; +import org.blue.club.entities.dto.user.User; +import org.blue.club.entities.vo.data.ClubUserAuthVo; import org.blue.club.entities.vo.data.ClubVo; +import org.blue.club.entities.vo.data.UserVo; import org.mmga.spring.boot.starter.entities.PagerData; import org.mmga.spring.boot.starter.entities.Result; +import org.mmga.spring.boot.starter.exception.AuthorizationException; +import org.mmga.spring.boot.starter.utils.VoUtils; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.List; + +import static com.mybatisflex.core.query.QueryMethods.select; +import static org.blue.club.entities.vo.data.table.ClubUserAuthVoTableDef.CLUB_USER_AUTH_VO; import static org.blue.club.entities.vo.data.table.ClubVoTableDef.CLUB_VO; +import static org.blue.club.entities.vo.data.table.UserVoTableDef.USER_VO; @Service @RequiredArgsConstructor @Slf4j public class ClubServices { private final ClubDao clubDao; + private final ClubUserAuthDao clubUserAuthDao; + private final UserDao userDao; + private final VoUtils voUtils; public Result> getClubs(Integer page, Integer num) { Page data = clubDao.paginate(page, num, QueryCondition.createEmpty()); @@ -32,4 +49,33 @@ public class ClubServices { clubVo.setName(request.name()); return Result.success(clubVo); } + + @Transactional + public Result clubAddUser(User user, ClubAddUserRequest request) { + long requestClubId = request.clubId(); + long userClubId = user.getClub().getId(); + if (userClubId != requestClubId && !user.hasPermission(3)) + throw new AuthorizationException(Result.failed(HttpStatus.FORBIDDEN, "权限不足!")); + long userClubAuthId = user.getClubAuth().getId(); + long requestClubAuthId = request.clubAuthId(); + if (requestClubAuthId >= userClubAuthId && !user.hasPermission(3)) + throw new AuthorizationException(Result.failed(HttpStatus.FORBIDDEN, "权限不足!")); + long requestUserId = request.userId(); + if (clubUserAuthDao.selectCountByCondition(CLUB_USER_AUTH_VO.USER_ID.eq(requestUserId)) > 0) + return Result.failed(HttpStatus.CONFLICT, "此用户已在社团中"); + ClubUserAuthVo clubUserAuthVo = new ClubUserAuthVo(); + clubUserAuthVo.setClubId(requestClubId); + clubUserAuthVo.setUserId(requestUserId); + clubUserAuthVo.setAuthId(requestClubAuthId); + clubUserAuthDao.insert(clubUserAuthVo); + return Result.success(true); + } + + public Result> clubGetUsers(Integer page, Integer num, Long clubId) { + if (clubDao.selectCountByCondition(CLUB_VO.ID.eq(clubId)) == 0) + return Result.failed(HttpStatus.NOT_FOUND, "社团不存在!"); + Page paginate = clubUserAuthDao.paginate(page, num, select(CLUB_USER_AUTH_VO.ALL_COLUMNS).where(CLUB_USER_AUTH_VO.CLUB_ID.eq(clubId)).orderBy(CLUB_USER_AUTH_VO.AUTH_ID.desc(), CLUB_USER_AUTH_VO.USER_ID.desc())); + List userVos = userDao.selectListWithRelationsByQuery(select(USER_VO.ALL_COLUMNS).from(USER_VO).where(USER_VO.ID.in(paginate.getRecords().stream().map(ClubUserAuthVo::getUserId).toList()))); + return Result.success(new PagerData<>(paginate.getTotalRow(), userVos.stream().map(e -> voUtils.vo2DtoSafe(e, User.class)).toList())); + } }