diff --git a/eagle-oj-web/src/main/java/com/eagleoj/web/controller/ProblemController.java b/eagle-oj-web/src/main/java/com/eagleoj/web/controller/ProblemController.java index cab93e5..699a893 100644 --- a/eagle-oj-web/src/main/java/com/eagleoj/web/controller/ProblemController.java +++ b/eagle-oj-web/src/main/java/com/eagleoj/web/controller/ProblemController.java @@ -11,6 +11,7 @@ import com.eagleoj.web.data.status.RoleStatus; import com.eagleoj.web.service.ProblemModeratorService; import io.swagger.annotations.ApiOperation; +import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.Logical; import org.apache.shiro.authz.annotation.RequiresAuthentication; import com.eagleoj.web.entity.*; @@ -47,6 +48,16 @@ public class ProblemController { @Autowired private TestCasesService testCasesService; + @ApiOperation("随机获取一个题目ID") + @GetMapping("/random") + public ResponseEntity getRandomProblem() { + if (SecurityUtils.getSubject().isAuthenticated()) { + return new ResponseEntity(problemService.getRandomPid(SessionHelper.get().getUid())); + } else { + return new ResponseEntity(problemService.getRandomPid(null)); + } + } + @ApiOperation("获取指定题目的信息") @GetMapping("/{pid}") diff --git a/eagle-oj-web/src/main/java/com/eagleoj/web/dao/ProblemMapper.java b/eagle-oj-web/src/main/java/com/eagleoj/web/dao/ProblemMapper.java index bd9f9a7..cd72b4b 100644 --- a/eagle-oj-web/src/main/java/com/eagleoj/web/dao/ProblemMapper.java +++ b/eagle-oj-web/src/main/java/com/eagleoj/web/dao/ProblemMapper.java @@ -18,6 +18,8 @@ public interface ProblemMapper { int count(); + int getRandomPid(Integer uid); + ProblemEntity getByPid(int pid); List> listProblemTagsByPid(int pid); diff --git a/eagle-oj-web/src/main/java/com/eagleoj/web/service/ProblemService.java b/eagle-oj-web/src/main/java/com/eagleoj/web/service/ProblemService.java index 7e19cdb..10d67e1 100644 --- a/eagle-oj-web/src/main/java/com/eagleoj/web/service/ProblemService.java +++ b/eagle-oj-web/src/main/java/com/eagleoj/web/service/ProblemService.java @@ -17,6 +17,8 @@ int save(JSONArray tags, int owner, String title, JSONObject description, JSONOb int countProblems(); + int getRandomPid(Integer uid); + void deleteProblem(int pid); void updateProblem(int pid, JSONArray tags, ProblemEntity problemEntity); diff --git a/eagle-oj-web/src/main/java/com/eagleoj/web/service/impl/ProblemServiceImpl.java b/eagle-oj-web/src/main/java/com/eagleoj/web/service/impl/ProblemServiceImpl.java index 760b420..4b69f77 100644 --- a/eagle-oj-web/src/main/java/com/eagleoj/web/service/impl/ProblemServiceImpl.java +++ b/eagle-oj-web/src/main/java/com/eagleoj/web/service/impl/ProblemServiceImpl.java @@ -97,6 +97,11 @@ public int countProblems() { return problemMapper.count(); } + @Override + public int getRandomPid(Integer uid) { + return problemMapper.getRandomPid(uid); + } + @Transactional @Override public void deleteProblem(int pid) { diff --git a/eagle-oj-web/src/main/resources/mapping/ProblemMapper.xml b/eagle-oj-web/src/main/resources/mapping/ProblemMapper.xml index c93fdf3..c731d0a 100644 --- a/eagle-oj-web/src/main/resources/mapping/ProblemMapper.xml +++ b/eagle-oj-web/src/main/resources/mapping/ProblemMapper.xml @@ -14,6 +14,18 @@ SELECT count(*) FROM problem + +