123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- package com.example.onlinejudge.controller;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.example.onlinejudge.common.DeleteRequest;
- import com.example.onlinejudge.model.VO.QuestionVO;
- import com.example.onlinejudge.model.dto.question.*;
- import com.example.onlinejudge.model.entity.Question;
- import com.example.onlinejudge.model.entity.result.Result;
- import com.example.onlinejudge.model.entity.result.ResultCode;
- import com.example.onlinejudge.service.QuestionService;
- import com.example.onlinejudge.service.UserService;
- import com.google.gson.Gson;
- import io.swagger.annotations.ApiImplicitParam;
- import io.swagger.annotations.ApiImplicitParams;
- import io.swagger.annotations.ApiOperation;
- 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.List;
- @RestController
- @RequestMapping("/question")
- @Slf4j
- public class QuestionController {
- @Resource
- private QuestionService questionService;
- @Resource
- private UserService userService;
- private final static Gson GSON = new Gson();
- // region 增删改查
- /**
- * 创建题目
- *
- * @param questionAddRequest
- * @param request
- * @return
- */
- @PostMapping("/add")
- public Result<Long> addQuestion(@RequestBody QuestionAddRequest questionAddRequest, HttpServletRequest request) {
- if (questionAddRequest == null) {
- return Result.error(ResultCode.PARAM_IS_BLANK);
- }
- Question question = new Question();
- BeanUtils.copyProperties(questionAddRequest, question);
- List<String> tags = questionAddRequest.getTags();
- if (tags != null) {
- question.setTags(GSON.toJson(tags));
- }
- List<JudgeCase> judgeCase = questionAddRequest.getJudgeCase();
- if (judgeCase != null) {
- question.setJudgeCase(GSON.toJson(judgeCase));
- }
- JudgeConfig judgeConfig = questionAddRequest.getJudgeConfig();
- if (judgeConfig != null) {
- question.setJudgeConfig(GSON.toJson(judgeConfig));
- }
- questionService.validQuestion(question, true);
- //TODO:记录谁创建了这个题目
- // User loginUser = userService.getLoginUser(request);
- // question.setUserId(loginUser.getId());
- boolean result = questionService.save(question);
- if(!result){
- return Result.error(ResultCode.PARAM_IS_INVALID);
- }
- // ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
- long newQuestionId = question.getId();
- return Result.success(newQuestionId);
- }
- /**
- * 删除
- *
- * @param deleteRequest
- * @param request
- * @return
- */
- @PostMapping("/delete")
- public Result<Boolean> deleteQuestion(@RequestBody DeleteRequest deleteRequest, HttpServletRequest request) {
- if (deleteRequest == null || deleteRequest.getId() <= 0) {
- return Result.error(ResultCode.PARAM_IS_BLANK);
- }
- long id = deleteRequest.getId();
- // 判断是否存在
- Question oldQuestion = questionService.getById(id);
- if(oldQuestion == null){
- return Result.error(ResultCode.PARAM_IS_INVALID);
- }
- //ThrowUtils.throwIf(oldQuestion == null, ErrorCode.NOT_FOUND_ERROR);
- // 仅本人或管理员可删除
- //TODO:判断是否是管理员
- if (false) {
- return Result.error(ResultCode.PERMISSION_DENIED);
- }
- boolean b = questionService.removeById(id);
- return Result.success(b);
- }
- /**
- * 根据 id 获取
- *
- * @param id
- * @return
- */
- @GetMapping("/get")
- public Result<Question> getQuestionById(long id, HttpServletRequest request) {
- if (id <= 0) {
- return Result.error(ResultCode.PARAM_IS_INVALID);
- }
- Question question = questionService.getById(id);
- if (question == null) {
- return Result.error(ResultCode.NOT_FOUND_ERROR);
- }
- //TODO:判断是否是管理员
- // User loginUser = userService.getLoginUser(request);
- // // 不是本人或管理员,不能直接获取所有信息
- // if (!question.getUserId().equals(loginUser.getId()) && !userService.isAdmin(loginUser)) {
- // throw new BusinessException(ErrorCode.NO_AUTH_ERROR);
- // }
- return Result.success(question);
- }
- @ApiOperation(value = "根据id获取题目(封装类)")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "题目id", required = true, dataType = "long"),
- })
- @GetMapping("/get/vo")
- public Result<QuestionVO> getQuestionVOById(long id, HttpServletRequest request) {
- if (id <= 0) {
- return Result.error(ResultCode.PARAM_IS_INVALID);
- }
- Question question = questionService.getById(id);
- if (question == null) {
- return Result.error(ResultCode.NOT_FOUND_ERROR);
- }
- return Result.success(questionService.getQuestionVO(question, request));
- }
- @ApiOperation(value = "分页获取题目列表(封装类)")
- @ApiImplicitParams(
- @ApiImplicitParam(name = "questionQueryRequest", value = "查询条件", required = true, dataType = "QuestionQueryRequest")
- )
- @PostMapping("/list/page/vo")
- public Result<Page<QuestionVO>> listQuestionVOByPage(@RequestBody QuestionQueryRequest questionQueryRequest,
- HttpServletRequest request) {
- long current = questionQueryRequest.getCurrent();
- long size = questionQueryRequest.getPageSize();
- // 限制爬虫
- if(size > 20){
- return Result.error(ResultCode.PARAM_IS_INVALID);
- }
- //ThrowUtils.throwIf(size > 20, ErrorCode.PARAMS_ERROR);
- Page<Question> questionPage = questionService.page(new Page<>(current, size),
- questionService.getQueryWrapper(questionQueryRequest));
- return Result.success(questionService.getQuestionVOPage(questionPage, request));
- }
- @ApiOperation(value = "分页获取当前用户创建的题目列表(封装类)")
- @ApiImplicitParams(
- @ApiImplicitParam(name = "questionQueryRequest", value = "查询条件", required = true, dataType = "QuestionQueryRequest")
- )
- @PostMapping("/my/list/page/vo")
- public Result<Page<QuestionVO>> listMyQuestionVOByPage(@RequestBody QuestionQueryRequest questionQueryRequest,
- HttpServletRequest request) {
- if (questionQueryRequest == null) {
- return Result.error(ResultCode.PARAM_IS_BLANK);
- }
- // User loginUser = userService.getLoginUser(request);
- // questionQueryRequest.setUserId(loginUser.getId());
- long current = questionQueryRequest.getCurrent();
- long size = questionQueryRequest.getPageSize();
- // 限制爬虫
- if(size > 20){
- return Result.error(ResultCode.PARAM_IS_INVALID);
- }
- Page<Question> questionPage = questionService.page(new Page<>(current, size),
- questionService.getQueryWrapper(questionQueryRequest));
- return Result.success(questionService.getQuestionVOPage(questionPage, request));
- }
- @ApiOperation(value = "分页获取题目列表(仅管理员)")
- @ApiImplicitParams(
- @ApiImplicitParam(name = "questionQueryRequest", value = "查询条件", required = true, dataType = "QuestionQueryRequest")
- )
- @PostMapping("/list/page")
- public Result<Page<Question>> listQuestionByPage(@RequestBody QuestionQueryRequest questionQueryRequest,
- HttpServletRequest request) {
- long current = questionQueryRequest.getCurrent();
- long size = questionQueryRequest.getPageSize();
- Page<Question> questionPage = questionService.page(new Page<>(current, size),
- questionService.getQueryWrapper(questionQueryRequest));
- return Result.success(questionPage);
- }
- // endregion
- /**
- * 编辑(用户)
- *
- * @param questionEditRequest
- * @param request
- * @return
- */
- @PostMapping("/edit")
- public Result<Boolean> editQuestion(@RequestBody QuestionEditRequest questionEditRequest, HttpServletRequest request) {
- if (questionEditRequest == null || questionEditRequest.getId() <= 0) {
- return Result.error(ResultCode.PARAM_IS_BLANK);
- }
- Question question = new Question();
- BeanUtils.copyProperties(questionEditRequest, question);
- List<String> tags = questionEditRequest.getTags();
- if (tags != null) {
- question.setTags(GSON.toJson(tags));
- }
- List<JudgeCase> judgeCase = questionEditRequest.getJudgeCase();
- if (judgeCase != null) {
- question.setJudgeCase(GSON.toJson(judgeCase));
- }
- JudgeConfig judgeConfig = questionEditRequest.getJudgeConfig();
- if (judgeConfig != null) {
- question.setJudgeConfig(GSON.toJson(judgeConfig));
- }
- // 参数校验
- questionService.validQuestion(question, false);
- // User loginUser = userService.getLoginUser(request);
- // long id = questionEditRequest.getId();
- // 判断是否存在
- // Question oldQuestion = questionService.getById(id);
- // ThrowUtils.throwIf(oldQuestion == null, ErrorCode.NOT_FOUND_ERROR);
- // 仅本人或管理员可编辑
- // if (!oldQuestion.getUserId().equals(loginUser.getId()) && !userService.isAdmin(loginUser)) {
- // throw new BusinessException(ErrorCode.NO_AUTH_ERROR);
- // }
- boolean result = questionService.updateById(question);
- return Result.success(result);
- }
- }
|