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

oss-store 中使用 MediaService 替换 cn.reghao.oss.store.api.iface.media 中的接口

reghao 2 лет назад
Родитель
Сommit
09bc02c69d

+ 5 - 0
oss-store/src/main/java/cn/reghao/oss/store/db/repository/ImageRepository.java

@@ -9,6 +9,7 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -56,6 +57,10 @@ public class ImageRepository {
         return imageFileMapper.findByImageFileId(imageFileId);
     }
 
+    public List<ImageFile> getImageFiles(List<String> imageFileIds) {
+        return imageFileMapper.findByImageFileIds(new HashSet<>(imageFileIds));
+    }
+
     public List<ImageUrlDto> getImageUrls(Set<String> imageFileIds) {
         List<ImageUrlDto> list = new ArrayList<>();
         for (String imageFileId : imageFileIds) {

+ 169 - 0
oss-store/src/main/java/cn/reghao/oss/store/rpc/MediaServiceImpl.java

@@ -0,0 +1,169 @@
+package cn.reghao.oss.store.rpc;
+
+import cn.reghao.jutil.media.FFmpegWrapper;
+import cn.reghao.jutil.media.model.MediaProps;
+import cn.reghao.oss.store.api.constant.ObjectType;
+import cn.reghao.oss.store.api.dto.MediaDeleteDto;
+import cn.reghao.oss.store.api.dto.MediaScopeDto;
+import cn.reghao.oss.store.api.dto.ObjectMeta;
+import cn.reghao.oss.store.api.dto.media.*;
+import cn.reghao.oss.store.api.iface.MediaService;
+import cn.reghao.oss.store.api.iface.ObjectService;
+import cn.reghao.oss.store.db.repository.AudioRepository;
+import cn.reghao.oss.store.db.repository.ImageRepository;
+import cn.reghao.oss.store.db.repository.ObjectRepository;
+import cn.reghao.oss.store.db.repository.VideoRepository;
+import cn.reghao.oss.store.model.po.AudioFile;
+import cn.reghao.oss.store.model.po.ImageFile;
+import cn.reghao.oss.store.model.po.VideoFile;
+import cn.reghao.oss.store.service.SignService;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @author reghao
+ * @date 2024-03-07 09:52:59
+ */
+@DubboService
+@Service
+public class MediaServiceImpl implements MediaService {
+    private final LocalDateTime epoch = LocalDateTime.parse("1970-01-01T08:00");
+
+    private final ObjectService objectService;
+    private final ObjectRepository objectRepository;
+    private final VideoRepository videoRepository;
+    private final ImageRepository imageRepository;
+    private final AudioRepository audioRepository;
+    private final SignService signService;
+
+    public MediaServiceImpl(ObjectService objectService, ObjectRepository objectRepository,
+                            VideoRepository videoRepository, ImageRepository imageRepository,
+                            AudioRepository audioRepository, SignService signService) {
+        this.objectRepository = objectRepository;
+        this.objectService = objectService;
+        this.videoRepository = videoRepository;
+        this.imageRepository = imageRepository;
+        this.audioRepository = audioRepository;
+        this.signService = signService;
+    }
+
+    @Override
+    public void  setMediaFileScope(MediaScopeDto mediaScopeDto) {
+        List<String> mediaIds = mediaScopeDto.getMediaIds();
+        int scope = mediaScopeDto.getScope();
+        int contentType = mediaScopeDto.getObjectType();
+        ObjectType objectType = ObjectType.getByCode(contentType);
+        switch (objectType) {
+            case Video:
+                List<String> objectIds = videoRepository.getVideoFiles(mediaIds.get(0)).stream()
+                        .map(VideoFile::getObjectId)
+                        .collect(Collectors.toList());
+                objectService.setObjectsScope(scope, objectIds);
+                break;
+            case Image:
+                List<String> objectIds1 = imageRepository.getImageFiles(mediaIds).stream()
+                        .map(ImageFile::getObjectId)
+                        .collect(Collectors.toList());
+                objectService.setObjectsScope(scope, objectIds1);
+                break;
+            case Audio:
+                List<String> objectIds2 = audioRepository.findAudioFiles(mediaIds.get(0)).stream()
+                        .map(AudioFile::getObjectId)
+                        .collect(Collectors.toList());
+                objectService.setObjectsScope(scope, objectIds2);
+                break;
+            default:
+        }
+    }
+
+    @Override
+    public void deleteMediaFile(MediaDeleteDto mediaDeleteDto) {
+        List<String> mediaIds = mediaDeleteDto.getMediaIds();
+        int contentType = mediaDeleteDto.getObjectType();
+        ObjectType objectType = ObjectType.getByCode(contentType);
+        switch (objectType) {
+            case Video:
+                List<String> objectIds = videoRepository.deleteVideoFile(mediaIds.get(0));
+                objectRepository.deleteByObjectIds(objectIds);
+                break;
+            case Image:
+                imageRepository.deleteByImageFileIds(mediaIds);
+                break;
+            case Audio:
+                break;
+            default:
+        }
+    }
+
+    @Override
+    public List<VideoUrlDto> getVideoUrls(int loginUser, String videoFileId, int expireSecond) {
+        List<VideoUrlDto> list = videoRepository.findVideoUrls(videoFileId);
+        list.forEach(videoUrlDto -> {
+            String url = videoUrlDto.getUrl();
+            String signedUrl = signService.getSignedUrl(loginUser, url, expireSecond);
+            videoUrlDto.setUrl(signedUrl);
+        });
+        return list;
+    }
+
+    @Override
+    public VideoInfo getVideoInfo(String videoFileId) {
+        List<VideoInfo> list = videoRepository.getVideoInfos(videoFileId);
+        if (!list.isEmpty()) {
+            VideoInfo videoInfo = list.get(0);
+            videoInfo.setCreateTime(getCreateTime(videoFileId));
+            return videoInfo;
+        }
+
+        return null;
+    }
+
+    private LocalDateTime getCreateTime(String videoFileId) {
+        ObjectMeta objectMeta = objectRepository.getObjectMetaById(videoFileId);
+        if (objectMeta == null) {
+            return null;
+        }
+
+        String absolutePath = objectMeta.getAbsolutePath();
+        MediaProps mediaProps = FFmpegWrapper.getMediaProps(absolutePath);
+        if (mediaProps == null) {
+            return null;
+        }
+
+        LocalDateTime localDateTime = mediaProps.getCreateTime();
+        if (localDateTime != null && !localDateTime.equals(epoch)) {
+            return localDateTime;
+        }
+
+        return null;
+    }
+
+    @Override
+    public List<ImageUrlDto> getImageUrls(Set<String> imageFileIds) {
+        List<ImageUrlDto> list = imageRepository.getImageUrls(imageFileIds);
+        return list;
+    }
+
+    @Override
+    public List<AudioUrl> getAudioUrls(String audioFileId, int expireSecond) {
+        int loginUser = 10001;
+        List<AudioUrl> audioUrls = audioRepository.getAudioUrls(audioFileId);
+        audioUrls.forEach(audioUrl -> {
+            String url = audioUrl.getUrl();
+            String signedUrl = signService.getSignedUrl(loginUser, url, expireSecond);
+            audioUrl.setUrl(signedUrl);
+        });
+        return audioUrls;
+    }
+
+    @Override
+    public AudioInfo getAudioInfo(String audioFileId) {
+        List<AudioInfo> list = audioRepository.getAudioInfo(audioFileId);
+        return list.isEmpty() ? null : list.get(0);
+    }
+}

+ 2 - 1
oss-store/src/main/java/cn/reghao/oss/store/rpc/ObjectServiceImpl.java

@@ -71,7 +71,8 @@ public class ObjectServiceImpl implements ObjectService {
         String objectName = fileMeta.getObjectName();
         int fileType = fileMeta.getFileType();
         String filename = fileMeta.getFilename();
-        ObjectInfo objectInfo = new ObjectInfo(objectId, objectName, fileType, filename);
+        long size = fileMeta.getSize();
+        ObjectInfo objectInfo = new ObjectInfo(objectId, objectName, fileType, filename, size);
         String url = String.format("//%s/%s", storeLocalCache.getDomain(), objectName);
         int scope = fileMeta.getScope();
         if (scope != ObjectScope.PUBLIC.getCode()) {

+ 0 - 66
oss-store/src/main/java/cn/reghao/oss/store/rpc/media/AudioFileServiceImpl.java

@@ -1,66 +0,0 @@
-package cn.reghao.oss.store.rpc.media;
-
-import cn.reghao.oss.store.api.iface.ObjectService;
-import cn.reghao.oss.store.db.mapper.AudioFileMapper;
-import cn.reghao.oss.store.db.repository.AudioRepository;
-import cn.reghao.oss.store.model.po.AudioFile;
-import cn.reghao.oss.store.service.SignService;
-import cn.reghao.oss.store.api.dto.media.AudioInfo;
-import cn.reghao.oss.store.api.dto.media.AudioUrl;
-import cn.reghao.oss.store.api.iface.media.AudioFileService;
-import org.apache.dubbo.config.annotation.DubboService;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2023-08-28 15:00:43
- */
-@DubboService
-@Service
-public class AudioFileServiceImpl implements AudioFileService {
-    private final AudioFileMapper audioFileMapper;
-    private final ObjectService objectService;
-    private final AudioRepository audioRepository;
-    private final SignService signService;
-
-    public AudioFileServiceImpl(AudioFileMapper audioFileMapper, ObjectService objectService,
-                                AudioRepository audioRepository, SignService signService) {
-        this.audioFileMapper = audioFileMapper;
-        this.objectService = objectService;
-        this.audioRepository = audioRepository;
-        this.signService = signService;
-    }
-
-    @Override
-    public void setAudioScope(int scope, String audioFileId) {
-        List<String> objectIds = audioFileMapper.findByAudioFileId(audioFileId).stream()
-                .map(AudioFile::getObjectId)
-                .collect(Collectors.toList());
-        objectService.setObjectsScope(scope, objectIds);
-    }
-
-    @Override
-    public void deleteAudioFile(String audioFileId) {
-    }
-
-    @Override
-    public AudioInfo getAudioInfo(String audioFileId) {
-        List<AudioInfo> list = audioRepository.getAudioInfo(audioFileId);
-        return list.isEmpty() ? null : list.get(0);
-    }
-
-    @Override
-    public List<AudioUrl> getAudioUrls(String audioFileId, int expireSecond) {
-        int loginUser = 10001;
-        List<AudioUrl> audioUrls = audioRepository.getAudioUrls(audioFileId);
-        audioUrls.forEach(audioUrl -> {
-            String url = audioUrl.getUrl();
-            String signedUrl = signService.getSignedUrl(loginUser, url, expireSecond);
-            audioUrl.setUrl(signedUrl);
-        });
-        return audioUrls;
-    }
-}

+ 0 - 53
oss-store/src/main/java/cn/reghao/oss/store/rpc/media/ImageFileServiceImpl.java

@@ -1,53 +0,0 @@
-package cn.reghao.oss.store.rpc.media;
-
-import cn.reghao.oss.store.api.iface.ObjectService;
-import cn.reghao.oss.store.db.mapper.ImageFileMapper;
-import cn.reghao.oss.store.db.repository.ImageRepository;
-import cn.reghao.oss.store.model.po.ImageFile;
-import cn.reghao.oss.store.api.dto.media.ImageUrlDto;
-import cn.reghao.oss.store.api.iface.media.ImageFileService;
-import org.apache.dubbo.config.annotation.DubboService;
-import org.springframework.stereotype.Service;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2023-08-28 15:00:43
- */
-@DubboService
-@Service
-public class ImageFileServiceImpl implements ImageFileService {
-    private final ImageFileMapper imageFileMapper;
-    private final ObjectService objectService;
-    private final ImageRepository imageRepository;
-
-    public ImageFileServiceImpl(ImageFileMapper imageFileMapper, ObjectService objectService,
-                                ImageRepository imageRepository) {
-        this.imageFileMapper = imageFileMapper;
-        this.objectService = objectService;
-        this.imageRepository = imageRepository;
-    }
-
-    @Override
-    public void setImagesScope(int scope, List<String> imageFileIds) {
-        List<String> objectIds = imageFileMapper.findByImageFileIds(new HashSet<>(imageFileIds)).stream()
-                .map(ImageFile::getObjectId)
-                .collect(Collectors.toList());
-        objectService.setObjectsScope(scope, objectIds);
-    }
-
-    @Override
-    public void deleteByImageFileIds(List<String> imageFileIds) {
-        imageRepository.deleteByImageFileIds(imageFileIds);
-    }
-
-    @Override
-    public List<ImageUrlDto> getImageUrls(Set<String> imageFileIds) {
-        List<ImageUrlDto> list = imageRepository.getImageUrls(imageFileIds);
-        return list;
-    }
-}

+ 0 - 101
oss-store/src/main/java/cn/reghao/oss/store/rpc/media/VideoFileServiceImpl.java

@@ -1,101 +0,0 @@
-package cn.reghao.oss.store.rpc.media;
-
-import cn.reghao.jutil.media.FFmpegWrapper;
-import cn.reghao.jutil.media.model.MediaProps;
-import cn.reghao.oss.store.api.dto.ObjectMeta;
-import cn.reghao.oss.store.api.iface.ObjectService;
-import cn.reghao.oss.store.db.mapper.VideoFileMapper;
-import cn.reghao.oss.store.db.repository.ObjectRepository;
-import cn.reghao.oss.store.db.repository.VideoRepository;
-import cn.reghao.oss.store.model.po.VideoFile;
-import cn.reghao.oss.store.service.SignService;
-import cn.reghao.oss.store.api.dto.media.VideoInfo;
-import cn.reghao.oss.store.api.dto.media.VideoUrlDto;
-import cn.reghao.oss.store.api.iface.media.VideoFileService;
-import org.apache.dubbo.config.annotation.DubboService;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDateTime;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2023-08-28 15:00:43
- */
-@DubboService
-@Service
-public class VideoFileServiceImpl implements VideoFileService {
-    private final LocalDateTime epoch = LocalDateTime.parse("1970-01-01T08:00");
-    private final VideoFileMapper videoFileMapper;
-    private final ObjectService objectService;
-    private final VideoRepository videoRepository;
-    private final ObjectRepository objectRepository;
-    private final SignService signService;
-
-    public VideoFileServiceImpl(VideoFileMapper videoFileMapper, ObjectService objectService,
-                                VideoRepository videoRepository, ObjectRepository objectRepository, SignService signService) {
-        this.videoFileMapper = videoFileMapper;
-        this.objectService = objectService;
-        this.videoRepository = videoRepository;
-        this.objectRepository = objectRepository;
-        this.signService = signService;
-    }
-
-    @Override
-    public void setVideoScope(int scope, String videoFileId) {
-        List<String> objectIds = videoFileMapper.findByVideoFileId(videoFileId).stream()
-                .map(VideoFile::getObjectId)
-                .collect(Collectors.toList());
-        objectService.setObjectsScope(scope, objectIds);
-    }
-
-    @Override
-    public void deleteVideoFile(String videoFileId) {
-        List<String> objectIds = videoRepository.deleteVideoFile(videoFileId);
-        objectRepository.deleteByObjectIds(objectIds);
-    }
-
-    @Override
-    public VideoInfo getVideoInfo(String videoFileId) {
-        List<VideoInfo> list = videoRepository.getVideoInfos(videoFileId);
-        return list.isEmpty() ? null : list.get(0);
-    }
-
-    public List<VideoFile> getVideoFiles(String videoFileId) {
-        List<VideoFile> list = videoRepository.getVideoFiles(videoFileId);
-        return list;
-    }
-
-    @Override
-    public List<VideoUrlDto> getVideoUrls(int loginUser, String videoFileId, int expireSecond) {
-        List<VideoUrlDto> list = videoRepository.findVideoUrls(videoFileId);
-        list.forEach(videoUrlDto -> {
-            String url = videoUrlDto.getUrl();
-            String signedUrl = signService.getSignedUrl(loginUser, url, expireSecond);
-            videoUrlDto.setUrl(signedUrl);
-        });
-        return list;
-    }
-
-    @Override
-    public LocalDateTime getCreateTime(String videoFileId) {
-        ObjectMeta objectMeta = objectRepository.getObjectMetaById(videoFileId);
-        if (objectMeta == null) {
-            return null;
-        }
-
-        String absolutePath = objectMeta.getAbsolutePath();
-        MediaProps mediaProps = FFmpegWrapper.getMediaProps(absolutePath);
-        if (mediaProps == null) {
-            return null;
-        }
-
-        LocalDateTime localDateTime = mediaProps.getCreateTime();
-        if (localDateTime != null && !localDateTime.equals(epoch)) {
-            return localDateTime;
-        }
-
-        return null;
-    }
-}

+ 21 - 0
store-api/src/main/java/cn/reghao/oss/store/api/dto/MediaDeleteDto.java

@@ -0,0 +1,21 @@
+package cn.reghao.oss.store.api.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2024-03-07 09:48:24
+ */
+@Setter
+@Getter
+public class MediaDeleteDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private Integer channelId;
+    private Integer objectType;
+    private List<String> mediaIds;
+}

+ 22 - 0
store-api/src/main/java/cn/reghao/oss/store/api/dto/MediaScopeDto.java

@@ -0,0 +1,22 @@
+package cn.reghao.oss.store.api.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2024-03-07 09:44:01
+ */
+@Setter
+@Getter
+public class MediaScopeDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private Integer channelId;
+    private Integer objectType;
+    private List<String> mediaIds;
+    private Integer scope;
+}

+ 3 - 1
store-api/src/main/java/cn/reghao/oss/store/api/dto/ObjectInfo.java

@@ -19,11 +19,13 @@ public class ObjectInfo implements Serializable {
     private String url;
     private int fileType;
     private String filename;
+    private long size;
 
-    public ObjectInfo(String objectId, String objectName, int fileType, String filename) {
+    public ObjectInfo(String objectId, String objectName, int fileType, String filename, long size) {
         this.objectId = objectId;
         this.objectName = objectName;
         this.fileType = fileType;
         this.filename = filename;
+        this.size = size;
     }
 }

+ 2 - 0
store-api/src/main/java/cn/reghao/oss/store/api/dto/media/VideoInfo.java

@@ -5,6 +5,7 @@ import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 import java.io.Serializable;
+import java.time.LocalDateTime;
 
 /**
  * @author reghao
@@ -25,4 +26,5 @@ public class VideoInfo implements Serializable {
     private String audioCodec;
     private String urlType;
     private String url;
+    private LocalDateTime createTime;
 }

+ 22 - 0
store-api/src/main/java/cn/reghao/oss/store/api/iface/MediaService.java

@@ -0,0 +1,22 @@
+package cn.reghao.oss.store.api.iface;
+
+import cn.reghao.oss.store.api.dto.MediaDeleteDto;
+import cn.reghao.oss.store.api.dto.MediaScopeDto;
+import cn.reghao.oss.store.api.dto.media.*;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author reghao
+ * @date 2024-03-07 09:51:23
+ */
+public interface MediaService {
+    void setMediaFileScope(MediaScopeDto mediaScopeDto);
+    void deleteMediaFile(MediaDeleteDto mediaDeleteDto);
+    List<VideoUrlDto> getVideoUrls(int loginUser, String videoFileId, int expireSecond);
+    VideoInfo getVideoInfo(String videoFileId);
+    List<ImageUrlDto> getImageUrls(Set<String> imageFileIds);
+    List<AudioUrl> getAudioUrls(String audioFileId, int expireSecond);
+    AudioInfo getAudioInfo(String audioFileId);
+}

+ 0 - 17
store-api/src/main/java/cn/reghao/oss/store/api/iface/media/AudioFileService.java

@@ -1,17 +0,0 @@
-package cn.reghao.oss.store.api.iface.media;
-
-import cn.reghao.oss.store.api.dto.media.AudioInfo;
-import cn.reghao.oss.store.api.dto.media.AudioUrl;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-08-28 17:00:38
- */
-public interface AudioFileService {
-    void setAudioScope(int scope, String audioFileId);
-    void deleteAudioFile(String audioFileId);
-    AudioInfo getAudioInfo(String audioFileId);
-    List<AudioUrl> getAudioUrls(String audioFileId, int expireSecond);
-}

+ 0 - 16
store-api/src/main/java/cn/reghao/oss/store/api/iface/media/ImageFileService.java

@@ -1,16 +0,0 @@
-package cn.reghao.oss.store.api.iface.media;
-
-import cn.reghao.oss.store.api.dto.media.ImageUrlDto;
-
-import java.util.List;
-import java.util.Set;
-
-/**
- * @author reghao
- * @date 2023-08-28 15:47:43
- */
-public interface ImageFileService {
-    void setImagesScope(int scope, List<String> imageFileIds);
-    void deleteByImageFileIds(List<String> imageFileIds);
-    List<ImageUrlDto> getImageUrls(Set<String> imageFileIds);
-}

+ 0 - 19
store-api/src/main/java/cn/reghao/oss/store/api/iface/media/VideoFileService.java

@@ -1,19 +0,0 @@
-package cn.reghao.oss.store.api.iface.media;
-
-import cn.reghao.oss.store.api.dto.media.VideoInfo;
-import cn.reghao.oss.store.api.dto.media.VideoUrlDto;
-
-import java.time.LocalDateTime;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-08-28 15:46:17
- */
-public interface VideoFileService {
-    void setVideoScope(int scope, String videoFileId);
-    void deleteVideoFile(String videoFileId);
-    VideoInfo getVideoInfo(String videoFileId);
-    List<VideoUrlDto> getVideoUrls(int loginUser, String videoFileId, int expireSecond);
-    LocalDateTime getCreateTime(String videoFileId);
-}