Procházet zdrojové kódy

作业部分调整

GuardOfDawn před 7 roky
rodič
revize
b72b34c9fa

+ 1 - 1
src/main/java/nju/seec/SEECdemo/data/convertor/ScoreDetailSetConverter.java

@@ -1,6 +1,6 @@
 package nju.seec.SEECdemo.data.convertor;
 
-import nju.seec.SEECdemo.data.entity.assignment.CodeResult.Score;
+import nju.seec.SEECdemo.data.entity.assignment.CodeWorkResult.Score;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;

+ 0 - 15
src/main/java/nju/seec/SEECdemo/data/dao/assignment/CodeDAO.java

@@ -1,15 +0,0 @@
-package nju.seec.SEECdemo.data.dao.assignment;
-
-import nju.seec.SEECdemo.data.entity.assignment.Code;
-import nju.seec.SEECdemo.util.enums.AssignmentStatus;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import java.util.List;
-
-public interface CodeDAO extends JpaRepository<Code, Integer> {
-    Code findById(int id);
-
-    List<Code> findByCourseIdAndStatusIs(int courseId, AssignmentStatus status);
-
-    List<Code> findByCourseIdAndStatusIn(int courseId, List<AssignmentStatus> statuses);
-}

+ 0 - 13
src/main/java/nju/seec/SEECdemo/data/dao/assignment/CodeResultDAO.java

@@ -1,13 +0,0 @@
-package nju.seec.SEECdemo.data.dao.assignment;
-
-import nju.seec.SEECdemo.data.entity.assignment.Code;
-import nju.seec.SEECdemo.data.entity.assignment.CodeResult;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import java.util.Set;
-
-public interface CodeResultDAO extends JpaRepository<CodeResult, Integer> {
-    CodeResult findById(int id);
-
-    CodeResult findByCodeAndGroupId(Code code, int groupId);
-}

+ 15 - 0
src/main/java/nju/seec/SEECdemo/data/dao/assignment/CodeWorkDAO.java

@@ -0,0 +1,15 @@
+package nju.seec.SEECdemo.data.dao.assignment;
+
+import nju.seec.SEECdemo.data.entity.assignment.CodeWork;
+import nju.seec.SEECdemo.util.enums.AssignmentStatus;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface CodeWorkDAO extends JpaRepository<CodeWork, Integer> {
+    CodeWork findById(int id);
+
+    List<CodeWork> findByCourseIdAndStatusIs(int courseId, AssignmentStatus status);
+
+    List<CodeWork> findByCourseIdAndStatusIn(int courseId, List<AssignmentStatus> statuses);
+}

+ 11 - 0
src/main/java/nju/seec/SEECdemo/data/dao/assignment/CodeWorkResultDAO.java

@@ -0,0 +1,11 @@
+package nju.seec.SEECdemo.data.dao.assignment;
+
+import nju.seec.SEECdemo.data.entity.assignment.CodeWork;
+import nju.seec.SEECdemo.data.entity.assignment.CodeWorkResult;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface CodeWorkResultDAO extends JpaRepository<CodeWorkResult, Integer> {
+    CodeWorkResult findById(int id);
+
+    CodeWorkResult findByCodeAndGroupId(CodeWork code, int groupId);
+}

+ 3 - 4
src/main/java/nju/seec/SEECdemo/data/entity/assignment/Code.java → src/main/java/nju/seec/SEECdemo/data/entity/assignment/CodeWork.java

@@ -3,7 +3,6 @@ package nju.seec.SEECdemo.data.entity.assignment;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
-import nju.seec.SEECdemo.logic.service.impl.assignment.mock.MockCourse;
 import nju.seec.SEECdemo.util.enums.AssignmentStatus;
 import nju.seec.SEECdemo.util.enums.AssignmentType;
 import org.hibernate.annotations.LazyCollection;
@@ -19,7 +18,7 @@ import java.util.Set;
 @ToString(exclude = {"resultSet"})
 @Entity
 @Table(name = "ENTITY_CODE")
