SlideServiceImpl.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package nju.seec.helper.logic.service.impl;
  2. import nju.seec.helper.data.dao.SlideDAO;
  3. import nju.seec.helper.data.entity.Course;
  4. import nju.seec.helper.data.entity.Slide;
  5. import nju.seec.helper.logic.convert.DTOConvertFactory;
  6. import nju.seec.helper.logic.convert.EntityConvertFactory;
  7. import nju.seec.helper.logic.service.CourseService;
  8. import nju.seec.helper.logic.service.SlideService;
  9. import nju.seec.helper.logic.vo.SlideVO;
  10. import nju.seec.helper.util.enums.SlideState;
  11. import nju.seec.helper.util.exception.HelperException;
  12. import nju.seec.helper.web.dto.SlideDTO;
  13. import org.springframework.cache.annotation.CacheConfig;
  14. import org.springframework.cache.annotation.CacheEvict;
  15. import org.springframework.cache.annotation.CachePut;
  16. import org.springframework.cache.annotation.Cacheable;
  17. import org.springframework.data.domain.Page;
  18. import org.springframework.data.domain.Pageable;
  19. import org.springframework.stereotype.Service;
  20. import java.util.List;
  21. import java.util.stream.Collectors;
  22. /**
  23. * @author cst
  24. */
  25. @Service
  26. @CacheConfig(cacheNames = "slide")
  27. public class SlideServiceImpl implements SlideService {
  28. private final SlideDAO slideDAO;
  29. private final CourseService courseService;
  30. public SlideServiceImpl(SlideDAO slideDAO, CourseService courseService) {
  31. this.slideDAO = slideDAO;
  32. this.courseService = courseService;
  33. }
  34. @Override
  35. public List<SlideVO> getSlides(String courseId, String key, Pageable pageable) {
  36. Page<Slide> slidePage = slideDAO.findByCourseIdAndNameContains(courseId, key, pageable);
  37. return slidePage.getContent().stream()
  38. .map(slide -> EntityConvertFactory.convert(slide, SlideVO.class))
  39. .collect(Collectors.toList());
  40. }
  41. @Override
  42. public List<SlideVO> getSlides(String key, Pageable pageable) {
  43. Page<Slide> slidePage = slideDAO.findByNameContains(key, pageable);
  44. return slidePage.getContent().stream()
  45. .map(slide -> EntityConvertFactory.convert(slide, SlideVO.class))
  46. .collect(Collectors.toList());
  47. }
  48. @Cacheable(key = "#slideId")
  49. @Override
  50. public SlideVO getOneSlide(int slideId) {
  51. Slide slide = findSlideById(slideId);
  52. return EntityConvertFactory.convert(slide, SlideVO.class);
  53. }
  54. @Override
  55. public SlideVO create(SlideDTO slideDTO) {
  56. Slide slide = new Slide();
  57. Course course = courseService.findCourseById(slideDTO.getCourseId());
  58. slide.setCourseId(course.getId());
  59. slide.setCourseName(course.getName());
  60. slide.setName(slideDTO.getName());
  61. slide.setState(SlideState.DRAFT);
  62. slide = slideDAO.save(slide);
  63. return EntityConvertFactory.convert(slide, SlideVO.class);
  64. }
  65. @CachePut(key = "#slideDTO.id")
  66. @Override
  67. public SlideVO update(SlideDTO slideDTO) {
  68. Slide slide = DTOConvertFactory.convert(slideDTO);
  69. slideDAO.save(slide);
  70. return EntityConvertFactory.convert(findSlideById(slideDTO.getId()), SlideVO.class);
  71. }
  72. @CacheEvict(key = "#slideId")
  73. @Override
  74. public void delete(int slideId) {
  75. slideDAO.deleteById(slideId);
  76. }
  77. private Slide findSlideById(int slideId) {
  78. return slideDAO.findById(slideId).orElseThrow(() -> HelperException.of(
  79. HelperException.ExceptionType.NOT_FOUND, "找不到幻灯片")
  80. );
  81. }
  82. }