Kaynağa Gözat

开始Record相关工作

XuShengTao 6 yıl önce
ebeveyn
işleme
65cebb1004

+ 3 - 3
pom.xml

@@ -8,10 +8,10 @@
         <version>2.2.2.RELEASE</version>
         <relativePath/> <!-- lookup parent from repository -->
     </parent>
-    <groupId>com.es</groupId>
-    <artifactId>demo</artifactId>
+    <groupId>com.seec</groupId>
+    <artifactId>bok</artifactId>
     <version>0.0.1</version>
-    <name>demo</name>
+    <name>bok</name>
     <description>Demo project for Spring Boot</description>
 
     <properties>

+ 23 - 17
src/main/java/com/seec/bok/service/QuestionService.java

@@ -14,10 +14,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -26,8 +23,16 @@ public class QuestionService {
     @Qualifier("QuestionRepositoryImp") // inject Spring implementation here
     private QuestionRepository questionRepository;
 
-    public Page<Question> findByIdIn(Collection<String> id, Pageable pageable) {
-        return questionRepository.findByIdIn(id, pageable);
+    public QuestionVO saveNewOne(QuestionVO s) {
+        s.setId(UUID.randomUUID().toString());
+        final Question saved = questionRepository.save(s.toEntity());
+        return QuestionVO.of(saved);
+    }
+
+    public PageableQuestionListVO findByIdIn(Collection<String> id, Pageable pageable) {
+        final Page<Question> questionPage = questionRepository.findByIdIn(id, pageable);
+        PageableQuestionListVO vos=PageableQuestionListVO.of(questionPage);
+        return vos;
     }
 
     public QuestionVO findOne(String id) {
@@ -51,21 +56,22 @@ public class QuestionService {
         }
 
 
-        PageableQuestionListVO vos=PageableQuestionListVO.builder()
-                .questions(questionPage.getContent().stream().map(QuestionVO::of).collect(Collectors.toList()))
-                .page(
-                        PageVO.builder()
-                                .size(questionPage.getSize())
-                                .totalPages(questionPage.getTotalPages())
-                                .totalElements(questionPage.getTotalElements())
-                                .number(questionPage.getNumber())
-                                .build())
-                .build();
+        PageableQuestionListVO vos=PageableQuestionListVO.of(questionPage);
         return vos;
     }
 
     public QuestionVO updateQuestion(QuestionVO vo) {
-        return QuestionVO.of(questionRepository.save(vo.toEntity()));
+        final boolean exists = questionRepository.existsById(vo.getId());
+        if(exists){
+            return QuestionVO.of(questionRepository.save(vo.toEntity()));
+        }else{
+            throw EntityNotFoundException.from("更新id无效:"+vo.getId());
+        }
+
+    }
+
+    public void deleteById(String id) {
+        questionRepository.deleteById(id);
     }
 
     public Page<Question> search(QueryBuilder query, Pageable pageable) {

+ 9 - 1
src/main/java/com/seec/bok/service/exception/Asserts.java

@@ -12,7 +12,15 @@ public abstract class Asserts {
 			throw new EntityNotFoundException(message);
 		}
 	}
-
+	public static boolean equals(Object object1,Object object2) throws EntityNotFoundException {
+		if (object1 == null&&object2 == null) {
+			return true;
+		}else if(object1 !=null){
+			return object1.equals(object2);
+		}else {
+			return false;
+		}
+	}
 //	public static void isNull(Object object, String message) throws EntityConflictException {
 //		if (object != null) {
 //			throw new EntityConflictException(message);

+ 3 - 1
src/main/java/com/seec/bok/service/exception/EntityNotFoundException.java

@@ -8,7 +8,9 @@ public class EntityNotFoundException extends ServiceException {
 	public EntityNotFoundException() {
 		this(HTTP_STATUS.getReasonPhrase());
 	}
-
+	public static EntityNotFoundException from(String message){
+		return new EntityNotFoundException(message);
+	}
 	public EntityNotFoundException(String message) {
 		super(HTTP_STATUS.value(), message);
 	}

+ 17 - 5
src/main/java/com/seec/bok/web/controller/QuestionController.java

@@ -2,6 +2,8 @@ package com.seec.bok.web.controller;
 
 
 import com.seec.bok.service.QuestionService;
+import com.seec.bok.service.exception.Asserts;
+import com.seec.bok.service.exception.EntityNotAvailableException;
 import com.seec.bok.web.dto.PageDTO;
 import com.seec.bok.web.util.FakeQuestionData;
 import com.seec.bok.web.vo.PageableQuestionListVO;
@@ -12,8 +14,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
+import org.springframework.util.Assert;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Set;
 import java.util.UUID;
@@ -44,8 +48,8 @@ public class QuestionController {
     @PostMapping("")
     @Operation(description = "新建题目")
     public QuestionVO createQuestionById(@RequestBody QuestionVO question) {
-        question.setId(UUID.randomUUID().toString());
-        return question;
+
+        return questionService.saveNewOne(question);
     }
 
     @GetMapping("/{questionId}")
@@ -58,11 +62,19 @@ public class QuestionController {
     @Operation(description = "更新题目")
     public QuestionVO updateQuestionById(
             @PathVariable String questionId, @RequestBody QuestionVO question) {
-        return question;
+        final boolean equals = Asserts.equals(questionId, question.getId());
+        if(!equals){
+            throw new EntityNotAvailableException("在未知路径上更新!");
+        }
+        return questionService.updateQuestion(question);
     }
 
     @DeleteMapping("/{questionId}")
-    public Object deleteQuestionById(@PathVariable String questionId) {
-        return null;
+    public Object deleteQuestionById(
+            @PathVariable String questionId) {
+        questionService.deleteById(questionId);
+        HashMap<Object, Object> res = new HashMap<>(1);
+        res.put("code","0");
+        return res;
     }
 }

+ 16 - 0
src/main/java/com/seec/bok/web/vo/PageableQuestionListVO.java

@@ -1,9 +1,12 @@
 package com.seec.bok.web.vo;
 
+import com.seec.bok.back.entity.Question;
 import lombok.Builder;
 import lombok.Data;
+import org.springframework.data.domain.Page;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 /** @author Kunduin */
 @Data
@@ -11,4 +14,17 @@ import java.util.List;
 public class PageableQuestionListVO {
     List<QuestionVO> questions;
     PageVO page;
+    public static PageableQuestionListVO of(Page<Question> questionPage){
+        PageableQuestionListVO vos=PageableQuestionListVO.builder()
+                .questions(questionPage.getContent().stream().map(QuestionVO::of).collect(Collectors.toList()))
+                .page(
+                        PageVO.builder()
+                                .size(questionPage.getSize())
+                                .totalPages(questionPage.getTotalPages())
+                                .totalElements(questionPage.getTotalElements())
+                                .number(questionPage.getNumber())
+                                .build())
+                .build();
+        return vos;
+    }
 }

+ 6 - 3
src/main/java/com/seec/bok/web/vo/QuestionVO.java

@@ -41,10 +41,14 @@ public class QuestionVO {
         question.setStem(this.getStem());
 
         question.setLabels(new HashSet<>());
-        question.getLabels().addAll(this.tags);
+        if(this.tags!=null){
+            question.getLabels().addAll(this.tags);
+        }
 
         question.setKnowledgeIds(new HashSet<>());
-        question.getKnowledgeIds().addAll(this.knowledgeId);
+        if(this.knowledgeId!=null){
+            question.getKnowledgeIds().addAll(this.knowledgeId);
+        }
 
         question.setLastModifiedTime(this.lastModifiedTime);
 
@@ -80,7 +84,6 @@ public class QuestionVO {
         vo.answer=question.getAnswer();
 
         if(QuestionType.blank.equals(vo.type)){
-            if(question.getOptions()==null){}
             vo.blanks=new HashMap<>((Map)(Optional.ofNullable(question.getOptions()).orElse(new HashMap<>())));
         }else{
             vo.options=new HashMap<>((Map)(Optional.ofNullable(question.getOptions()).orElse(new HashMap<>())));

+ 6 - 3
src/test/java/com/seec/bok/QuestionTests.java

@@ -85,7 +85,7 @@ public class QuestionTests {
             "  \"id\" : \"uuidtestuuidtestuuidtestuuidtestuuidtestuuidtestuuidtest\"\n" +
             "}";
 
-
+    public static String  SAVE_ID=null;
     @Test
     public void test02_PostQuestion() throws Exception {
         Request request=new Request(HttpMethod.POST,"/api/question");
@@ -95,6 +95,7 @@ public class QuestionTests {
         System.out.println(request.OutToString(
                 "PostQuestion:新增问题,需要提供id"
         ));
+        SAVE_ID=(String)ret.get("id");
 //        String getStr="{\"id\":\"uuidtestuuidtestuuidtestuuidtestuuidtestuuidtestuuidtest\",\"type\":\"choice\",\"stem\":\"一次测试\",\"options\":{\"A\":\"2^k-1 >= n + k\",\"B\":\"2n-1 <= n + k\",\"C\":\"n = k\",\"D\":\"n-1 <= k\"},\"answer\":\"A\",\"key_points\":\"空\",\"analysis\":\"这里是分析\",\"tags\":null,\"knowledge_id\":[\"CF.CQ\"],\"lastModified\":null,\"tq_id\":\"uuidtestuuidtestuuidtestuuidtestuuidtestuuidtestuuidtest\",\"_links\":{\"self\":{\"href\":\"http://localhost:62201/api/question/uuidtestuuidtestuuidtestuuidtestuuidtestuuidtestuuidtest\"},\"question\":{\"href\":\"http://localhost:62201/api/question/uuidtestuuidtestuuidtestuuidtestuuidtestuuidtestuuidtest\"}}}";
 //        Assert.assertEquals(getStr
 //                ,request.getResDemoJson().replaceAll(""+Request.PORT,"62201"));
@@ -104,7 +105,8 @@ public class QuestionTests {
     public void test03_PutQuestion() throws Exception {
         Request request=new Request(HttpMethod.PUT,"/api/question/{id}");
         final Map map = mapper.readValue(json, Map.class);
-        request.put("id",map.get("id"));
+        request.put("id",SAVE_ID);
+        map.put("id",SAVE_ID);
         map.put("analysis","这里新的分析");
         request.setRequest(map);
         Map ret = request.execute(Map.class);
@@ -127,7 +129,8 @@ public class QuestionTests {
     public void test05_DeleteQuestion() throws Exception {
         Request request=new Request(HttpMethod.DELETE,"/api/question/{id}");
         final Map map = mapper.readValue(json, Map.class);
-        request.put("id",map.get("id"));
+        request.put("id",SAVE_ID);
+        map.put("id",SAVE_ID);
         Map forObject = request.execute(Map.class);
         System.out.println(request.OutToString(
                 "DeleteQuestion:删除问题,需要提供id"