191 lines
7.6 KiB
Java
191 lines
7.6 KiB
Java
|
package edu.whut.smilepicturebackend.controller;
|
|||
|
|
|||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||
|
import edu.whut.smilepicturebackend.annotation.AuthCheck;
|
|||
|
import edu.whut.smilepicturebackend.common.BaseResponse;
|
|||
|
import edu.whut.smilepicturebackend.common.DeleteRequest;
|
|||
|
import edu.whut.smilepicturebackend.common.ResultUtils;
|
|||
|
import edu.whut.smilepicturebackend.constant.UserConstant;
|
|||
|
import edu.whut.smilepicturebackend.exception.BusinessException;
|
|||
|
import edu.whut.smilepicturebackend.exception.ErrorCode;
|
|||
|
import edu.whut.smilepicturebackend.exception.ThrowUtils;
|
|||
|
import edu.whut.smilepicturebackend.model.dto.space.*;
|
|||
|
import edu.whut.smilepicturebackend.model.entity.Space;
|
|||
|
import edu.whut.smilepicturebackend.model.entity.User;
|
|||
|
import edu.whut.smilepicturebackend.model.enums.SpaceLevelEnum;
|
|||
|
import edu.whut.smilepicturebackend.model.vo.SpaceVO;
|
|||
|
import edu.whut.smilepicturebackend.service.SpaceService;
|
|||
|
import edu.whut.smilepicturebackend.service.UserService;
|
|||
|
import lombok.RequiredArgsConstructor;
|
|||
|
import lombok.extern.slf4j.Slf4j;
|
|||
|
import org.springframework.beans.BeanUtils;
|
|||
|
import org.springframework.web.bind.annotation.*;
|
|||
|
|
|||
|
import javax.annotation.Resource;
|
|||
|
import javax.servlet.http.HttpServletRequest;
|
|||
|
import java.util.Arrays;
|
|||
|
import java.util.Date;
|
|||
|
import java.util.List;
|
|||
|
import java.util.stream.Collectors;
|
|||
|
|
|||
|
/**
|
|||
|
* @author 程序员鱼皮 <a href="https://www.codefather.cn">编程导航原创项目</a>
|
|||
|
*/
|
|||
|
@Slf4j
|
|||
|
@RestController
|
|||
|
@RequiredArgsConstructor
|
|||
|
@RequestMapping("/space")
|
|||
|
public class SpaceController {
|
|||
|
|
|||
|
private final UserService userService;
|
|||
|
|
|||
|
private final SpaceService spaceService;
|
|||
|
|
|||
|
|
|||
|
@PostMapping("/add")
|
|||
|
public BaseResponse<Long> addSpace(@RequestBody SpaceAddRequest spaceAddRequest, HttpServletRequest request) {
|
|||
|
ThrowUtils.throwIf(spaceAddRequest == null, ErrorCode.PARAMS_ERROR);
|
|||
|
User loginUser = userService.getLoginUser(request);
|
|||
|
long newId = spaceService.addSpace(spaceAddRequest, loginUser);
|
|||
|
return ResultUtils.success(newId);
|
|||
|
}
|
|||
|
|
|||
|
@PostMapping("/delete")
|
|||
|
public BaseResponse<Boolean> deleteSpace(@RequestBody DeleteRequest deleteRequest
|
|||
|
, HttpServletRequest request) {
|
|||
|
if (deleteRequest == null || deleteRequest.getId() <= 0) {
|
|||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
|||
|
}
|
|||
|
User loginUser = userService.getLoginUser(request);
|
|||
|
Long id = deleteRequest.getId();
|
|||
|
// 判断是否存在
|
|||
|
Space oldSpace = spaceService.getById(id);
|
|||
|
ThrowUtils.throwIf(oldSpace == null, ErrorCode.NOT_FOUND_ERROR);
|
|||
|
// 仅本人或者管理员可删除
|
|||
|
spaceService.checkSpaceAuth(loginUser, oldSpace);
|
|||
|
// 操作数据库
|
|||
|
boolean result = spaceService.removeById(id);
|
|||
|
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
|
|||
|
return ResultUtils.success(true);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 更新空间(仅管理员可用)
|
|||
|
*
|
|||
|
* @param spaceUpdateRequest
|
|||
|
* @param request
|
|||
|
* @return
|
|||
|
*/
|
|||
|
@PostMapping("/update")
|
|||
|
@AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
|
|||
|
public BaseResponse<Boolean> updateSpace(@RequestBody SpaceUpdateRequest spaceUpdateRequest,
|
|||
|
HttpServletRequest request) {
|
|||
|
if (spaceUpdateRequest == null || spaceUpdateRequest.getId() <= 0) {
|
|||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
|||
|
}
|
|||
|
// 将实体类和 DTO 进行转换
|
|||
|
Space space = new Space();
|
|||
|
BeanUtils.copyProperties(spaceUpdateRequest, space);
|
|||
|
// 自动填充数据
|
|||
|
spaceService.fillSpaceBySpaceLevel(space);
|
|||
|
// 数据校验
|
|||
|
spaceService.validSpace(space, false); //不是新增时的操作
|
|||
|
// 判断是否存在
|
|||
|
long id = spaceUpdateRequest.getId();
|
|||
|
Space oldSpace = spaceService.getById(id);
|
|||
|
ThrowUtils.throwIf(oldSpace == null, ErrorCode.NOT_FOUND_ERROR);
|
|||
|
// 操作数据库
|
|||
|
boolean result = spaceService.updateById(space);
|
|||
|
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
|
|||
|
return ResultUtils.success(true);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 根据 id 获取空间(仅管理员可用)
|
|||
|
*/
|
|||
|
@GetMapping("/get")
|
|||
|
@AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
|
|||
|
public BaseResponse<Space> getSpaceById(long id, HttpServletRequest request) {
|
|||
|
ThrowUtils.throwIf(id <= 0, ErrorCode.PARAMS_ERROR);
|
|||
|
// 查询数据库
|
|||
|
Space space = spaceService.getById(id);
|
|||
|
ThrowUtils.throwIf(space == null, ErrorCode.NOT_FOUND_ERROR);
|
|||
|
// 获取封装类
|
|||
|
return ResultUtils.success(space);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 根据 id 获取空间(封装类)
|
|||
|
*/
|
|||
|
@GetMapping("/get/vo")
|
|||
|
public BaseResponse<SpaceVO> getSpaceVOById(long id, HttpServletRequest request) {
|
|||
|
ThrowUtils.throwIf(id <= 0, ErrorCode.PARAMS_ERROR);
|
|||
|
// 查询数据库
|
|||
|
Space space = spaceService.getById(id);
|
|||
|
ThrowUtils.throwIf(space == null, ErrorCode.NOT_FOUND_ERROR);
|
|||
|
return ResultUtils.success(spaceService.getSpaceVO(space,request));
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 分页获取空间列表(仅管理员可用)
|
|||
|
*/
|
|||
|
@PostMapping("/list/page")
|
|||
|
@AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
|
|||
|
public BaseResponse<Page<Space>> listSpaceByPage(@RequestBody SpaceQueryRequest spaceQueryRequest) {
|
|||
|
long current = spaceQueryRequest.getCurrent();
|
|||
|
long size = spaceQueryRequest.getPageSize();
|
|||
|
// 查询数据库
|
|||
|
Page<Space> spacePage = spaceService.page(new Page<>(current, size),
|
|||
|
spaceService.getQueryWrapper(spaceQueryRequest));
|
|||
|
return ResultUtils.success(spacePage);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 分页获取空间列表(封装类) 用户使用
|
|||
|
*/
|
|||
|
@PostMapping("/list/page/vo")
|
|||
|
public BaseResponse<Page<SpaceVO>> listSpaceVOByPage(@RequestBody SpaceQueryRequest spaceQueryRequest,
|
|||
|
HttpServletRequest request) {
|
|||
|
long current = spaceQueryRequest.getCurrent();
|
|||
|
long size = spaceQueryRequest.getPageSize();
|
|||
|
// 限制爬虫
|
|||
|
ThrowUtils.throwIf(size > 20, ErrorCode.PARAMS_ERROR);
|
|||
|
// 查询数据库
|
|||
|
Page<Space> spacePage = spaceService.page(new Page<>(current, size),
|
|||
|
spaceService.getQueryWrapper(spaceQueryRequest));
|
|||
|
// 获取封装类
|
|||
|
return ResultUtils.success(spaceService.getSpaceVOPage(spacePage, request));
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 编辑空间(给用户使用)
|
|||
|
*/
|
|||
|
@PostMapping("/edit")
|
|||
|
public BaseResponse<Boolean> editSpace(@RequestBody SpaceEditRequest spaceEditRequest, HttpServletRequest request) {
|
|||
|
if (spaceEditRequest == null || spaceEditRequest.getId() <= 0) {
|
|||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
|||
|
}
|
|||
|
// 在此处将实体类和 DTO 进行转换
|
|||
|
Space space = new Space();
|
|||
|
BeanUtils.copyProperties(spaceEditRequest, space);
|
|||
|
// 自动填充数据
|
|||
|
spaceService.fillSpaceBySpaceLevel(space);
|
|||
|
// 设置编辑时间
|
|||
|
space.setEditTime(new Date());
|
|||
|
// 数据校验
|
|||
|
spaceService.validSpace(space, false);
|
|||
|
User loginUser = userService.getLoginUser(request);
|
|||
|
// 判断是否存在
|
|||
|
long id = spaceEditRequest.getId();
|
|||
|
Space oldSpace = spaceService.getById(id);
|
|||
|
ThrowUtils.throwIf(oldSpace == null, ErrorCode.NOT_FOUND_ERROR);
|
|||
|
// 仅本人或管理员可编辑
|
|||
|
spaceService.checkSpaceAuth(loginUser, oldSpace);
|
|||
|
// 操作数据库
|
|||
|
boolean result = spaceService.updateById(space);
|
|||
|
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
|
|||
|
return ResultUtils.success(true);
|
|||
|
}
|
|||
|
|
|||
|
}
|