From 9b2eedb85d53ca32610c32c6e50b5230ab3b16cf Mon Sep 17 00:00:00 2001
From: sean.zhou <sean.zhou@dji.com>
Date: Fri, 22 Jul 2022 20:16:03 +0800
Subject: [PATCH] V1.1.0 for dock

---
 src/main/java/com/dji/sample/wayline/service/impl/WaylineFileServiceImpl.java |  112 ++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 65 insertions(+), 47 deletions(-)

diff --git a/src/main/java/com/dji/sample/wayline/service/impl/WaylineFileServiceImpl.java b/src/main/java/com/dji/sample/wayline/service/impl/WaylineFileServiceImpl.java
index 3d25fb6..f12979a 100644
--- a/src/main/java/com/dji/sample/wayline/service/impl/WaylineFileServiceImpl.java
+++ b/src/main/java/com/dji/sample/wayline/service/impl/WaylineFileServiceImpl.java
@@ -5,25 +5,24 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dji.sample.common.model.Pagination;
 import com.dji.sample.common.model.PaginationData;
-import com.dji.sample.component.oss.model.AliyunOSSConfiguration;
-import com.dji.sample.component.oss.model.MinIOConfiguration;
-import com.dji.sample.component.oss.service.IOssService;
-import com.dji.sample.component.oss.service.impl.AliyunOssServiceImpl;
-import com.dji.sample.component.oss.service.impl.MinIOServiceImpl;
+import com.dji.sample.component.oss.model.OssConfiguration;
+import com.dji.sample.component.oss.service.impl.OssServiceContext;
 import com.dji.sample.wayline.dao.IWaylineFileMapper;
-import com.dji.sample.wayline.model.WaylineFileDTO;
-import com.dji.sample.wayline.model.WaylineFileEntity;
-import com.dji.sample.wayline.model.WaylineQueryParam;
+import com.dji.sample.wayline.model.dto.WaylineFileDTO;
+import com.dji.sample.wayline.model.entity.WaylineFileEntity;
+import com.dji.sample.wayline.model.param.WaylineQueryParam;
 import com.dji.sample.wayline.service.IWaylineFileService;
-import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.DigestUtils;
 import org.springframework.util.StringUtils;
 
 import java.net.URL;
+import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 import java.util.UUID;
 import java.util.stream.Collectors;
 
@@ -34,27 +33,16 @@
  */
 @Service
 @Transactional
