|
@@ -1,6 +1,7 @@
|
|
|
package nju.seec.helper.service.impl;
|
|
package nju.seec.helper.service.impl;
|
|
|
|
|
|
|
|
import com.google.common.collect.ImmutableSet;
|
|
import com.google.common.collect.ImmutableSet;
|
|
|
|
|
+import lombok.Cleanup;
|
|
|
import lombok.SneakyThrows;
|
|
import lombok.SneakyThrows;
|
|
|
import nju.seec.helper.dao.ChooseDAO;
|
|
import nju.seec.helper.dao.ChooseDAO;
|
|
|
import nju.seec.helper.dao.CourseDAO;
|
|
import nju.seec.helper.dao.CourseDAO;
|
|
@@ -10,6 +11,7 @@ import nju.seec.helper.dto.SlideDTO;
|
|
|
import nju.seec.helper.dto.modify.ModifySlideDTO;
|
|
import nju.seec.helper.dto.modify.ModifySlideDTO;
|
|
|
import nju.seec.helper.entity.Course;
|
|
import nju.seec.helper.entity.Course;
|
|
|
import nju.seec.helper.entity.Slide;
|
|
import nju.seec.helper.entity.Slide;
|
|
|
|
|
+import nju.seec.helper.service.AuthUtil;
|
|
|
import nju.seec.helper.service.SlideService;
|
|
import nju.seec.helper.service.SlideService;
|
|
|
import nju.seec.helper.util.CacheUtils;
|
|
import nju.seec.helper.util.CacheUtils;
|
|
|
import nju.seec.helper.util.Consts;
|
|
import nju.seec.helper.util.Consts;
|
|
@@ -23,6 +25,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
|
|
+import java.io.InputStream;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
import java.util.Objects;
|
|
@@ -56,9 +59,7 @@ public class SlideServiceImpl implements SlideService {
|
|
|
@Override
|
|
@Override
|
|
|
public SlideVO createSlide(LoginUser teacher, SlideDTO slideDTO) {
|
|
public SlideVO createSlide(LoginUser teacher, SlideDTO slideDTO) {
|
|
|
Course course = courseDAO.findCourseById(slideDTO.getCourseId());
|
|
Course course = courseDAO.findCourseById(slideDTO.getCourseId());
|
|
|
- if (!course.getTeacherId().equals(teacher.getId())) {
|
|
|
|
|
- throw HelperException.of(HelperException.ExceptionType.FORBIDDEN, "您无权创建该课程的幻灯片");
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ AuthUtil.checkDataAuth(teacher.getId(), course.getTeacherId(), "您无权创建该课程的幻灯片");
|
|
|
|
|
|
|
|
Slide slide = new Slide()
|
|
Slide slide = new Slide()
|
|
|
.setCourseId(slideDTO.getCourseId())
|
|
.setCourseId(slideDTO.getCourseId())
|
|
@@ -72,7 +73,8 @@ public class SlideServiceImpl implements SlideService {
|
|
|
switch (Objects.requireNonNull(file.getContentType())) {
|
|
switch (Objects.requireNonNull(file.getContentType())) {
|
|
|
// pdf
|
|
// pdf
|
|
|
case "application/pdf":
|
|
case "application/pdf":
|
|
|
- PDDocument doc = PDDocument.load(file.getInputStream());
|
|
|
|
|
|
|
+ @Cleanup InputStream fileInputStream = file.getInputStream();
|
|
|
|
|
+ PDDocument doc = PDDocument.load(fileInputStream);
|
|
|
pages = doc.getNumberOfPages();
|
|
pages = doc.getNumberOfPages();
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
@@ -92,15 +94,23 @@ public class SlideServiceImpl implements SlideService {
|
|
|
@Override
|
|
@Override
|
|
|
public SlideVO modifySlide(LoginUser user, ModifySlideDTO modifySlideDTO) {
|
|
public SlideVO modifySlide(LoginUser user, ModifySlideDTO modifySlideDTO) {
|
|
|
Slide slide = slideDAO.findSlideById(modifySlideDTO.getId());
|
|
Slide slide = slideDAO.findSlideById(modifySlideDTO.getId());
|
|
|
- if (!slide.getTeacherId().equals(user.getId())) {
|
|
|
|
|
- throw HelperException.of(HelperException.ExceptionType.FORBIDDEN, "您无权修改该幻灯片");
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ AuthUtil.checkDataAuth(user.getId(), slide.getTeacherId(), "您无权修改该幻灯片");
|
|
|
|
|
+
|
|
|
slide.setName(modifySlideDTO.getName())
|
|
slide.setName(modifySlideDTO.getName())
|
|
|
.setState(modifySlideDTO.getState());
|
|
.setState(modifySlideDTO.getState());
|
|
|
slide = slideDAO.save(slide);
|
|
slide = slideDAO.save(slide);
|
|
|
return new SlideVO(slide);
|
|
return new SlideVO(slide);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void removeSlide(LoginUser user, Integer slideId) {
|
|
|
|
|
+ Slide slide = slideDAO.findSlideById(slideId);
|
|
|
|
|
+ AuthUtil.checkDataAuth(user.getId(), slide.getTeacherId(), "您无权删除该幻灯片");
|
|
|
|
|
+
|
|
|
|
|
+ slide.setDeleteAt(System.currentTimeMillis());
|
|
|
|
|
+ slideDAO.save(slide);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Transactional(readOnly = true)
|
|
@Transactional(readOnly = true)
|
|
|
@Override
|
|
@Override
|
|
|
public List<SlideVO> teacherGetSlides(LoginUser teacher, String key, Pageable pageable) {
|
|
public List<SlideVO> teacherGetSlides(LoginUser teacher, String key, Pageable pageable) {
|
|
@@ -138,24 +148,22 @@ public class SlideServiceImpl implements SlideService {
|
|
|
@Transactional(readOnly = true)
|
|
@Transactional(readOnly = true)
|
|
|
@Override
|
|
@Override
|
|
|
public String getSlideUrl(LoginUser user, Integer slideId) {
|
|
public String getSlideUrl(LoginUser user, Integer slideId) {
|
|
|
- checkDataAccessAuth(user, slideId);
|
|
|
|
|
|
|
|
|
|
Slide slide = slideDAO.findSlideById(slideId);
|
|
Slide slide = slideDAO.findSlideById(slideId);
|
|
|
- String url = cacheUtils.get(Consts.SLIDE_URL_CACHE_NAME, slide.getObjectName());
|
|
|
|
|
|
|
+ checkDataAccessAuth(user, slide);
|
|
|
|
|
|
|
|
|
|
+ String url = cacheUtils.get(Consts.SLIDE_URL_CACHE_NAME, slide.getObjectName());
|
|
|
if (url != null) {
|
|
if (url != null) {
|
|
|
return url;
|
|
return url;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
url = fileUtils.getUrl(slide.getObjectName(), SLIDE_URL_LIVING_SECONDS);
|
|
url = fileUtils.getUrl(slide.getObjectName(), SLIDE_URL_LIVING_SECONDS);
|
|
|
cacheUtils.set(Consts.SLIDE_URL_CACHE_NAME, slide.getObjectName(), url, SLIDE_URL_LIVING_SECONDS, TimeUnit.SECONDS);
|
|
cacheUtils.set(Consts.SLIDE_URL_CACHE_NAME, slide.getObjectName(), url, SLIDE_URL_LIVING_SECONDS, TimeUnit.SECONDS);
|
|
|
return url;
|
|
return url;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private void checkDataAccessAuth(LoginUser user, Integer slideId) {
|
|
|
|
|
|
|
+ private void checkDataAccessAuth(LoginUser user, Slide slide) {
|
|
|
HelperException forbiddenEx = HelperException.of(HelperException.ExceptionType.FORBIDDEN, "您无权访问该幻灯片");
|
|
HelperException forbiddenEx = HelperException.of(HelperException.ExceptionType.FORBIDDEN, "您无权访问该幻灯片");
|
|
|
|
|
|
|
|
- Slide slide = slideDAO.findSlideById(slideId);
|
|
|
|
|
switch (user.getType()) {
|
|
switch (user.getType()) {
|
|
|
case TEACHER:
|
|
case TEACHER:
|
|
|
if (!slide.getTeacherId().equals(user.getId())) {
|
|
if (!slide.getTeacherId().equals(user.getId())) {
|