Browse Source

添加代码题

blumonilr 5 years ago
parent
commit
8619da9e92

+ 68 - 0
src/main/java/com/seec/bok/back/entity/CodeQuestion.java

@@ -0,0 +1,68 @@
+package com.seec.bok.back.entity;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.v3.core.util.Json;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.joda.time.DateTime;
+import org.springframework.data.elasticsearch.annotations.Document;
+
+import javax.persistence.Id;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+@Data
+@Document(indexName = "code_question", type = "_doc")
+public class CodeQuestion {
+
+    @Id
+    private String id;
+
+    @JsonProperty(value = "languages")
+    private List<String> languages;
+
+    @JsonProperty(value = "title")
+    private String title;
+
+    @JsonProperty(value = "description")
+    private String description;
+
+    @JsonProperty(value = "input_description")
+    private String inputDescription;
+
+    @JsonProperty(value = "output_description")
+    private String outputDescription;
+
+    @JsonProperty(value = "limited_memory")
+    private int limitedMemory;
+
+    @JsonProperty(value = "limited_mill_seconds")
+    private int limitMillSeconds;
+
+    @JsonProperty(value = "input_output_mapping")
+    private HashMap<String,String> inputOutputMapping;
+
+    @JsonProperty(value = "last_modified_at")
+    private DateTime lastModifiedAt;
+
+    public CodeQuestion(){
+        this.languages = new ArrayList<>();
+        this.inputOutputMapping = new HashMap<>();
+    }
+
+    public void saveInputAndOutput(String input, String output){
+        this.inputOutputMapping.put(input,output);
+        this.setLastModifiedAt(DateTime.now());
+    }
+
+    public void removeInputAndOutput(String input){
+        this.inputOutputMapping.remove(input);
+        this.setLastModifiedAt(DateTime.now());
+    }
+
+    @Override
+    public String toString(){
+        return Json.pretty(this);
+    }
+}

+ 17 - 0
src/main/java/com/seec/bok/back/repository/CodeQuestionRepository.java

@@ -0,0 +1,17 @@
+package com.seec.bok.back.repository;
+
+import com.seec.bok.back.entity.CodeQuestion;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.elasticsearch.annotations.Query;
+import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository("CodeQuestionRepository")
+public interface CodeQuestionRepository extends ElasticsearchRepository<CodeQuestion,String> {
+
+    Page<CodeQuestion> findAll(Pageable pageable);
+
+    @Query("{\"multi_match\": {\"query\": \"?0\", \"fields\": [\"title\"], \"fuzziness\": \"AUTO\"}}")
+    Page<CodeQuestion> findAllByTitleLike(String content, Pageable pageable);
+}

+ 54 - 0
src/main/java/com/seec/bok/service/CodeQuestionService.java

@@ -0,0 +1,54 @@
+package com.seec.bok.service;
+
+import com.seec.bok.back.entity.CodeQuestion;
+import com.seec.bok.back.entity.Question;
+import com.seec.bok.back.repository.CodeQuestionRepository;
+import com.seec.bok.service.exception.EntityNotFoundException;
+import com.seec.bok.web.vo.CodeQuestionVO;
+import com.seec.bok.web.vo.PageVO;
+import com.seec.bok.web.vo.QuestionVO;
+import org.joda.time.DateTime;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+@Service
+public class CodeQuestionService {
+    @Autowired
+    private CodeQuestionRepository codeQuestionRepository;
+
+    public CodeQuestionVO saveNewOne(CodeQuestionVO s){
+        CodeQuestion codeQuestion = s.toEntity();
+        codeQuestion.setLastModifiedAt(DateTime.now());
+        codeQuestion.setId(UUID.randomUUID().toString());
+        codeQuestion = codeQuestionRepository.save(codeQuestion);
+        return CodeQuestionVO.of(codeQuestion);
+    }
+
+    public CodeQuestionVO updateOne(CodeQuestionVO s){
+        CodeQuestion question = codeQuestionRepository.findById(s.getId()).orElseThrow(EntityNotFoundException::new);
+        question.setLastModifiedAt(DateTime.now());
+        question = codeQuestionRepository.save(question);
+        return CodeQuestionVO.of(question);
+    }
+
+    public CodeQuestionVO findById(String id){
+        final CodeQuestion question = codeQuestionRepository.findById(id).orElseThrow(EntityNotFoundException::new);
+        return CodeQuestionVO.of(question);
+    }
+
+    public Page<CodeQuestionVO> findAllByTitle(String title, Pageable pageable){
+        Page<CodeQuestion> questionPage = codeQuestionRepository.findAllByTitleLike(title,pageable);
+        return questionPage.map(CodeQuestionVO::of);
+    }
+
+    public Page<CodeQuestionVO> findAll(Pageable pageable){
+        Page<CodeQuestion> questionPage = codeQuestionRepository.findAll(pageable);
+        return questionPage.map(CodeQuestionVO::of);
+    }
+}

