package nju.seec.helper.logic.service.impl; import nju.seec.helper.data.dao.SlideDAO; import nju.seec.helper.data.entity.Course; 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.CourseService; import nju.seec.helper.logic.service.SlideService; import nju.seec.helper.logic.vo.SlideVO; import nju.seec.helper.util.enums.SlideState; import nju.seec.helper.util.exception.HelperException; import nju.seec.helper.web.dto.SlideDTO; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; /** * @author cst */ @Service @CacheConfig(cacheNames = "slide") public class SlideServiceImpl implements SlideService { private final SlideDAO slideDAO; private final CourseService courseService; public SlideServiceImpl(SlideDAO slideDAO, CourseService courseService) { this.slideDAO = slideDAO; this.courseService = courseService; } @Override public List getSlides(String courseId, String key, Pageable pageable) { Page slidePage = slideDAO.findByCourseIdAndNameContains(courseId, key, pageable); return slidePage.getContent().stream() .map(slide -> EntityConvertFactory.convert(slide, SlideVO.class)) .collect(Collectors.toList()); } @Override public List getSlides(String key, Pageable pageable) { Page slidePage = slideDAO.findByNameContains(key, pageable); return slidePage.getContent().stream() .map(slide -> EntityConvertFactory.convert(slide, SlideVO.class)) .collect(Collectors.toList()); } @Cacheable(key = "#slideId") @Override public SlideVO getOneSlide(int slideId) { Slide slide = findSlideById(slideId); return EntityConvertFactory.convert(slide, SlideVO.class); } @Override public SlideVO create(SlideDTO slideDTO) { Slide slide = new Slide(); Course course = courseService.findCourseById(slideDTO.getCourseId()); slide.setCourseId(course.getId()); slide.setCourseName(course.getName()); slide.setName(slideDTO.getName()); slide.setState(SlideState.DRAFT); slide = slideDAO.save(slide); return EntityConvertFactory.convert(slide, SlideVO.class); } @CachePut(key = "#slideDTO.id") @Override public SlideVO update(SlideDTO slideDTO) { Slide slide = DTOConvertFactory.convert(slideDTO); slideDAO.save(slide); return EntityConvertFactory.convert(findSlideById(slideDTO.getId()), SlideVO.class); } @CacheEvict(key = "#slideId") @Override public void delete(int slideId) { slideDAO.deleteById(slideId); } private Slide findSlideById(int slideId) { return slideDAO.findById(slideId).orElseThrow(() -> HelperException.of( HelperException.ExceptionType.NOT_FOUND, "找不到幻灯片") ); } }