feat: add club user api

This commit is contained in:
wzp 2024-12-25 16:38:18 +08:00
parent 744a32b477
commit 5a0c6f530b
3 changed files with 65 additions and 3 deletions

View File

@ -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<Boolean> addUserToClub() {
return Result.failed();
public Result<Boolean> 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<PagerData<User>> clubGetUsers(@Schema(description = "分页数据第几页") @RequestParam Integer page, @Schema(description = "分页数据每页数据量") @RequestParam Integer num, @Schema(description = "社团ID") @RequestParam Long clubId) {
return clubServices.clubGetUsers(page, num, clubId);
}
}

View File

@ -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<ClubUserAuthVo> {
}

View File

@ -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<PagerData<ClubVo>> getClubs(Integer page, Integer num) {
Page<ClubVo> 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<Boolean> 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<PagerData<User>> clubGetUsers(Integer page, Integer num, Long clubId) {
if (clubDao.selectCountByCondition(CLUB_VO.ID.eq(clubId)) == 0)
return Result.failed(HttpStatus.NOT_FOUND, "社团不存在!");
Page<ClubUserAuthVo> 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<UserVo> 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()));
}
}