+ 50 - 0
src/main/java/com/seec/bok/web/controller/CodeQuestionController.java

@@ -0,0 +1,50 @@
+package com.seec.bok.web.controller;
+
+import com.seec.bok.service.CodeQuestionService;
+import com.seec.bok.web.vo.CodeQuestionVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/api/codeQuestion")
+public class CodeQuestionController {
+    @Autowired
+    private CodeQuestionService codeQuestionService;
+
+    private static final Sort PAGE_SORT = Sort.by(Sort.Direction.DESC, "id");
+
+    @GetMapping("")
+    public Page<CodeQuestionVO> findAll(@RequestParam(defaultValue = "1") int page,
+                                        @RequestParam(defaultValue = "10") int limit){
+        Pageable pageable = PageRequest.of(page, limit,PAGE_SORT);
+        return codeQuestionService.findAll(pageable);
+    }
+
+    @GetMapping("/findOne")
+    public CodeQuestionVO findOne(@RequestParam String id){
+        return codeQuestionService.findById(id);
+    }
+
+    @GetMapping("/findByTitle")
+    public Page<CodeQuestionVO> findByTitle(@RequestParam(defaultValue = "1",required = false) int page,
+                                            @RequestParam(defaultValue = "10",required = false) int limit,
+                                            @RequestParam String title){
+        Pageable pageable = PageRequest.of(page, limit,PAGE_SORT);
+        return codeQuestionService.findAllByTitle(title,pageable);
+    }
+
+    @PostMapping("/save")
+    public CodeQuestionVO saveNewOne(@RequestBody CodeQuestionVO codeQuestionVO){
+        return codeQuestionService.saveNewOne(codeQuestionVO);
+    }
+
+    @PostMapping("/update")
+    public CodeQuestionVO updateOne(@RequestBody CodeQuestionVO codeQuestionVO){
+        return codeQuestionService.updateOne(codeQuestionVO);
+    }
+
+}

+ 48 - 0
src/main/java/com/seec/bok/web/vo/CodeQuestionVO.java

@@ -0,0 +1,48 @@
+package com.seec.bok.web.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.seec.bok.back.entity.CodeQuestion;
+import com.seec.bok.back.entity.Question;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.joda.time.DateTime;
+import org.springframework.beans.BeanUtils;
+
+import java.util.HashMap;
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class CodeQuestionVO {
+
+    String id;
+    private List<String> languages;
+    private String title;
+
+    private String description;
+    private String inputDescription;
+    private String outputDescription;
+
+    private int limitedMemory;
+    private int limitMillSeconds;
+
+    private HashMap<String,String> inputOutputMapping;
+
+    private DateTime lastModifiedAt;
+
+    public CodeQuestion toEntity(){
+        CodeQuestion codeQuestion = new CodeQuestion();
+        BeanUtils.copyProperties(this,codeQuestion);
+        return codeQuestion;
+    }
+
+    public static CodeQuestionVO of(CodeQuestion s){
+        CodeQuestionVO codeQuestionVO = new CodeQuestionVO();
+        BeanUtils.copyProperties(s,codeQuestionVO);
+        return codeQuestionVO;
+    }
+}