Kaynağa Gözat

create/update competiton; add task to competition

chensc 8 yıl önce
ebeveyn
işleme
1fa96d8bfe

+ 1 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Competition2TaskDao.java

@@ -9,4 +9,5 @@ import org.springframework.data.repository.CrudRepository;
  */
 public interface Competition2TaskDao extends CrudRepository<Competition2Task, Long> {
     Competition2Task findByCompetitionIdAndIsActive(Long competitionId, Boolean isActive);
+    Competition2Task findByCompetitionIdAndIndex(Long competitionId, Integer index);
 }

+ 19 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/CompetitionService.java

@@ -69,12 +69,28 @@ public interface CompetitionService {
     boolean checkIfAddonsOverFlow(Long competitionId, Long userId, boolean isTeam);
 
     /**
-     * add task to a competition
+     * add a task to a competition
      * @param competitionId
      * @param taskId
-     * @param description
+     * @param index
      * @return
      */
-    Competition2Task addTask2Competition(Long competitionId, Long taskId, String description);
+    Competition2Task addTask2Competition(Long competitionId, Long taskId, Integer index);
+
+    /**
+     * create/update a new competition
+     * @param competition
+     * @return
+     */
+    Competition createOrUpdateCompetition(Competition competition);
+
+    /**
+     * get task id by competitionId and index, if not exists return null
+     * @param competitionId
+     * @param index
+     * @return
+     */
+    Competition2Task getCompetition2TaskbyCompetitionIdAndIndex(Long competitionId, Integer index);
+
 
 }

+ 22 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/CompetitionServiceImpl.java

@@ -11,7 +11,9 @@ import org.springframework.stereotype.Service;
 import java.util.List;
 
 /**
- * Created by tangshanshan on 2017/11/3.
+ *
+ * @author tangshanshan
+ * @date 2017/11/3
  */
 @Service
 public class CompetitionServiceImpl implements CompetitionService {
@@ -69,7 +71,24 @@ public class CompetitionServiceImpl implements CompetitionService {
     }
 
     @Override
-    public Competition2Task addTask2Competition(Long competitionId, Long taskId, String description) {
-        return null;
+    public Competition2Task addTask2Competition(Long competitionId, Long taskId, Integer index) {
+        Competition2Task competition2Task = new Competition2Task();
+        competition2Task.setActive(false);
+        competition2Task.setCompetitionId(competitionId);
+        competition2Task.setIndex(index);
+        competition2Task.setTaskId(taskId);
+        competition2Task = competition2TaskDao.save(competition2Task);
+        return competition2Task;
+    }
+
+    @Override
+    public Competition createOrUpdateCompetition(Competition competition) {
+        return competitionDao.save(competition);
     }
+
+    @Override
+    public Competition2Task getCompetition2TaskbyCompetitionIdAndIndex(Long competitionId, Integer index) {
+        return competition2TaskDao.findByCompetitionIdAndIndex(competitionId, index);
+    }
+
 }

+ 19 - 4
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/CompetitionController.java

@@ -1,16 +1,15 @@
 package cn.iselab.mooctest.site.web.ctrl;
 
 import cn.iselab.mooctest.site.common.constant.UrlConstants;
+import cn.iselab.mooctest.site.models.Competition;
+import cn.iselab.mooctest.site.models.Competition2Task;
 import cn.iselab.mooctest.site.models.Qualification;
 import cn.iselab.mooctest.site.models.User;
 import cn.iselab.mooctest.site.web.data.CompetitionVO;
 import cn.iselab.mooctest.site.web.logic.CompetitionLogic;
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -33,4 +32,20 @@ public class CompetitionController {
         User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         return competitionLogic.enterCompetition(competitionId, user.getId());
     }
+
+    @RequestMapping(value = UrlConstants.API + "competition", method = RequestMethod.POST)
+    public CompetitionVO createCompetition(@RequestBody CompetitionVO competitionVO) {
+        return competitionLogic.createCompetition(competitionVO);
+    }
+
+    @RequestMapping(value = UrlConstants.API + "competition", method = RequestMethod.PUT)
+    public CompetitionVO updateCompetition(@RequestBody CompetitionVO competitionVO) {
+        return competitionLogic.updateCompetition(competitionVO);
+    }
+
+    @RequestMapping(value = UrlConstants.API + "competition/{competitionId}/tasks/{index}", method = RequestMethod.POST)
+    public Competition2Task addTask2Competition(@PathVariable("competitionId") Long competitionId, @PathVariable("index") Integer index, Long taskId, boolean ifForce) {
+        return competitionLogic.addTask2Competition(competitionId, taskId, index, ifForce);
+    }
+
 }

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/CompetitionVOWrapper.java

