Browse Source

feat: 题目管理,批量添加测试用例

haha 4 years ago
parent
commit
edf66fcff9

+ 29 - 0
seec-oj-server/src/main/java/cn/seecoder/ojserver/controller/ProblemController.java

@@ -6,6 +6,8 @@ import cn.seecoder.ojserver.service.ProblemService;
 import cn.seecoder.ojserver.web.Response;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 @RestController
 @RequestMapping(path = "/api/problem")
 public class ProblemController {
@@ -20,6 +22,11 @@ public class ProblemController {
         return Response.buildSuccess(this.problemService.create(problemVO));
     }
 
+    @DeleteMapping("")
+    public Response delete(@RequestParam int problemId){
+        return Response.buildSuccess(this.problemService.delete(problemId));
+    }
+
     @GetMapping("")
     public Response getAll(){
         return Response.buildSuccess(this.problemService.getAllProblemsBasic());
@@ -31,11 +38,33 @@ public class ProblemController {
         return Response.buildSuccess(this.problemService.getProblemById(problemId));
     }
 
+
+    @GetMapping("/manage")
+    public Response getProblemManageList(){
+        return Response.buildSuccess(this.problemService.getProblemDetailList());
+    }
+
+
+    @GetMapping("/manage/{problemId:\\d+}")
+    public Response getProblemManage(@PathVariable int problemId){
+        return Response.buildSuccess(this.problemService.getProblemManageById(problemId));
+    }
+
+    @GetMapping("/testcase")
+    public Response getTestCases(@RequestParam Integer problemId){
+        return Response.buildSuccess(this.problemService.getTestCasesByProblemId(problemId));
+    }
+
     @PostMapping("/testcase")
     public Response addTestCase(@RequestBody TestCaseVO testCaseVO){
         return Response.buildSuccess(this.problemService.addTestCase(testCaseVO));
     }
 
+    @PostMapping("/batchTestcase")
+    public Response batchAddTestCase(@RequestBody List<TestCaseVO> testCaseVOList){
+        return Response.buildSuccess(this.problemService.addTestCaseList(testCaseVOList));
+    }
+
     @DeleteMapping("/testcase")
     public Response deleteTestCase(@RequestParam Integer testCaseId){
         return Response.buildSuccess(this.problemService.deleteTestCase(testCaseId));

+ 7 - 0
seec-oj-server/src/main/java/cn/seecoder/ojserver/mapper/TestCaseMapper.java

@@ -6,6 +6,8 @@ import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
 import org.mapstruct.factory.Mappers;
 
+import java.util.List;
+
 @Mapper(componentModel = "spring")
 public interface TestCaseMapper {
     TestCaseMapper INSTANCE = Mappers.getMapper(TestCaseMapper.class);
@@ -14,4 +16,9 @@ public interface TestCaseMapper {
     TestCaseVO toVO(TestCase testCase);
 
     TestCase toPO(TestCaseVO testCaseVO);
+
+    @Mapping(source = "problem.id", target = "problemId")
+    List<TestCaseVO> toVOList(List<TestCase> testCaseList);
+
+    List<TestCase> toPOList(List<TestCaseVO> testCaseVOList);
 }

+ 10 - 0
seec-oj-server/src/main/java/cn/seecoder/ojserver/service/ProblemService.java

@@ -12,11 +12,21 @@ import java.util.Map;
 public interface ProblemService {
     public ProblemVO create(ProblemVO problemVO);
 
+    public int delete(int problemId);
+
     public List<Map<String,Object>> getAllProblemsBasic();
 
+    public List<Problem> getProblemDetailList();
+
     public ProblemVO getProblemById(int problemId);
 
+    public Problem getProblemManageById(int problemId);
+
+    public List<TestCaseVO> getTestCasesByProblemId(int problemId);
+
     public TestCaseVO addTestCase(TestCaseVO testCaseVO);
 
+    public List<TestCaseVO> addTestCaseList(List<TestCaseVO> testCaseVOList);
+
     public String deleteTestCase(Integer testcaseId);
 }

+ 35 - 0
seec-oj-server/src/main/java/cn/seecoder/ojserver/service/impl/ProblemServiceImpl.java

@@ -37,17 +37,39 @@ public class ProblemServiceImpl implements ProblemService {
         return ProblemMapper.INSTANCE.toVO(problem);
     }
 
+    @Override
+    public int delete(int problemId) {
+        this.problemDAO.deleteById(problemId);
+        return problemId;
+    }
+
     @Override
     public List<Map<String,Object>> getAllProblemsBasic() {
         return this.problemDAO.findProblemList();
     }
 
+    @Override
+    public List<Problem> getProblemDetailList() {
+        return this.problemDAO.findAll();
+    }
+
+
     @Override
     public ProblemVO getProblemById(int problemId) {
         System.out.println(this.problemDAO.findById(problemId));
         return ProblemMapper.INSTANCE.toVO(this.problemDAO.findById(problemId));
     }
 
+    @Override
+    public Problem getProblemManageById(int problemId) {
+        return this.problemDAO.findById(problemId);
+    }
+
+    @Override
+    public List<TestCaseVO> getTestCasesByProblemId(int problemId) {
+        return TestCaseMapper.INSTANCE.toVOList(this.testCaseDAO.findByProblem_Id(problemId));
+    }
+
     @Override
     public TestCaseVO addTestCase(TestCaseVO testCaseVO) {
         TestCase testCase = TestCaseMapper.INSTANCE.toPO(testCaseVO);
@@ -58,6 +80,19 @@ public class ProblemServiceImpl implements ProblemService {
         return TestCaseMapper.INSTANCE.toVO(testCase);
     }
 
+    @Override
+    public List<TestCaseVO> addTestCaseList(List<TestCaseVO> testCaseVOList) {
+        List<TestCase> testCaseList = TestCaseMapper.INSTANCE.toPOList(testCaseVOList);
+        for(int i=0;i<testCaseList.size();i++){
+            Problem problem = new Problem();
+            problem.setId(testCaseVOList.get(i).getProblemId());
+            testCaseList.get(i).setProblem(problem);
+        }
+        this.testCaseDAO.saveAll(testCaseList);
+        return TestCaseMapper.INSTANCE.toVOList(testCaseList);
+    }
+
+
     @Override
     public String deleteTestCase(Integer testcaseId) {
         this.testCaseDAO.deleteById(testcaseId);