Просмотр исходного кода

refactor: 重新定义数据结构以及相应的接口修改

ChenSiTong 6 лет назад
Родитель
Сommit
01f4d2edb7
34 измененных файлов с 119 добавлено и 421 удалено
  1. 0 6
      pom.xml
  2. 2 0
      src/main/java/nju/seec/helper/HelperApplication.java
  3. 2 2
      src/main/java/nju/seec/helper/aop/log/LogAspect.java
  4. 0 26
      src/main/java/nju/seec/helper/config/FileProperties.java
  5. 3 3
      src/main/java/nju/seec/helper/data/entity/Comment.java
  6. 8 2
      src/main/java/nju/seec/helper/data/entity/Item.java
  7. 0 35
      src/main/java/nju/seec/helper/data/entity/Page.java
  8. 0 11
      src/main/java/nju/seec/helper/data/entity/Quiz.java
  9. 3 2
      src/main/java/nju/seec/helper/data/entity/Slide.java
  10. 12 34
      src/main/java/nju/seec/helper/logic/convert/DTOConvertFactory.java
  11. 13 35
      src/main/java/nju/seec/helper/logic/convert/EntityConvertFactory.java
  12. 0 14
      src/main/java/nju/seec/helper/logic/convert/Pair.java
  13. 0 16
      src/main/java/nju/seec/helper/logic/service/FileService.java
  14. 3 10
      src/main/java/nju/seec/helper/logic/service/SlideService.java
  15. 0 44
      src/main/java/nju/seec/helper/logic/service/impl/FileServiceImpl.java
  16. 8 12
      src/main/java/nju/seec/helper/logic/service/impl/SlideServiceImpl.java
  17. 5 1
      src/main/java/nju/seec/helper/logic/vo/ItemVO.java
  18. 0 16
      src/main/java/nju/seec/helper/logic/vo/Page.java
  19. 0 14
      src/main/java/nju/seec/helper/logic/vo/PageInfo.java
  20. 0 18
      src/main/java/nju/seec/helper/logic/vo/PageVO.java
  21. 0 22
      src/main/java/nju/seec/helper/logic/vo/SlideOutlineVO.java
  22. 3 2
      src/main/java/nju/seec/helper/logic/vo/SlideVO.java
  23. 4 0
      src/main/java/nju/seec/helper/util/enums/ItemTransition.java
  24. 19 0
      src/main/java/nju/seec/helper/util/enums/ItemType.java
  25. 1 0
      src/main/java/nju/seec/helper/util/enums/QuizType.java
  26. 4 3
      src/main/java/nju/seec/helper/util/exception/HelperException.java
  27. 0 26
      src/main/java/nju/seec/helper/web/controller/FileController.java
  28. 9 23
      src/main/java/nju/seec/helper/web/controller/SlideController.java
  29. 8 0
      src/main/java/nju/seec/helper/web/dto/ItemDTO.java
  30. 0 16
      src/main/java/nju/seec/helper/web/dto/PageDTO.java
  31. 0 15
      src/main/java/nju/seec/helper/web/dto/QuizDTO.java
  32. 5 3
      src/main/java/nju/seec/helper/web/dto/SlideDTO.java
  33. 7 1
      src/main/java/nju/seec/helper/web/response/PageResourceResponse.java
  34. 0 9
      src/main/resources/application-dev.yml

+ 0 - 6
pom.xml

@@ -89,12 +89,6 @@
             <artifactId>guava</artifactId>
             <version>28.1-jre</version>
         </dependency>
-        <!-- https://mvnrepository.com/artifact/org.commonjava.googlecode.markdown4j/markdown4j -->
-        <dependency>
-            <groupId>org.commonjava.googlecode.markdown4j</groupId>
-            <artifactId>markdown4j</artifactId>
-            <version>2.2-cj-1.1</version>
-        </dependency>
     </dependencies>
 
     <build>

+ 2 - 0
src/main/java/nju/seec/helper/HelperApplication.java

@@ -2,6 +2,7 @@ package nju.seec.helper;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
 import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 
@@ -9,6 +10,7 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
  * @author cst
  */
 @SpringBootApplication