-public class Code {
+public class CodeWork {
 
     @Id
     @Column(name = "id")
@@ -65,8 +64,8 @@ public class Code {
     @Column(name = "course", nullable = false)
     private int courseId;
 
-    @OneToMany(targetEntity = CodeResult.class, mappedBy = "code", cascade = CascadeType.REMOVE)
+    @OneToMany(targetEntity = CodeWorkResult.class, mappedBy = "code", cascade = CascadeType.REMOVE)
     @LazyCollection(LazyCollectionOption.EXTRA)
-    private Set<CodeResult> resultSet = new HashSet<>();
+    private Set<CodeWorkResult> resultSet = new HashSet<>();
 
 }

+ 4 - 4
src/main/java/nju/seec/SEECdemo/data/entity/assignment/CodeResult.java → src/main/java/nju/seec/SEECdemo/data/entity/assignment/CodeWorkResult.java

@@ -14,15 +14,15 @@ import java.util.Set;
 @ToString(exclude = {"code"})
 @Entity
 @Table(name = "ENTITY_CODE_RESULT")
-public class CodeResult {
+public class CodeWorkResult {
 
     @Id
     @Column(name = "id")
     private Integer id;
 
-    @ManyToOne(targetEntity = Code.class, fetch = FetchType.LAZY)
+    @ManyToOne(targetEntity = CodeWork.class, fetch = FetchType.LAZY)
     @JoinColumn(name = "code", referencedColumnName = "id")
-    private Code code;
+    private CodeWork code;
 
     @Basic
     @Column(name = "groupId")
@@ -34,7 +34,7 @@ public class CodeResult {
 
     @Basic
     @Column(name = "deployNS")
-    private Long deployNamespace;
+    private String deployNamespace;
 
     @Basic
     @Column(name = "testJob")

+ 3 - 3
src/main/java/nju/seec/SEECdemo/logic/service/CodeService.java → src/main/java/nju/seec/SEECdemo/logic/service/assignmentWork/CodeWorkService.java

@@ -1,9 +1,9 @@
-package nju.seec.SEECdemo.logic.service;
+package nju.seec.SEECdemo.logic.service.assignmentWork;
 
-import nju.seec.SEECdemo.logic.vo.CodeWorkVO;
+import nju.seec.SEECdemo.logic.vo.assignmentWork.CodeWorkVO;
 import nju.seec.SEECdemo.web.dto.CodeWorkDTO;
 
-public interface CodeService {
+public interface CodeWorkService {
 
     CodeWorkVO createAssignment(int courseId, CodeWorkDTO codeWorkDTO);
 

+ 4 - 4
src/main/java/nju/seec/SEECdemo/logic/service/InterCodeService.java → src/main/java/nju/seec/SEECdemo/logic/service/assignmentWork/external/ExternalCodeWorkService.java

@@ -1,11 +1,11 @@
-package nju.seec.SEECdemo.logic.service;
+package nju.seec.SEECdemo.logic.service.assignmentWork.external;
 
-import nju.seec.SEECdemo.logic.vo.InterCodeAppInfoVO;
+import nju.seec.SEECdemo.logic.vo.assignmentWork.external.ExternalCodeInfoVO;
 
 /**
  * 代码作业部分向外提供给构建、部署、测试调用的接口
  */
-public interface InterCodeService {
+public interface ExternalCodeWorkService {
 
     /**
      * 获取jenkins的构建job名称
@@ -21,7 +21,7 @@ public interface InterCodeService {
      * @param groupId 小组id
      * @return
      */
-    InterCodeAppInfoVO getInfo(int codeAssignmentId, int groupId);
+    ExternalCodeInfoVO getInfo(int codeAssignmentId, int groupId);
 
     /**
      * 获取jenkins的测试job名称

+ 11 - 12
src/main/java/nju/seec/SEECdemo/logic/service/impl/assignment/AssignmentPaperBuilder.java

@@ -1,9 +1,9 @@
 package nju.seec.SEECdemo.logic.service.impl.assignment;
 
-import nju.seec.SEECdemo.data.dao.assignment.CodeDAO;
-import nju.seec.SEECdemo.data.dao.assignment.CodeResultDAO;
-import nju.seec.SEECdemo.data.entity.assignment.Code;
-import nju.seec.SEECdemo.data.entity.assignment.CodeResult;
+import nju.seec.SEECdemo.data.dao.assignment.CodeWorkDAO;
+import nju.seec.SEECdemo.data.dao.assignment.CodeWorkResultDAO;
+import nju.seec.SEECdemo.data.entity.assignment.CodeWork;
+import nju.seec.SEECdemo.data.entity.assignment.CodeWorkResult;
 import nju.seec.SEECdemo.logic.service.ProjectService;
 import nju.seec.SEECdemo.logic.service.impl.assignment.mock.MockGroup;
 import nju.seec.SEECdemo.logic.api.GitlabApi;
@@ -12,7 +12,6 @@ import nju.seec.SEECdemo.logic.service.impl.assignment.mock.MockQuestion;
 import nju.seec.SEECdemo.logic.service.impl.assignment.stub.GroupServiceStub;
 import nju.seec.SEECdemo.logic.service.impl.assignment.stub.QuestionServiceStub;
 import nju.seec.SEECdemo.logic.storage.StorageProvider;
-import nju.seec.SEECdemo.util.ApplicationProperties;
 import nju.seec.SEECdemo.util.ToolKit;
 import nju.seec.SEECdemo.util.enums.AssignmentStatus;
 import org.apache.commons.io.FileUtils;
@@ -37,8 +36,8 @@ public class AssignmentPaperBuilder {
     private final GitlabApi gitlabApi;
     private final GitHelper helper;
     private final JenkinsApi jenkinsApi;
-    private final CodeDAO codeDAO;
-    private final CodeResultDAO codeResultDAO;
+    private final CodeWorkDAO codeDAO;
+    private final CodeWorkResultDAO codeResultDAO;
     private final StorageProvider storageProvider;
 
     private final QuestionServiceStub questionServiceStub;
@@ -46,7 +45,7 @@ public class AssignmentPaperBuilder {
     private final ProjectService projectService;
 
     @Autowired
-    public AssignmentPaperBuilder(GitlabApi gitlabApi, GitHelper helper, JenkinsApi jenkinsApi, CodeDAO codeDAO, CodeResultDAO codeResultDAO, StorageProvider storageProvider,
+    public AssignmentPaperBuilder(GitlabApi gitlabApi, GitHelper helper, JenkinsApi jenkinsApi, CodeWorkDAO codeDAO, CodeWorkResultDAO codeResultDAO, StorageProvider storageProvider,
                                   QuestionServiceStub questionServiceStub, GroupServiceStub groupServiceStub, ProjectService projectService){
         this.gitlabApi = gitlabApi;
         this.helper = helper;
@@ -60,7 +59,7 @@ public class AssignmentPaperBuilder {
     }
 
     @Transactional
-    public void buildCodePaper(Code code) throws IOException, GitAPIException, GitLabApiException {
+    public void buildCodePaper(CodeWork code) throws IOException, GitAPIException, GitLabApiException {
         File tempDir = Files.createTempDirectory(TEMP_PREFIX).toFile();
         try {
             code.setId(gitlabApi.createProject(code.getUuid()));
@@ -76,7 +75,7 @@ public class AssignmentPaperBuilder {
 
     @Transactional
     public void addGroupsToPaper(int codeId) {
-        Code code = codeDAO.findById(codeId);
+        CodeWork code = codeDAO.findById(codeId);
         if (code.getStatus() != AssignmentStatus.PREPARING) return;
         // 为群组创建项目,并将组员加入到项目中
         try {
@@ -91,11 +90,11 @@ public class AssignmentPaperBuilder {
         codeDAO.save(code);
     }
 
-    public void addGroupToPaper(Code code, MockGroup group) throws IOException, GitLabApiException {
+    public void addGroupToPaper(CodeWork code, MockGroup group) throws IOException, GitLabApiException {
         // fork项目的时候,将项目设置成private的,因为组员设置成了Master权限,而只有组的Owner才能够更项目可见性
         // (private、internal、public),所以此处用root用户来fork
         int projectId = gitlabApi.forkProject(gitlabApi.getRootUserId(), code.getId(), group.getNamespace());
-        CodeResult codeResult = new CodeResult();
+        CodeWorkResult codeResult = new CodeWorkResult();
         codeResult.setId(projectId);
         codeResult.setGroupId(group.getId());
         codeResult.setCode(code);

+ 25 - 26
src/main/java/nju/seec/SEECdemo/logic/service/impl/assignment/CodeServiceImpl.java → src/main/java/nju/seec/SEECdemo/logic/service/impl/assignment/CodeWorkServiceImpl.java

@@ -1,17 +1,16 @@
 package nju.seec.SEECdemo.logic.service.impl.assignment;
 
-import nju.seec.SEECdemo.data.dao.assignment.CodeDAO;
-import nju.seec.SEECdemo.data.dao.assignment.CodeResultDAO;
-import nju.seec.SEECdemo.data.entity.assignment.Code;
-import nju.seec.SEECdemo.data.entity.assignment.CodeResult;
-import nju.seec.SEECdemo.logic.api.GitlabApi;
-import nju.seec.SEECdemo.logic.service.CodeService;
-import nju.seec.SEECdemo.logic.service.InterCodeService;
+import nju.seec.SEECdemo.data.dao.assignment.CodeWorkDAO;
+import nju.seec.SEECdemo.data.dao.assignment.CodeWorkResultDAO;
+import nju.seec.SEECdemo.data.entity.assignment.CodeWork;
+import nju.seec.SEECdemo.data.entity.assignment.CodeWorkResult;
+import nju.seec.SEECdemo.logic.service.assignmentWork.CodeWorkService;
+import nju.seec.SEECdemo.logic.service.assignmentWork.external.ExternalCodeWorkService;
 import nju.seec.SEECdemo.logic.service.impl.assignment.mock.MockGroup;
 import nju.seec.SEECdemo.logic.service.impl.assignment.stub.CourseServiceStub;
 import nju.seec.SEECdemo.logic.service.impl.assignment.stub.GroupServiceStub;
-import nju.seec.SEECdemo.logic.vo.CodeWorkVO;
-import nju.seec.SEECdemo.logic.vo.InterCodeAppInfoVO;
+import nju.seec.SEECdemo.logic.vo.assignmentWork.CodeWorkVO;
+import nju.seec.SEECdemo.logic.vo.assignmentWork.external.ExternalCodeInfoVO;
 import nju.seec.SEECdemo.util.AsyncWrapper;
 import nju.seec.SEECdemo.util.ToolKit;
 import nju.seec.SEECdemo.util.enums.AssignmentStatus;
@@ -26,18 +25,18 @@ import java.util.ArrayList;
 import java.util.List;
 
 @Component
-public class CodeServiceImpl implements CodeService, InterCodeService {
+public class CodeWorkServiceImpl implements CodeWorkService, ExternalCodeWorkService {
 
-    private final CodeDAO codeDAO;
-    private final CodeResultDAO codeResultDAO;
+    private final CodeWorkDAO codeDAO;
+    private final CodeWorkResultDAO codeResultDAO;
     private final AssignmentPaperBuilder assignmentPaperBuilder;
     private final AsyncWrapper asyncWrapper;
     private final CourseServiceStub courseServiceStub;
     private final GroupServiceStub groupServiceStub;
 
     @Autowired
-    public CodeServiceImpl(CodeDAO codeDAO, CodeResultDAO codeResultDAO, AssignmentPaperBuilder assignmentPaperBuilder,
-                           AsyncWrapper asyncWrapper, CourseServiceStub courseServiceStub, GroupServiceStub groupServiceStub){
+    public CodeWorkServiceImpl(CodeWorkDAO codeDAO, CodeWorkResultDAO codeResultDAO, AssignmentPaperBuilder assignmentPaperBuilder,
+                               AsyncWrapper asyncWrapper, CourseServiceStub courseServiceStub, GroupServiceStub groupServiceStub){
         this.codeDAO = codeDAO;
         this.codeResultDAO = codeResultDAO;
         this.assignmentPaperBuilder = assignmentPaperBuilder;
@@ -49,7 +48,7 @@ public class CodeServiceImpl implements CodeService, InterCodeService {
 
     @Override
     public CodeWorkVO createAssignment(int courseId, CodeWorkDTO codeWorkDTO) {
-        Code codework = new Code();
+        CodeWork codework = new CodeWork();
         codework.setName(codeWorkDTO.getName());
         codework.setDescription(codeWorkDTO.getDescription());
         codework.setQuestionId(codeWorkDTO.getQuestion());
@@ -75,8 +74,8 @@ public class CodeServiceImpl implements CodeService, InterCodeService {
      */
     @Override
     public String getJenkinsBuildJobName(int codeAssignmentId, int groupId) {
-        Code code = codeDAO.findById(codeAssignmentId);
-        CodeResult codeResult = codeResultDAO.findByCodeAndGroupId(code, groupId);
+        CodeWork code = codeDAO.findById(codeAssignmentId);
+        CodeWorkResult codeResult = codeResultDAO.findByCodeAndGroupId(code, groupId);
         return codeResult!=null?codeResult.getBuildJob():null;
     }
 
@@ -87,10 +86,10 @@ public class CodeServiceImpl implements CodeService, InterCodeService {
      * @return
      */
     @Override
-    public InterCodeAppInfoVO getInfo(int codeAssignmentId, int groupId) {
-        Code code = codeDAO.findById(codeAssignmentId);
-        CodeResult codeResult = codeResultDAO.findByCodeAndGroupId(code, groupId);
-        InterCodeAppInfoVO codeAppInfoVO = new InterCodeAppInfoVO();
+    public ExternalCodeInfoVO getInfo(int codeAssignmentId, int groupId) {
+        CodeWork code = codeDAO.findById(codeAssignmentId);
+        CodeWorkResult codeResult = codeResultDAO.findByCodeAndGroupId(code, groupId);
+        ExternalCodeInfoVO codeAppInfoVO = new ExternalCodeInfoVO();
         codeAppInfoVO.setId(codeResult.getId());
         codeAppInfoVO.setProjectId(codeResult.getDeployNamespace());
         codeAppInfoVO.setApplicationName(codeResult.getGroupId() + code.getUuid());
@@ -105,8 +104,8 @@ public class CodeServiceImpl implements CodeService, InterCodeService {
      */
     @Override
     public String getJenkinsTestJobName(int codeAssignmentId, int groupId) {
-        Code code = codeDAO.findById(codeAssignmentId);
-        CodeResult codeResult = codeResultDAO.findByCodeAndGroupId(code, groupId);
+        CodeWork code = codeDAO.findById(codeAssignmentId);
+        CodeWorkResult codeResult = codeResultDAO.findByCodeAndGroupId(code, groupId);
         return codeResult!=null?codeResult.getTestJob():null;
     }
 
@@ -118,12 +117,12 @@ public class CodeServiceImpl implements CodeService, InterCodeService {
             add(AssignmentStatus.PREPARING);
         }};
         try {
-            List<Code> codeList = codeDAO.findByCourseIdAndStatusIn(group.getCourseId(), statuses);
-            List<Code> preparingList = new ArrayList<>();
+            List<CodeWork> codeList = codeDAO.findByCourseIdAndStatusIn(group.getCourseId(), statuses);
+            List<CodeWork> preparingList = new ArrayList<>();
             // TODO
             // 对于AVAILABLE的作业,直接将组加入;对于PREPARING的作业,需要等到其状态变更结束后(AVAILABLE或UNAVAILABLE),
             // 再根据其状态判断:AVAILABLE,判断该组是否已经在作业中,不在则加入;UNAVAILABLE,则不做操作。
-            for (Code code:codeList) {
+            for (CodeWork code:codeList) {
                 if (code.getStatus()==AssignmentStatus.AVAILABLE) {
                     assignmentPaperBuilder.addGroupToPaper(code, group);
                 } else {

+ 0 - 10
src/main/java/nju/seec/SEECdemo/logic/vo/InterCodeAppInfoVO.java

@@ -1,10 +0,0 @@
-package nju.seec.SEECdemo.logic.vo;
-
-import lombok.Data;
-
-@Data
-public class InterCodeAppInfoVO {
-    private int id;
-    private Long projectId;
-    private String applicationName;
-}

+ 5 - 5
src/main/java/nju/seec/SEECdemo/logic/vo/CodeWorkVO.java → src/main/java/nju/seec/SEECdemo/logic/vo/assignmentWork/CodeWorkVO.java

@@ -1,8 +1,8 @@
-package nju.seec.SEECdemo.logic.vo;
+package nju.seec.SEECdemo.logic.vo.assignmentWork;
 
 import lombok.Data;
-import nju.seec.SEECdemo.data.entity.assignment.Code;
-import nju.seec.SEECdemo.data.entity.assignment.CodeResult;
+import nju.seec.SEECdemo.data.entity.assignment.CodeWork;
+import nju.seec.SEECdemo.data.entity.assignment.CodeWorkResult;
 import nju.seec.SEECdemo.logic.service.impl.assignment.mock.MockGroup;
 import nju.seec.SEECdemo.util.enums.AssignmentStatus;
 import org.springframework.beans.BeanUtils;
@@ -20,7 +20,7 @@ public class CodeWorkVO {
     private String courseName;
     private Set<NestedRecord> records;
 
-    public CodeWorkVO(Code assignment, String courseName, List<MockGroup> groupList){
+    public CodeWorkVO(CodeWork assignment, String courseName, List<MockGroup> groupList){
         BeanUtils.copyProperties(assignment, this);
         this.courseName = courseName;
         this.records = assignment.getResultSet().stream().map(c->{
@@ -34,7 +34,7 @@ public class CodeWorkVO {
         private Integer id;
         private NestedGroup group;
 
-        public NestedRecord(CodeResult assignmentResult, MockGroup group){
+        public NestedRecord(CodeWorkResult assignmentResult, MockGroup group){
             this.id = assignmentResult.getId();
             this.group = new NestedGroup(group);
         }

+ 10 - 0
src/main/java/nju/seec/SEECdemo/logic/vo/assignmentWork/external/ExternalCodeInfoVO.java

@@ -0,0 +1,10 @@
+package nju.seec.SEECdemo.logic.vo.assignmentWork.external;
+
+import lombok.Data;
+
+@Data
+public class ExternalCodeInfoVO {
+    private int id;
+    private String projectId;
+    private String applicationName;
+}

+ 4 - 5
src/main/java/nju/seec/SEECdemo/web/controller/CodeController.java → src/main/java/nju/seec/SEECdemo/web/controller/CodeWorkController.java

@@ -1,8 +1,7 @@
 package nju.seec.SEECdemo.web.controller;
 
-import nju.seec.SEECdemo.logic.service.CodeService;
+import nju.seec.SEECdemo.logic.service.assignmentWork.CodeWorkService;
 import nju.seec.SEECdemo.web.dto.CodeWorkDTO;
-import nju.seec.SEECdemo.web.response.EmptyResponse;
 import nju.seec.SEECdemo.web.response.ResourceResponse;
 import nju.seec.SEECdemo.web.response.Response;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -11,12 +10,12 @@ import org.springframework.web.bind.annotation.*;
 
 @RestController
 @RequestMapping("/api/assignment")
-public class CodeController {
+public class CodeWorkController {
 
     @Autowired
-    private final CodeService codeService;
+    private final CodeWorkService codeService;
 
-    public CodeController(CodeService codeService){
+    public CodeWorkController(CodeWorkService codeService){
         this.codeService = codeService;
     }