-@Slf4j
 public class WaylineFileServiceImpl implements IWaylineFileService {
 
     @Autowired
     private IWaylineFileMapper mapper;
 
-    private IOssService ossService;
+    @Autowired
+    private OssServiceContext ossService;
 
     @Autowired
-    private void setOssService(@Autowired(required = false) AliyunOssServiceImpl aliyunOssService,
-                               @Autowired(required = false) MinIOServiceImpl minIOService) {
-        if (AliyunOSSConfiguration.enable) {
-            this.ossService = aliyunOssService;
-            return;
-        }
-        if (MinIOConfiguration.enable) {
-            this.ossService = minIOService;
-            return;
-        }
-        log.error("ossService is null.");
-    }
+    private OssConfiguration configuration;
 
     @Override
     public PaginationData<WaylineFileDTO> getWaylinesByParam(String workspaceId, WaylineQueryParam param) {
@@ -82,17 +70,22 @@
     }
 
     @Override
-    public WaylineFileDTO getWaylineByWaylineId(String workspaceId, String waylineId) {
-        return this.entityConvertToDTO(
-                mapper.selectOne(
-                        new LambdaQueryWrapper<WaylineFileEntity>()
-                                .eq(WaylineFileEntity::getWorkspaceId, workspaceId)
-                                .eq(WaylineFileEntity::getWaylineId, waylineId)));
+    public Optional<WaylineFileDTO> getWaylineByWaylineId(String workspaceId, String waylineId) {
+        return Optional.ofNullable(
+                this.entityConvertToDTO(
+                        mapper.selectOne(
+                                new LambdaQueryWrapper<WaylineFileEntity>()
+                                    .eq(WaylineFileEntity::getWorkspaceId, workspaceId)
+                                    .eq(WaylineFileEntity::getWaylineId, waylineId))));
     }
 
     @Override
-    public URL getObjectUrl(String bucket, String objectKey) {
-        return ossService.getObjectUrl(bucket, objectKey);
+    public URL getObjectUrl(String workspaceId, String waylineId) throws SQLException {
+        Optional<WaylineFileDTO> waylineOpt = this.getWaylineByWaylineId(workspaceId, waylineId);
+        if (waylineOpt.isEmpty()) {
+            throw new SQLException(waylineId + " does not exist.");
+        }
+        return ossService.getObjectUrl(configuration.getBucket(), waylineOpt.get().getObjectKey());
     }
 
     @Override
@@ -101,6 +94,13 @@
         file.setWaylineId(UUID.randomUUID().toString());
         file.setWorkspaceId(workspaceId);
 
+        byte[] object = ossService.getObject(configuration.getBucket(), metadata.getObjectKey());
+        if (object.length == 0) {
+            throw new RuntimeException("The file " + metadata.getObjectKey() +
+                    " does not exist in the bucket[" + configuration.getBucket() + "].");
+        }
+
+        file.setSign(DigestUtils.md5DigestAsHex(object));
         int insertId = mapper.insert(file);
         return insertId > 0 ? file.getId() : insertId;
     }
@@ -129,30 +129,48 @@
                 .collect(Collectors.toList());
     }
 
+    @Override
+    public Boolean deleteByWaylineId(String workspaceId, String waylineId) {
+        Optional<WaylineFileDTO> waylineOpt = this.getWaylineByWaylineId(workspaceId, waylineId);
+        if (waylineOpt.isEmpty()) {
+            return true;
+        }
+        WaylineFileDTO wayline = waylineOpt.get();
+        boolean isDel = mapper.delete(new LambdaUpdateWrapper<WaylineFileEntity>()
+                    .eq(WaylineFileEntity::getWorkspaceId, workspaceId)
+                    .eq(WaylineFileEntity::getWaylineId, waylineId))
+                > 0;
+        if (!isDel) {
+            return false;
+        }
+        return ossService.deleteObject(configuration.getBucket(), wayline.getObjectKey());
+    }
+
     /**
      * Convert database entity objects into wayline data transfer object.
      * @param entity
      * @return
      */
     private WaylineFileDTO entityConvertToDTO(WaylineFileEntity entity) {
-        WaylineFileDTO.WaylineFileDTOBuilder builder = WaylineFileDTO.builder();
-
-        if (entity != null) {
-            builder.droneModelKey(entity.getDroneModelKey())
-                    .favorited(entity.getFavorited())
-                    .name(entity.getName())
-                    .payloadModelKeys(entity.getPayloadModelKeys() != null ?
-                            Arrays.asList(entity.getPayloadModelKeys().split(",")) : null)
-                    .templateTypes(Arrays.stream(entity.getTemplateTypes().split(","))
-                            .map(Integer::parseInt)
-                            .collect(Collectors.toList()))
-                    .username(entity.getUsername())
-                    .objectKey(entity.getObjectKey())
-                    .updateTime(entity.getUpdateTime())
-                    .waylineId(entity.getWaylineId());
+        if (entity == null) {
+            return null;
         }
+        return WaylineFileDTO.builder()
+                .droneModelKey(entity.getDroneModelKey())
+                .favorited(entity.getFavorited())
+                .name(entity.getName())
+                .payloadModelKeys(entity.getPayloadModelKeys() != null ?
+                        Arrays.asList(entity.getPayloadModelKeys().split(",")) : null)
+                .templateTypes(Arrays.stream(entity.getTemplateTypes().split(","))
+                        .map(Integer::parseInt)
+                        .collect(Collectors.toList()))
+                .username(entity.getUsername())
+                .objectKey(entity.getObjectKey())
+                .sign(entity.getSign())
+                .updateTime(entity.getUpdateTime())
+                .waylineId(entity.getWaylineId())
+                .build();
 
-        return builder.build();
     }
 
     /**

--
Gitblit v1.9.3