+@ConfigurationPropertiesScan(basePackages = "nju.seec.helper.config")
 @EnableJpaRepositories(basePackages = "nju.seec.helper.data.dao")
 @EnableCaching
 public class HelperApplication {

+ 2 - 2
src/main/java/nju/seec/helper/aop/log/LogAspect.java

@@ -23,7 +23,7 @@ import javax.servlet.http.HttpServletRequest;
 public class LogAspect {
     @Pointcut("execution(public * nju.seec.helper.web.controller..*.*(..))")
     public void controllerPointcut() {
-
+        // Do nothing because it's just a controller pointcut
     }
 
     @SneakyThrows
@@ -44,7 +44,7 @@ public class LogAspect {
 
     @Pointcut("execution(public * nju.seec.helper.logic.service.impl..*.*(..))")
     public void servicePointcut() {
-
+        // Do nothing because it's just a service pointcut
     }
 
     @AfterThrowing(pointcut = "servicePointcut()", throwing = "e")

+ 0 - 26
src/main/java/nju/seec/helper/config/FileProperties.java

@@ -1,26 +0,0 @@
-package nju.seec.helper.config;
-
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-import org.springframework.util.ResourceUtils;
-
-import java.io.FileNotFoundException;
-import java.nio.file.Path;
-
-/**
- * @author cst
- */
-@ConfigurationProperties(prefix = "file")
-@Component
-@Data
-public class FileProperties {
-    private String storeDir;
-
-    public Path getFileDirPath() throws FileNotFoundException {
-        Path classpath = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX).toPath();
-        Path staticPath = classpath.resolve("static/");
-
-        return staticPath.resolve(storeDir);
-    }
-}

+ 3 - 3
src/main/java/nju/seec/helper/data/entity/Comment.java

@@ -16,8 +16,8 @@ public class Comment {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private int id;
-    @Column(name = "page_id", nullable = false)
-    private int pageId;
+    @Column(name = "item_id", nullable = false)
+    private int itemId;
     @Column(name = "before_comment_id")
     private Integer beforeCommentId;
     @Column(name = "student_name", nullable = false)
@@ -25,6 +25,6 @@ public class Comment {
     @Column(name = "student_id", nullable = false)
     private String studentId;
     @Column(name = "create_time", updatable = false)
-    @CreationTimestamp()
+    @CreationTimestamp
     private LocalDateTime createTime;
 }

+ 8 - 2
src/main/java/nju/seec/helper/data/entity/Item.java

@@ -1,6 +1,8 @@
 package nju.seec.helper.data.entity;
 
 import lombok.Data;
+import nju.seec.helper.util.enums.ItemTransition;
+import nju.seec.helper.util.enums.ItemType;
 
 import javax.persistence.*;
 
@@ -20,10 +22,14 @@ public class Item {
 
     @Column(nullable = false)
     private int number;
+    @Enumerated(EnumType.STRING)
+    private ItemTransition transition;
+    @Enumerated(EnumType.STRING)
+    private ItemType type = ItemType.MD;
 
     private String content;
 
     @ManyToOne
-    @JoinColumn(name = "page_id")
-    private Page page;
+    @JoinColumn(name = "slide_id")
+    private Slide slide;
 }

+ 0 - 35
src/main/java/nju/seec/helper/data/entity/Page.java

@@ -1,35 +0,0 @@
-package nju.seec.helper.data.entity;
-
-import lombok.Data;
-
-import javax.persistence.*;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * @author cst
- */
-@Data
-@Entity
-@Table(name = "page")
-public class Page {
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private int id;
-
-    @Column(name = "frontend_id")
-    private String frontendId;
-
-    @Column(nullable = false)
-    private int number;
-
-    @OneToMany(mappedBy = "page")
-    private Set<Item> items = new HashSet<>();
-
-    @OneToMany(mappedBy = "page")
-    private Set<Quiz> quizzes = new HashSet<>();
-
-    @ManyToOne
-    @JoinColumn(name = "slide_id")
-    private Slide slide;
-}

+ 0 - 11
src/main/java/nju/seec/helper/data/entity/Quiz.java

@@ -1,7 +1,6 @@
 package nju.seec.helper.data.entity;
 
 import lombok.Data;
-import nju.seec.helper.util.enums.QuizType;
 
 import javax.persistence.*;
 
@@ -19,15 +18,5 @@ public class Quiz {
     @Column(name = "system_id", nullable = false)
     private String systemId;
 
-    @Enumerated(EnumType.STRING)
-    private QuizType type;
-
-    @Column(nullable = false)
-    private int number;
-
     private String content;
-
-    @ManyToOne
-    @JoinColumn(name = "page_id")
-    private Page page;
 }

+ 3 - 2
src/main/java/nju/seec/helper/data/entity/Slide.java

@@ -3,7 +3,6 @@ package nju.seec.helper.data.entity;
 import lombok.Data;
 import nju.seec.helper.util.enums.SlideState;
 import org.hibernate.annotations.CreationTimestamp;
-import org.hibernate.annotations.Generated;
 import org.hibernate.annotations.UpdateTimestamp;
 
 import javax.persistence.*;
@@ -28,6 +27,8 @@ public class Slide {
     @Column(name = "frontend_id")
     private String frontendId;
 
+    private String placeholder;
+
     @Enumerated(EnumType.STRING)
     @Column(nullable = false)
     private SlideState state;
@@ -36,7 +37,7 @@ public class Slide {
     private String name;
 
     @OneToMany(mappedBy = "slide")
-    private Set<Page> pages = new HashSet<>();
+    private Set<Item> items = new HashSet<>();
 
     @Column(name = "create_time", updatable = false)
     @CreationTimestamp

+ 12 - 34
src/main/java/nju/seec/helper/logic/convert/DTOConvertFactory.java

@@ -3,8 +3,6 @@ package nju.seec.helper.logic.convert;
 import com.google.common.collect.ImmutableMap;
 import lombok.experimental.UtilityClass;
 import nju.seec.helper.data.entity.Item;
-import nju.seec.helper.data.entity.Page;
-import nju.seec.helper.data.entity.Quiz;
 import nju.seec.helper.data.entity.Slide;
 import nju.seec.helper.web.dto.SlideDTO;
 
@@ -26,39 +24,19 @@ public class DTOConvertFactory {
                 slide.setFrontendId(slideDTO.getFrontendId());
                 slide.setState(slideDTO.getState());
                 slide.setName(slideDTO.getName());
+                slide.setPlaceholder(slideDTO.getPlaceholder());
+                AtomicInteger itemIndex = new AtomicInteger();
+                slide.setItems(slideDTO.getItems().stream()
+                        .map(itemDTO -> {
+                            Item item = new Item();
+                            item.setContent(itemDTO.getContent());
+                            item.setFrontendId(itemDTO.getFrontendId());
+                            item.setId(itemDTO.getId());
+                            item.setTransition(itemDTO.getTransition());
+                            item.setType(itemDTO.getType());
 
-                AtomicInteger pageIndex = new AtomicInteger();
-                slide.setPages(slideDTO.getPages().stream()
-                        .map(pageDTO -> {
-                            Page page = new Page();
-                            page.setId(pageDTO.getId());
-                            page.setFrontendId(pageDTO.getFrontendId());
-                            page.setNumber(pageIndex.getAndIncrement());
-
-                            AtomicInteger quizIndex = new AtomicInteger();
-                            page.setQuizzes(pageDTO.getQuizzes().stream()
-                                    .map(quizDTO -> {
-                                        Quiz quiz = new Quiz();
-                                        quiz.setId(quizDTO.getId());
-                                        quiz.setSystemId(quizDTO.getSystemId());
-                                        quiz.setContent(quizDTO.getContent());
-                                        quiz.setNumber(quizIndex.getAndIncrement());
-                                        return quiz;
-                                    })
-                                    .collect(Collectors.toSet()));
-
-                            AtomicInteger itemIndex = new AtomicInteger();
-                            page.setItems(pageDTO.getItems().stream()
-                                    .map(itemDTO -> {
-                                        Item item = new Item();
-                                        item.setId(itemDTO.getId());
-                                        item.setFrontendId(itemDTO.getFrontendId());
-                                        item.setContent(itemDTO.getContent());
-                                        item.setNumber(itemIndex.getAndIncrement());
-                                        return item;
-                                    })
-                                    .collect(Collectors.toSet()));
-                            return page;
+                            item.setNumber(itemIndex.getAndIncrement());
+                            return item;
                         }).collect(Collectors.toSet()));
                 return slide;
             })

+ 13 - 35
src/main/java/nju/seec/helper/logic/convert/EntityConvertFactory.java

@@ -3,10 +3,10 @@ package nju.seec.helper.logic.convert;
 import com.google.common.collect.ImmutableMap;
 import lombok.experimental.UtilityClass;
 import nju.seec.helper.data.entity.Item;
-import nju.seec.helper.data.entity.Page;
-import nju.seec.helper.data.entity.Quiz;
 import nju.seec.helper.data.entity.Slide;
-import nju.seec.helper.logic.vo.*;
+import nju.seec.helper.logic.vo.ItemVO;
+import nju.seec.helper.logic.vo.SlideVO;
+import org.springframework.data.util.Pair;
 
 import java.util.Comparator;
 import java.util.Map;
@@ -18,49 +18,27 @@ import java.util.stream.Collectors;
 @UtilityClass
 public class EntityConvertFactory {
     @SuppressWarnings("rawtypes")
-    private final static Map<Pair, EntityConverter> MAP = new ImmutableMap.Builder<Pair, EntityConverter>()
+    private final Map<Pair, EntityConverter> MAP = new ImmutableMap.Builder<Pair, EntityConverter>()
             .put(Pair.of(Slide.class, SlideVO.class), (EntityConverter<Slide, SlideVO>) slide -> SlideVO.builder()
                     .id(slide.getId())
                     .courseId(slide.getCourseId())
                     .frontendId(slide.getFrontendId())
+                    .placeholder(slide.getPlaceholder())
                     .name(slide.getName())
                     .state(slide.getState())
                     .createTime(slide.getCreateTime())
                     .updateTime(slide.getUpdateTime())
-                    .pages(slide.getPages().stream()
-                            .sorted(Comparator.comparingInt(Page::getNumber))
-                            .map(page -> PageVO.builder()
-                                    .id(page.getId())
-                                    .frontendId(page.getFrontendId())
-                                    .items(page.getItems().stream()
-                                            .sorted(Comparator.comparingInt(Item::getNumber))
-                                            .map(item -> ItemVO.builder()
-                                                    .id(item.getId())
-                                                    .frontendId(item.getFrontendId())
-                                                    .content(item.getContent())
-                                                    .build())
-                                            .collect(Collectors.toList()))
-                                    .quizzes(page.getQuizzes().stream()
-                                            .sorted(Comparator.comparingInt(Quiz::getNumber))
-                                            .map(quiz -> QuizVO.builder()
-                                                    .id(quiz.getId())
-                                                    .systemId(quiz.getSystemId())
-                                                    .quizType(quiz.getType())
-                                                    .content(quiz.getContent())
-                                                    .build())
-                                            .collect(Collectors.toList()))
+                    .items(slide.getItems().stream()
+                            .sorted(Comparator.comparingInt(Item::getNumber))
+                            .map(item -> ItemVO.builder()
+                                    .id(item.getId())
+                                    .frontendId(item.getFrontendId())
+                                    .content(item.getContent())
+                                    .transition(item.getTransition())
+                                    .type(item.getType())
                                     .build())
                             .collect(Collectors.toList()))
                     .build())
-            .put(Pair.of(Slide.class, SlideOutlineVO.class), (EntityConverter<Slide, SlideOutlineVO>) slide -> SlideOutlineVO.builder()
-                    .id(slide.getId())
-                    .courseId(slide.getCourseId())
-                    .frontendId(slide.getFrontendId())
-                    .name(slide.getName())
-                    .state(slide.getState())
-                    .createTime(slide.getCreateTime())
-                    .updateTime(slide.getUpdateTime())
-                    .build())
             .build();
 
     @SuppressWarnings("unchecked")

+ 0 - 14
src/main/java/nju/seec/helper/logic/convert/Pair.java

@@ -1,14 +0,0 @@
-package nju.seec.helper.logic.convert;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-/**
- * @author cst
- */
-@Data
-@AllArgsConstructor(staticName = "of")
-public class Pair<T1, T2> {
-    private T1 t1;
-    private T2 t2;
-}

+ 0 - 16
src/main/java/nju/seec/helper/logic/service/FileService.java

@@ -1,16 +0,0 @@
-package nju.seec.helper.logic.service;
-
-import org.springframework.web.multipart.MultipartFile;
-
-/**
- * @author cst
- */
-public interface FileService {
-    /**
-     * 存储文件
-     *
-     * @param file 上传文件
-     * @return 文件路径
-     */
-    String upload(MultipartFile file);
-}

+ 3 - 10
src/main/java/nju/seec/helper/logic/service/SlideService.java

@@ -1,10 +1,9 @@
 package nju.seec.helper.logic.service;
 
-import nju.seec.helper.logic.vo.Page;
-import nju.seec.helper.logic.vo.SlideOutlineVO;
 import nju.seec.helper.logic.vo.SlideVO;
 import nju.seec.helper.web.dto.SlideDTO;
-import org.springframework.cache.annotation.Cacheable;
+
+import java.util.List;
 
 /**
  * @author cst
@@ -19,8 +18,7 @@ public interface SlideService {
      * @param key
      * @return
      */
-    @Cacheable()
-    Page<SlideOutlineVO> getSlides(String courseId, int page, int size, String key);
+    List<SlideVO> getSlides(String courseId, int page, int size, String key);
 
     /**
      * 根据id取得幻灯片
@@ -45,9 +43,4 @@ public interface SlideService {
      * @return
      */
     SlideVO update(SlideDTO slideDTO);
-
-//    /**
-//     * 仅更新幻灯片状态
-//     */
-//    SlideVO updateState(int slideId, SlideState state);
 }

+ 0 - 44
src/main/java/nju/seec/helper/logic/service/impl/FileServiceImpl.java

@@ -1,44 +0,0 @@
-package nju.seec.helper.logic.service.impl;
-
-import lombok.SneakyThrows;
-import nju.seec.helper.config.FileProperties;
-import nju.seec.helper.logic.service.FileService;
-import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Objects;
-import java.util.UUID;
-
-/**
- * @author cst
- */
-@Service
-public class FileServiceImpl implements FileService {
-    private final FileProperties fileProperties;
-
-    @SneakyThrows
-    public FileServiceImpl(FileProperties fileProperties) {
-        this.fileProperties = fileProperties;
-
-        Path fileDir = fileProperties.getFileDirPath();
-        if (Files.notExists(fileDir)) {
-            Files.createDirectories(fileDir);
-        }
-    }
-
-    @SneakyThrows
-    @Override
-    public String upload(MultipartFile file) {
-        String filename = StringUtils.cleanPath(Objects.requireNonNull(file.getOriginalFilename()));
-        String fileExtension = filename.substring(filename.lastIndexOf('.'));
-        filename = UUID.randomUUID() + fileExtension;
-        Path filepath = fileProperties.getFileDirPath().resolve(filename);
-        file.transferTo(filepath);
-
-        return File.separator + fileProperties.getStoreDir() + filename;
-    }
-}

+ 8 - 12
src/main/java/nju/seec/helper/logic/service/impl/SlideServiceImpl.java

@@ -5,9 +5,6 @@ import nju.seec.helper.data.entity.Slide;
 import nju.seec.helper.logic.convert.DTOConvertFactory;
 import nju.seec.helper.logic.convert.EntityConvertFactory;
 import nju.seec.helper.logic.service.SlideService;
-import nju.seec.helper.logic.vo.Page;
-import nju.seec.helper.logic.vo.PageInfo;
-import nju.seec.helper.logic.vo.SlideOutlineVO;
 import nju.seec.helper.logic.vo.SlideVO;
 import nju.seec.helper.util.enums.SlideState;
 import nju.seec.helper.util.exception.HelperException;
@@ -15,6 +12,7 @@ import nju.seec.helper.web.dto.SlideDTO;
 import org.springframework.cache.annotation.CacheConfig;
 import org.springframework.cache.annotation.CachePut;
 import org.springframework.cache.annotation.Cacheable;
+import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;
 
@@ -34,16 +32,12 @@ public class SlideServiceImpl implements SlideService {
     }
 
     @Override
-    public Page<SlideOutlineVO> getSlides(String courseId, int page, int size, String key) {
-        org.springframework.data.domain.Page<Slide> slidePage = slideDAO.findByNameContains(key, PageRequest.of(page - 1, size));
+    public List<SlideVO> getSlides(String courseId, int page, int size, String key) {
+        Page<Slide> slidePage = slideDAO.findByNameContains(key, PageRequest.of(page - 1, size));
 
-        List<SlideOutlineVO> slideOutlineVOs = slidePage.getContent().stream()
-                .map(slide -> EntityConvertFactory.convert(slide, SlideOutlineVO.class))
+        return slidePage.getContent().stream()
+                .map(slide -> EntityConvertFactory.convert(slide, SlideVO.class))
                 .collect(Collectors.toList());
-
-        PageInfo pageInfo = PageInfo.of(slidePage.getNumber() + 1, slidePage.getNumberOfElements());
-
-        return Page.of(slideOutlineVOs, pageInfo);
     }
 
     @Cacheable(key = "#slideId")
@@ -57,6 +51,8 @@ public class SlideServiceImpl implements SlideService {
     public SlideVO create(SlideDTO slideDTO) {
         Slide slide = new Slide();
         slide.setCourseId(slideDTO.getCourseId());
+        slide.setPlaceholder(slideDTO.getPlaceholder());
+        slide.setFrontendId(slideDTO.getFrontendId());
         slide.setName(slideDTO.getName());
         slide.setState(SlideState.DRAFT);
         slide = slideDAO.save(slide);
@@ -68,7 +64,7 @@ public class SlideServiceImpl implements SlideService {
     public SlideVO update(SlideDTO slideDTO) {
         Slide slide = DTOConvertFactory.convert(slideDTO);
         slideDAO.save(slide);
-        return getOneSlide(slideDTO.getId());
+        return EntityConvertFactory.convert(findSlideById(slideDTO.getId()), SlideVO.class);
     }
 
     private Slide findSlideById(int slideId) {

+ 5 - 1
src/main/java/nju/seec/helper/logic/vo/ItemVO.java

@@ -2,6 +2,8 @@ package nju.seec.helper.logic.vo;
 
 import lombok.Builder;
 import lombok.Data;
+import nju.seec.helper.util.enums.ItemTransition;
+import nju.seec.helper.util.enums.ItemType;
 
 /**
  * @author cst
@@ -9,7 +11,9 @@ import lombok.Data;
 @Data
 @Builder
 public class ItemVO {
-    private Integer id;
     private String frontendId;
+    private Integer id;
+    private ItemTransition transition;
+    private ItemType type;
     private String content;
 }

+ 0 - 16
src/main/java/nju/seec/helper/logic/vo/Page.java

@@ -1,16 +0,0 @@
-package nju.seec.helper.logic.vo;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @author cst
- */
-@Data
-@AllArgsConstructor(staticName = "of")
-public class Page<VO> {
-    private List<VO> vos;
-    private PageInfo pager;
-}

+ 0 - 14
src/main/java/nju/seec/helper/logic/vo/PageInfo.java

@@ -1,14 +0,0 @@
-package nju.seec.helper.logic.vo;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-/**
- * @author cst
- */
-@Data
-@AllArgsConstructor(staticName = "of")
-public class PageInfo {
-    private int page;
-    private int size;
-}

+ 0 - 18
src/main/java/nju/seec/helper/logic/vo/PageVO.java

@@ -1,18 +0,0 @@
-package nju.seec.helper.logic.vo;
-
-import lombok.Builder;
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @author cst
- */
-@Data
-@Builder
-public class PageVO {
-    private Integer id;
-    private String frontendId;
-    private List<ItemVO> items;
-    private List<QuizVO> quizzes;
-}

+ 0 - 22
src/main/java/nju/seec/helper/logic/vo/SlideOutlineVO.java

@@ -1,22 +0,0 @@
-package nju.seec.helper.logic.vo;
-
-import lombok.Builder;
-import lombok.Data;
-import nju.seec.helper.util.enums.SlideState;
-
-import java.time.LocalDateTime;
-
-/**
- * @author cst
- */
-@Data
-@Builder
-public class SlideOutlineVO {
-    private Integer id;
-    private String courseId;
-    private String frontendId;
-    private SlideState state;
-    private String name;
-    private LocalDateTime createTime;
-    private LocalDateTime updateTime;
-}

+ 3 - 2
src/main/java/nju/seec/helper/logic/vo/SlideVO.java

@@ -13,12 +13,13 @@ import java.util.List;
 @Data
 @Builder
 public class SlideVO {
-    private Integer id;
     private String courseId;
     private String frontendId;
+    private String placeholder;
+    private Integer id;
     private SlideState state;
     private String name;
-    private List<PageVO> pages;
+    private List<ItemVO> items;
     private LocalDateTime createTime;
     private LocalDateTime updateTime;
 }

+ 4 - 0
src/main/java/nju/seec/helper/util/enums/ItemTransition.java

@@ -0,0 +1,4 @@
+package nju.seec.helper.util.enums;
+
+public enum ItemTransition {
+}

+ 19 - 0
src/main/java/nju/seec/helper/util/enums/ItemType.java

@@ -0,0 +1,19 @@
+package nju.seec.helper.util.enums;
+
+/**
+ * @author cst
+ */
+public enum ItemType {
+    /**
+     * 普通MD
+     */
+    MD,
+    /**
+     * 问题
+     */
+    QUIZ,
+    /**
+     * 分栏
+     */
+    SUBFIELD
+}

+ 1 - 0
src/main/java/nju/seec/helper/util/enums/QuizType.java

@@ -4,4 +4,5 @@ package nju.seec.helper.util.enums;
  * @author cst
  */
 public enum QuizType {
+
 }

+ 4 - 3
src/main/java/nju/seec/helper/util/exception/HelperException.java

@@ -9,12 +9,13 @@ import lombok.Getter;
 @Getter
 @AllArgsConstructor(staticName = "of")
 public class HelperException extends RuntimeException {
-    private ExceptionType type;
-    private String msg;
+    private final ExceptionType type;
+    private final String msg;
 
     @Getter
     public enum ExceptionType {
-        FORBIDDEN(403), NOT_FOUND(404), SYSTEM_ERROR(500);
+        // http code
+        FORBIDDEN(403), NOT_FOUND(404), CONFLICT(409), SYSTEM_ERROR(500);
 
         private int code;
 

+ 0 - 26
src/main/java/nju/seec/helper/web/controller/FileController.java

@@ -1,26 +0,0 @@
-package nju.seec.helper.web.controller;
-
-import nju.seec.helper.logic.service.FileService;
-import nju.seec.helper.web.response.ResourceResponse;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-
-/**
- * @author cst
- */
-@RestController
-@RequestMapping("/api/file")
-public class FileController {
-    private final FileService fileService;
-
-    public FileController(FileService fileService) {
-        this.fileService = fileService;
-    }
-
-    @PostMapping("/upload")
-    public ResourceResponse<String> upload(MultipartFile file) {
-        return ResourceResponse.of(fileService.upload(file));
-    }
-}

+ 9 - 23
src/main/java/nju/seec/helper/web/controller/SlideController.java

@@ -1,11 +1,7 @@
 package nju.seec.helper.web.controller;
 
-import lombok.NonNull;
 import nju.seec.helper.logic.service.SlideService;
-import nju.seec.helper.logic.vo.Page;
-import nju.seec.helper.logic.vo.SlideOutlineVO;
 import nju.seec.helper.logic.vo.SlideVO;
-import nju.seec.helper.util.enums.SlideState;
 import nju.seec.helper.web.dto.SlideDTO;
 import nju.seec.helper.web.response.EmptyResponse;
 import nju.seec.helper.web.response.PageResourceResponse;
@@ -13,6 +9,8 @@ import nju.seec.helper.web.response.ResourceResponse;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * @author cst
  */
@@ -25,13 +23,13 @@ public class SlideController {
         this.slideService = slideService;
     }
 
-    @GetMapping("/course/{courseId:\\d+}")
-    public PageResourceResponse<SlideOutlineVO> getSlides(@PathVariable String courseId,
-                                                          @RequestParam(defaultValue = "1") int page,
-                                                          @RequestParam(defaultValue = Integer.MAX_VALUE + "") int size,
-                                                          @RequestParam(defaultValue = "") String key) {
-        Page<SlideOutlineVO> slideOutlineVOPage = slideService.getSlides(courseId, page, size, key);
-        return PageResourceResponse.of(slideOutlineVOPage.getVos(), slideOutlineVOPage.getPager());
+    @GetMapping("/course/{courseId}")
+    public PageResourceResponse<SlideVO> getSlides(@PathVariable String courseId,
+                                                   @RequestParam(defaultValue = "1") int page,
+                                                   @RequestParam(defaultValue = Integer.MAX_VALUE + "") int size,
+                                                   @RequestParam(defaultValue = "") String key) {
+        List<SlideVO> slideVOs = slideService.getSlides(courseId, page, size, key);
+        return PageResourceResponse.of(slideVOs, PageResourceResponse.PageInfo.of(page, slideVOs.size()));
     }
 
     /**
@@ -55,16 +53,4 @@ public class SlideController {
         slideService.update(slideDTO);
         return EmptyResponse.getInstance();
     }
-
-//    @PostMapping("/{slideId:\\d+}/updateState")
-//    public EmptyResponse updateState(@PathVariable int slideId, @NonNull SlideState slideState) {
-//        slideService.updateState(slideId, slideState);
-//        return EmptyResponse.getInstance();
-//    }
-
-
-//    @PostMapping("/{slideId:\\d+}/quiz/create")
-//    public EmptyResponse createQuiz(@PathVariable int slideId, @RequestBody Quiz quiz) {
-//        return null;
-//    }
 }

+ 8 - 0
src/main/java/nju/seec/helper/web/dto/ItemDTO.java

@@ -1,6 +1,10 @@
 package nju.seec.helper.web.dto;
 
 import lombok.Data;
+import nju.seec.helper.util.enums.ItemTransition;
+import nju.seec.helper.util.enums.ItemType;
+
+import javax.validation.constraints.NotNull;
 
 /**
  * @author cst
@@ -9,5 +13,9 @@ import lombok.Data;
 public class ItemDTO {
     private String frontendId;
     private Integer id;
+    @NotNull
+    private ItemTransition transition;
+    @NotNull
+    private ItemType type;
     private String content;
 }

+ 0 - 16
src/main/java/nju/seec/helper/web/dto/PageDTO.java

@@ -1,16 +0,0 @@
-package nju.seec.helper.web.dto;
-
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @author cst
- */
-@Data
-public class PageDTO {
-    private String frontendId;
-    private Integer id;
-    private List<QuizDTO> quizzes;
-    private List<ItemDTO> items;
-}

+ 0 - 15
src/main/java/nju/seec/helper/web/dto/QuizDTO.java

@@ -1,15 +0,0 @@
-package nju.seec.helper.web.dto;
-
-import lombok.Data;
-import nju.seec.helper.util.enums.QuizType;
-
-/**
- * @author cst
- */
-@Data
-public class QuizDTO {
-    private QuizType quizType;
-    private String systemId;
-    private Integer id;
-    private String content;
-}

+ 5 - 3
src/main/java/nju/seec/helper/web/dto/SlideDTO.java

@@ -12,12 +12,14 @@ import java.util.List;
  */
 @Data
 public class SlideDTO {
-    @NotNull
+    @NotEmpty
     private String courseId;
     private String frontendId;
+    private String placeholder;
     private Integer id;
+    @NotNull
+    private SlideState state;
     @NotEmpty
     private String name;
-    private SlideState state;
-    private List<PageDTO> pages;
+    private List<ItemDTO> items;
 }

+ 7 - 1
src/main/java/nju/seec/helper/web/response/PageResourceResponse.java

@@ -3,7 +3,6 @@ package nju.seec.helper.web.response;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import nju.seec.helper.logic.vo.PageInfo;
 
 import java.util.List;
 
@@ -16,4 +15,11 @@ import java.util.List;
 public class PageResourceResponse<T> extends SuccessResponse {
     private List<T> data;
     private PageInfo pager;
+
+    @Data
+    @AllArgsConstructor(staticName = "of")
+    public static class PageInfo {
+        private int page;
+        private int size;
+    }
 }

+ 0 - 9
src/main/resources/application-dev.yml

@@ -12,15 +12,6 @@ spring:
     console:
       enabled: true
       path: /h2
-  servlet:
-    multipart:
-      max-file-size: 100MB
-      max-request-size: 100MB
 server:
   port: 18080
-file:
-  store-dir: file/
-logging:
-  file:
-    path: target/classes/static