@@ -33,6 +33,6 @@ public class CompetitionVOWrapper extends BaseWrapper<CompetitionVO,Competition>
 
     @Override
     public Competition unwrap(CompetitionVO data) {
-        return null;
+        return Converter.convert(Competition.class, data);
     }
 }

+ 5 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/CompetitionLogic.java

@@ -1,5 +1,7 @@
 package cn.iselab.mooctest.site.web.logic;
 
+import cn.iselab.mooctest.site.models.Competition;
+import cn.iselab.mooctest.site.models.Competition2Task;
 import cn.iselab.mooctest.site.models.Qualification;
 import cn.iselab.mooctest.site.web.data.CompetitionVO;
 
@@ -11,5 +13,7 @@ import java.util.List;
 public interface CompetitionLogic {
     List<CompetitionVO> getCompetitionList(Long userId);
     Qualification enterCompetition(Long competitionId, Long userId);
-
+    CompetitionVO createCompetition(CompetitionVO competition);
+    CompetitionVO updateCompetition(CompetitionVO competition);
+    Competition2Task addTask2Competition(Long competitionId, Long taskId, Integer index, boolean isForce);
 }

+ 35 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/CompetitionLogicImpl.java

@@ -1,10 +1,13 @@
 package cn.iselab.mooctest.site.web.logic.impl;
 
 import cn.iselab.mooctest.site.models.Competition;
+import cn.iselab.mooctest.site.models.Competition2Task;
 import cn.iselab.mooctest.site.models.Qualification;
 import cn.iselab.mooctest.site.service.CompetitionService;
+import cn.iselab.mooctest.site.service.TaskService;
 import cn.iselab.mooctest.site.web.data.CompetitionVO;
 import cn.iselab.mooctest.site.web.data.wrapper.CompetitionVOWrapper;
+import cn.iselab.mooctest.site.web.exception.HttpBadRequestException;
 import cn.iselab.mooctest.site.web.logic.CompetitionLogic;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -22,6 +25,9 @@ public class CompetitionLogicImpl implements CompetitionLogic{
     CompetitionService competitionService;
     @Autowired
     CompetitionVOWrapper competitionVOWrapper;
+    @Autowired
+    TaskService taskService;
+
 
     @Override
     public List<CompetitionVO> getCompetitionList(Long userId) {
@@ -40,4 +46,33 @@ public class CompetitionLogicImpl implements CompetitionLogic{
         qualification.setStatus(competition.getStatus());
         return competitionService.createQualification(qualification);
     }
+
+    @Override
+    public CompetitionVO createCompetition(CompetitionVO competitionVO) {
+        if(competitionVO.getId() != null) {
+            throw new HttpBadRequestException("Invalid competition");
+        }
+        Competition competition = competitionService.createOrUpdateCompetition(competitionVOWrapper.unwrap(competitionVO));
+        return competitionVOWrapper.wrap(competition);
+    }
+
+    @Override
+    public CompetitionVO updateCompetition(CompetitionVO competitionVO) {
+        if(competitionVO.getId() == null) {
+            throw new HttpBadRequestException("Invalid competition");
+        }
+        Competition competition = competitionService.createOrUpdateCompetition(competitionVOWrapper.unwrap(competitionVO));
+        return competitionVOWrapper.wrap(competition);
+    }
+
+    @Override
+    public Competition2Task addTask2Competition(Long competitionId, Long taskId, Integer index, boolean ifForce) {
+        if(competitionService.getCompetiton(competitionId) == null || taskService.getTask(taskId) == null) {
+            throw new HttpBadRequestException("Invalid competition or task");
+        }
+        if(!ifForce && competitionService.getCompetition2TaskbyCompetitionIdAndIndex(competitionId, index) != null ) {
+            throw new HttpBadRequestException("the index of competition has been set");
+        }
+        return competitionService.addTask2Competition(competitionId, taskId, index);
+    }
 }