| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- package nju.seec.helper.service.impl;
- import cn.hutool.core.util.StrUtil;
- import lombok.SneakyThrows;
- import nju.seec.helper.aspect.auth.LoginUser;
- import nju.seec.helper.dao.CourseDAO;
- import nju.seec.helper.dao.CourseFileDAO;
- import nju.seec.helper.dto.coursefile.CourseFileDTO;
- import nju.seec.helper.entity.Course;
- import nju.seec.helper.entity.CourseFile;
- import nju.seec.helper.enums.ExceptionType;
- import nju.seec.helper.exception.HelperException;
- import nju.seec.helper.service.CourseFileService;
- import nju.seec.helper.service.CourseService;
- import nju.seec.helper.util.OssUtils;
- import nju.seec.helper.vo.CourseFileVO;
- import org.springframework.data.domain.Page;
- import org.springframework.data.domain.Pageable;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.web.multipart.MultipartFile;
- import java.io.File;
- /**
- * @author cst
- */
- @Service
- public class CourseFileServiceImpl implements CourseFileService {
- private static final String COURSE_FILE_STORE_DIR = "course_file";
- private final CourseDAO courseDAO;
- private final CourseFileDAO courseFileDAO;
- private final CourseService courseService;
- private final OssUtils ossUtils;
- public CourseFileServiceImpl(CourseDAO courseDAO, CourseFileDAO courseFileDAO, CourseService courseService, OssUtils ossUtils) {
- this.courseDAO = courseDAO;
- this.courseFileDAO = courseFileDAO;
- this.courseService = courseService;
- this.ossUtils = ossUtils;
- }
- @Transactional(rollbackFor = Exception.class)
- @SneakyThrows
- @Override
- public void uploadCourseFile(LoginUser user, CourseFileDTO courseFileDTO) {
- Course course = courseDAO.findCourseById(courseFileDTO.getCourseId());
- MultipartFile file = courseFileDTO.getFile();
- String fileName = file.getOriginalFilename();
- String objectName = getCourseFileObjectName(course.getId(), fileName);
- CourseFile courseFile = new CourseFile()
- .setCourseId(course.getId())
- .setTeacherId(user.getId())
- .setFileName(fileName)
- .setObjectName(objectName);
- if (!existsAddAuth(user, courseFile)) {
- throw HelperException.of(ExceptionType.FORBIDDEN, "您无权上传该附件");
- }
- if (courseFileDAO.existsByCourseIdAndFileName(courseFileDTO.getCourseId(), fileName)) {
- throw HelperException.of(ExceptionType.CONFLICT, "该课程已有同名附件");
- }
- courseFileDAO.save(courseFile);
- ossUtils.upload(objectName, file.getInputStream());
- }
- @Transactional(rollbackFor = Exception.class)
- @Override
- public void deleteCourseFile(LoginUser user, Long courseFileId) {
- CourseFile courseFile = courseFileDAO.findCourseFileById(courseFileId);
- if (!existsDelAuth(user, courseFile)) {
- throw HelperException.of(ExceptionType.FORBIDDEN, "您无权删除该附件");
- }
- courseFileDAO.delete(courseFile);
- ossUtils.delete(courseFile.getObjectName());
- }
- @Transactional(readOnly = true)
- @Override
- public Page<CourseFileVO> getCourseFilesByCourse(LoginUser user, Long courseId, String key, Pageable pageable) {
- if (!courseService.existsGetAuth(user, courseDAO.findCourseById(courseId))) {
- throw HelperException.of(ExceptionType.FORBIDDEN, "您无权访问该课程的附件");
- }
- return courseFileDAO.findByCourseIdAndFileNameContains(courseId, key, pageable).map(CourseFileVO::new);
- }
- @Transactional(readOnly = true)
- @Override
- public String getCourseFileUrl(LoginUser user, Long courseFileId) {
- CourseFile courseFile = courseFileDAO.findCourseFileById(courseFileId);
- if (!existsGetAuth(user, courseFile)) {
- throw HelperException.of(ExceptionType.FORBIDDEN, "您无权获取该附件的链接");
- }
- return ossUtils.getUrl(courseFile.getObjectName());
- }
- private String getCourseFileObjectName(Long courseId, String fileName) {
- return StrUtil.join(File.separator, COURSE_FILE_STORE_DIR, courseId, fileName);
- }
- @Override
- public boolean existsAddAuth(LoginUser user, CourseFile courseFile) {
- return courseDAO.findCourseById(courseFile.getCourseId()).getTeacher().getId().equals(user.getId());
- }
- @Override
- public boolean existsDelAuth(LoginUser user, CourseFile courseFile) {
- return courseFile.getTeacherId().equals(user.getId());
- }
- @Override
- public boolean existsUpdateAuth(LoginUser user, CourseFile courseFile) {
- return courseFile.getTeacherId().equals(user.getId());
- }
- @Override
- public boolean existsGetAuth(LoginUser user, CourseFile courseFile) {
- return courseService.existsGetAuth(user, courseDAO.findCourseById(courseFile.getCourseId()));
- }
- }
|