Przeglądaj źródła

update oss-console

reghao 1 rok temu
rodzic
commit
140f39a8fe
25 zmienionych plików z 153 dodań i 263 usunięć
  1. 2 14
      oss-console/src/main/java/cn/reghao/oss/console/app/controller/OssServerController.java
  2. 0 50
      oss-console/src/main/java/cn/reghao/oss/console/app/controller/OssStoreController.java
  3. 1 1
      oss-console/src/main/java/cn/reghao/oss/console/app/controller/page/StoreObjectPageController.java
  4. 3 1
      oss-console/src/main/java/cn/reghao/oss/console/app/controller/page/UploadChannelPageController.java
  5. 2 3
      oss-console/src/main/java/cn/reghao/oss/console/app/controller/page/UserNodePageController.java
  6. 0 4
      oss-console/src/main/java/cn/reghao/oss/console/app/db/repository/StoreNodeRepository.java
  7. 1 0
      oss-console/src/main/java/cn/reghao/oss/console/app/db/repository/UserNodeRepository.java
  8. 0 8
      oss-console/src/main/java/cn/reghao/oss/console/app/model/po/StoreNode.java
  9. 17 0
      oss-console/src/main/java/cn/reghao/oss/console/app/model/vo/UserNodeVO.java
  10. 1 1
      oss-console/src/main/java/cn/reghao/oss/console/app/rpc/NodeServiceImpl.java
  11. 0 19
      oss-console/src/main/java/cn/reghao/oss/console/app/rpc/RpcService.java
  12. 1 3
      oss-console/src/main/java/cn/reghao/oss/console/app/service/OssService.java
  13. 0 50
      oss-console/src/main/java/cn/reghao/oss/console/app/service/OssStoreService.java
  14. 15 26
      oss-console/src/main/java/cn/reghao/oss/console/app/service/StoreNodeService.java
  15. 22 23
      oss-console/src/main/java/cn/reghao/oss/console/app/service/UploadChannelService.java
  16. 25 4
      oss-console/src/main/java/cn/reghao/oss/console/app/service/UserNodeService.java
  17. 10 2
      oss-console/src/main/java/cn/reghao/oss/console/store/controller/MediaController.java
  18. 10 10
      oss-console/src/main/java/cn/reghao/oss/console/store/controller/ObjectController.java
  19. 6 1
      oss-console/src/main/java/cn/reghao/oss/console/store/rpc/MediaRpcService.java
  20. 3 3
      oss-console/src/main/java/cn/reghao/oss/console/store/rpc/ObjectRpcService.java
  21. 1 1
      oss-console/src/main/java/cn/reghao/oss/console/store/rpc/RemoteService.java
  22. 32 0
      oss-console/src/main/java/cn/reghao/oss/console/store/rpc/StoreRpcService.java
  23. 1 1
      oss-console/src/main/resources/application.yml
  24. 0 36
      oss-console/src/main/resources/templates/node/edit.html
  25. 0 2
      oss-console/src/main/resources/templates/node/index.html

+ 2 - 14
oss-console/src/main/java/cn/reghao/oss/console/app/controller/OssServerController.java

@@ -1,11 +1,9 @@
 package cn.reghao.oss.console.app.controller;
 
 import cn.reghao.jutil.jdk.result.WebResult;
-import cn.reghao.oss.console.app.service.UploadChannelService;
 import cn.reghao.oss.console.util.AuthKeyContext;
-import cn.reghao.oss.api.dto.ObjectChannel;
 import cn.reghao.oss.api.dto.ServerInfo;
-import cn.reghao.oss.console.app.rpc.OssService;
+import cn.reghao.oss.console.app.service.OssService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.http.MediaType;
@@ -23,11 +21,9 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/api/oss/server")
 public class OssServerController {
     private final OssService ossService;
-    private final UploadChannelService uploadChannelService;
 
-    public OssServerController(OssService ossService, UploadChannelService uploadChannelService) {
+    public OssServerController(OssService ossService) {
         this.ossService = ossService;
-        this.uploadChannelService = uploadChannelService;
     }
 
     @ApiOperation(value = "获取 oss-store 节点")
@@ -37,12 +33,4 @@ public class OssServerController {
         ServerInfo serverInfo = ossService.getServerInfo(channelId, loginUser);
         return WebResult.success(serverInfo);
     }
-
-    @ApiOperation(value = "根据 channel_id 获取 UploadChannel")
-    @GetMapping(value = "/channel", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String getChannel(@RequestParam("channelId") int channelId) {
-        int loginUser = AuthKeyContext.getUser();
-        ObjectChannel objectChannel = uploadChannelService.getObjectChannelByChannelId(channelId, loginUser);
-        return WebResult.success(objectChannel);
-    }
 }

+ 0 - 50
oss-console/src/main/java/cn/reghao/oss/console/app/controller/OssStoreController.java

@@ -1,50 +0,0 @@
-package cn.reghao.oss.console.app.controller;
-
-import cn.reghao.jutil.jdk.result.WebResult;
-import cn.reghao.oss.console.app.service.OssStoreService;
-import cn.reghao.oss.api.dto.ObjectChannel;
-import cn.reghao.oss.api.dto.StoreNodeDto;
-import cn.reghao.oss.api.dto.StoreProperties;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.http.MediaType;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2024-03-01 09:02:37
- */
-@Api(tags = "oss-store 调用的接口")
-@RestController
-@RequestMapping("/api/oss/store")
-public class OssStoreController {
-    private final OssStoreService ossStoreService;
-
-    public OssStoreController(OssStoreService ossStoreService) {
-        this.ossStoreService = ossStoreService;
-    }
-
-    @ApiOperation(value = "注册存储节点")
-    @PostMapping(value = "/register", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String addStoreNode(@RequestBody @Validated StoreNodeDto storeNodeDto) {
-        ossStoreService.registerNode(storeNodeDto);
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "获取某个节点上所有的 UploadChannel")
-    @GetMapping(value = "/channels", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String getChannels(@RequestParam("nodeAddr") String nodeAddr) {
-        List<ObjectChannel> list = ossStoreService.getObjectChannels(nodeAddr);
-        return WebResult.success(list);
-    }
-
-    @ApiOperation(value = "获取 store 的配置")
-    @GetMapping(value = "/properties", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String getStoreProperties(@RequestParam("nodeAddr") String nodeAddr) {
-        StoreProperties storeProperties = ossStoreService.getStoreProperties(nodeAddr);
-        return WebResult.success(storeProperties);
-    }
-}

+ 1 - 1
oss-console/src/main/java/cn/reghao/oss/console/app/controller/page/StoreObjectPageController.java

@@ -3,7 +3,7 @@ package cn.reghao.oss.console.app.controller.page;
 import cn.reghao.jutil.jdk.result.WebResult;
 import cn.reghao.oss.console.account.model.po.DiskFile;
 import cn.reghao.oss.console.account.service.UserContext;
-import cn.reghao.oss.console.app.rpc.OssService;
+import cn.reghao.oss.console.app.service.OssService;
 import cn.reghao.oss.console.util.DefaultSetting;
 import cn.reghao.oss.console.util.db.PageSort;
 import cn.reghao.oss.api.dto.ServerInfo;

+ 3 - 1
oss-console/src/main/java/cn/reghao/oss/console/app/controller/page/UploadChannelPageController.java

@@ -2,6 +2,7 @@ package cn.reghao.oss.console.app.controller.page;
 
 import cn.reghao.oss.api.constant.ObjectScope;
 import cn.reghao.oss.api.constant.ObjectType;
+import cn.reghao.oss.console.account.service.UserContext;
 import cn.reghao.oss.console.app.model.po.UploadChannel;
 import cn.reghao.oss.console.app.model.vo.KeyValue;
 import cn.reghao.oss.console.app.model.vo.UploadChannelVo;
@@ -89,10 +90,11 @@ public class UploadChannelPageController {
         sizeList.add(new KeyValue(1024L*1024*1024*10+"", "10GiB"));
         sizeList.add(new KeyValue(1024L*1024*1024*20+"", "20GiB"));
 
+        int loginUser = UserContext.getUser().getId();
         List<KeyValue> storeNodes = userNodeService.getUserStoreNodes().stream()
                 .map(storeNode -> {
                     int nodeId = storeNode.getId();
-                    String domain = storeNode.getDomain();
+                    String domain = userNodeService.getUserNode(nodeId, loginUser).getDomain();
                     return new KeyValue(nodeId+"", domain);
                 }).collect(Collectors.toList());
 

+ 2 - 3
oss-console/src/main/java/cn/reghao/oss/console/app/controller/page/UserNodePageController.java

@@ -1,7 +1,7 @@
 package cn.reghao.oss.console.app.controller.page;
 
-import cn.reghao.oss.console.app.model.po.StoreNode;
 import cn.reghao.oss.console.app.model.vo.KeyValue;
+import cn.reghao.oss.console.app.model.vo.UserNodeVO;
 import cn.reghao.oss.console.app.service.StoreNodeService;
 import cn.reghao.oss.console.app.service.UserNodeService;
 import io.swagger.annotations.Api;
@@ -14,7 +14,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * @author reghao
@@ -37,7 +36,7 @@ public class UserNodePageController {
     public String userNodesPage(@RequestParam(value = "env", required = false) String env,
                               @RequestParam(value = "appType", required = false) String appType,
                               Model model) {
-        List<StoreNode> list = userNodeService.getUserStoreNodes();
+        List<UserNodeVO> list = userNodeService.getUserStoreNodes1();
         model.addAttribute("env", env);
         model.addAttribute("type", appType);
         model.addAttribute("list", list);

+ 0 - 4
oss-console/src/main/java/cn/reghao/oss/console/app/db/repository/StoreNodeRepository.java

@@ -3,14 +3,10 @@ package cn.reghao.oss.console.app.db.repository;
 import cn.reghao.oss.console.app.model.po.StoreNode;
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.List;
-
 /**
  * @author reghao
  * @date 2024-02-23 11:31:05
  */
 public interface StoreNodeRepository extends JpaRepository<StoreNode, Integer> {
     StoreNode findByNodeAddr(String nodeAddr);
-    StoreNode findByDomain(String domain);
-    List<StoreNode> findByDomainIn(List<String> domains);
 }

+ 1 - 0
oss-console/src/main/java/cn/reghao/oss/console/app/db/repository/UserNodeRepository.java

@@ -13,5 +13,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
 public interface UserNodeRepository extends JpaRepository<UserNode, Integer> {
     int countByNodeId(int nodeId);
     UserNode findByNodeIdAndUserId(int nodeId, int userId);
+    UserNode findByDomain(String domain);
     Page<UserNode> findByUserId(int userId, Pageable pageable);
 }

+ 0 - 8
oss-console/src/main/java/cn/reghao/oss/console/app/model/po/StoreNode.java

@@ -33,14 +33,6 @@ public class StoreNode extends BaseEntity {
     @ElementCollection(targetClass = StoreDisk.class)
     @LazyCollection(LazyCollectionOption.FALSE)
     private List<StoreDisk> storeDisks;
-
-    @Deprecated
-    private String domain;
-    @Deprecated
-    private String referer;
-    @Deprecated
-    private String secretKey;
-
     private Boolean enabled;
 
     public StoreNode(StoreNodeDto storeNodeDto) {

+ 17 - 0
oss-console/src/main/java/cn/reghao/oss/console/app/model/vo/UserNodeVO.java

@@ -0,0 +1,17 @@
+package cn.reghao.oss.console.app.model.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author reghao
+ * @date 2024-07-02 16:18:14
+ */
+@AllArgsConstructor
+@Getter
+public class UserNodeVO {
+    private int id;
+    private int nodeId;
+    private String nodeAddr;
+    private String domain;
+}

+ 1 - 1
oss-console/src/main/java/cn/reghao/oss/console/rpc/NodeServiceImpl.java → oss-console/src/main/java/cn/reghao/oss/console/app/rpc/NodeServiceImpl.java

@@ -1,4 +1,4 @@
-package cn.reghao.oss.console.rpc;
+package cn.reghao.oss.console.app.rpc;
 
 import cn.reghao.oss.console.app.db.repository.StoreNodeRepository;
 import cn.reghao.oss.console.app.db.repository.UserNodeRepository;

+ 0 - 19
oss-console/src/main/java/cn/reghao/oss/console/app/rpc/RpcService.java

@@ -1,19 +0,0 @@
-package cn.reghao.oss.console.app.rpc;
-
-import cn.reghao.oss.console.app.model.po.StoreNode;
-import cn.reghao.oss.api.iface.StoreService;
-import org.springframework.stereotype.Service;
-
-/**
- * @author reghao
- * @date 2024-03-04 18:01:22
- */
-@Service
-public class RpcService {
-    public StoreService getStoreService(StoreNode storeNode) {
-        String host = storeNode.getNodeAddr();
-        int port = storeNode.getRpcPort();
-        RemoteService<StoreService> remoteService = new RemoteService<>();
-        return remoteService.getService(host, port, StoreService.class);
-    }
-}

+ 1 - 3
oss-console/src/main/java/cn/reghao/oss/console/app/rpc/OssService.java → oss-console/src/main/java/cn/reghao/oss/console/app/service/OssService.java

@@ -1,8 +1,6 @@
-package cn.reghao.oss.console.app.rpc;
+package cn.reghao.oss.console.app.service;
 
 import cn.reghao.oss.console.app.model.po.UserNode;
-import cn.reghao.oss.console.app.service.UploadChannelService;
-import cn.reghao.oss.console.app.service.UserNodeService;
 import cn.reghao.oss.console.util.JwtUtil;
 import cn.reghao.oss.api.dto.OssPayload;
 import cn.reghao.oss.api.dto.ServerInfo;

+ 0 - 50
oss-console/src/main/java/cn/reghao/oss/console/app/service/OssStoreService.java

@@ -1,50 +0,0 @@
-package cn.reghao.oss.console.app.service;
-
-import cn.reghao.oss.console.app.model.po.StoreNode;
-import cn.reghao.oss.api.dto.ObjectChannel;
-import cn.reghao.oss.api.dto.StoreNodeDto;
-import cn.reghao.oss.api.dto.StoreProperties;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2024-03-01 09:09:12
- */
-@Service
-public class OssStoreService {
-    private final StoreNodeService storeNodeService;
-    private final UploadChannelService uploadChannelService;
-
-    public OssStoreService(StoreNodeService storeNodeService, UploadChannelService uploadChannelService) {
-        this.storeNodeService = storeNodeService;
-        this.uploadChannelService = uploadChannelService;
-    }
-
-    public void registerNode(StoreNodeDto storeNodeDto) {
-        storeNodeService.add(storeNodeDto);
-    }
-
-    public List<ObjectChannel> getObjectChannels(String nodeAddr) {
-        StoreNode storeNode = storeNodeService.getByNodeAddr(nodeAddr);
-        if (storeNode == null || !storeNode.getEnabled()) {
-            return Collections.emptyList();
-        }
-
-        String domain = storeNode.getDomain();
-        return uploadChannelService.getByDomain(domain).stream()
-                .map(uploadChannelService::getObjectChannel)
-                .collect(Collectors.toList());
-    }
-
-    public StoreProperties getStoreProperties(String nodeAddr) {
-        StoreNode storeNode = storeNodeService.getByNodeAddr(nodeAddr);
-        String domain = storeNode.getDomain();
-        String secretKey = storeNode.getSecretKey();
-        String referer = storeNode.getReferer();
-        return new StoreProperties(domain, secretKey, referer);
-    }
-}

+ 15 - 26
oss-console/src/main/java/cn/reghao/oss/console/app/service/StoreNodeService.java

@@ -3,19 +3,20 @@ package cn.reghao.oss.console.app.service;
 import cn.reghao.jutil.jdk.converter.ByteConverter;
 import cn.reghao.jutil.jdk.converter.ByteType;
 import cn.reghao.jutil.jdk.result.Result;
+import cn.reghao.oss.console.account.service.UserContext;
 import cn.reghao.oss.console.app.db.repository.StoreNodeRepository;
 import cn.reghao.oss.console.app.db.repository.UserNodeRepository;
 import cn.reghao.oss.console.app.model.dto.NodeUpdateDto;
 import cn.reghao.oss.console.app.model.po.StoreDisk;
 import cn.reghao.oss.console.app.model.po.StoreNode;
+import cn.reghao.oss.console.app.model.po.UserNode;
 import cn.reghao.oss.console.app.model.vo.KeyValue;
 import cn.reghao.oss.console.app.model.vo.StoreDiskVO;
 import cn.reghao.oss.console.app.model.vo.StoreNodeVO;
-import cn.reghao.oss.console.app.rpc.RpcService;
 import cn.reghao.oss.api.dto.StoreDiskDto;
 import cn.reghao.oss.api.dto.StoreInfo;
 import cn.reghao.oss.api.dto.StoreNodeDto;
-import cn.reghao.oss.api.iface.StoreService;
+import cn.reghao.oss.console.store.rpc.StoreRpcService;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;
@@ -30,16 +31,16 @@ import java.util.stream.Collectors;
  */
 @Service
 public class StoreNodeService {
+    private final ByteConverter byteConverter = new ByteConverter();
     private final StoreNodeRepository storeNodeRepository;
-    private final RpcService rpcService;
     private final UserNodeRepository userNodeRepository;
-    private ByteConverter byteConverter = new ByteConverter();
+    private final StoreRpcService storeRpcService;
 
-    public StoreNodeService(StoreNodeRepository storeNodeRepository, RpcService rpcService,
-                            UserNodeRepository userNodeRepository) {
+    public StoreNodeService(StoreNodeRepository storeNodeRepository, UserNodeRepository userNodeRepository,
+                            StoreRpcService storeRpcService) {
         this.storeNodeRepository = storeNodeRepository;
-        this.rpcService = rpcService;
         this.userNodeRepository = userNodeRepository;
+        this.storeRpcService = storeRpcService;
     }
 
     public void add(StoreNodeDto storeNodeDto) {
@@ -66,22 +67,13 @@ public class StoreNodeService {
         }
 
         String domain = nodeUpdateDto.getDomain();
-        StoreNode entity = storeNodeRepository.findByDomain(domain);
+        /*StoreNode entity = storeNodeRepository.findByDomain(domain);
         if (entity != null) {
             return Result.fail(String.format("domain %s exist", domain));
         }
 
-        if (domain.equals(storeNode.getDomain())) {
-            return Result.success();
-        }
-
-        String secretKey = nodeUpdateDto.getSecretKey();
-        String referer = nodeUpdateDto.getReferer();
-        storeNode.setDomain(domain);
-        storeNode.setSecretKey(secretKey);
-        storeNode.setReferer(referer);
         storeNode.setEnabled(true);
-        storeNodeRepository.save(storeNode);
+        storeNodeRepository.save(storeNode);*/
 
         return Result.success();
     }
@@ -110,11 +102,8 @@ public class StoreNodeService {
     }
 
     public StoreNode getByDomain(String domain) {
-        return storeNodeRepository.findByDomain(domain);
-    }
-
-    public StoreNode getByNodeAddr(String nodeAddr) {
-        return storeNodeRepository.findByNodeAddr(nodeAddr);
+        UserNode userNode = userNodeRepository.findByDomain(domain);
+        return storeNodeRepository.getOne(userNode.getNodeId());
     }
 
     public StoreNode getById(int id) {
@@ -122,10 +111,11 @@ public class StoreNodeService {
     }
 
     public List<KeyValue> getNodeKeyValues() {
+        int loginUser = UserContext.getUser().getId();
         return storeNodeRepository.findAll().stream()
                 .map(storeNode -> {
                     int nodeId = storeNode.getId();
-                    String domain = storeNode.getDomain();
+                    String domain = userNodeRepository.findByNodeIdAndUserId(nodeId, loginUser).getDomain();
                     return new KeyValue(nodeId+"", domain);
                 }).collect(Collectors.toList());
     }
@@ -136,8 +126,7 @@ public class StoreNodeService {
             return null;
         }
 
-        StoreService storeService = rpcService.getStoreService(storeNode);
-        StoreInfo storeInfo = storeService.getStoreInfo();
+        StoreInfo storeInfo = storeRpcService.getStoreInfo(storeNode);
         List<StoreDiskDto> storeDiskDtos = storeInfo.getStoreDisks();
         /*List<StoreDisk> list = storeDiskDtos.stream()
                 .map(StoreDisk::new)

+ 22 - 23
oss-console/src/main/java/cn/reghao/oss/console/app/service/UploadChannelService.java

@@ -4,9 +4,6 @@ import cn.reghao.jutil.jdk.converter.ByteConverter;
 import cn.reghao.jutil.jdk.converter.ByteType;
 import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.oss.console.app.model.dto.ChannelProcessDto;
-import cn.reghao.oss.console.app.rpc.RemoteService;
-import cn.reghao.oss.console.util.AuthKeyContext;
-import cn.reghao.oss.api.iface.StoreService;
 import cn.reghao.oss.api.dto.ObjectChannel;
 import cn.reghao.oss.console.account.service.UserContext;
 import cn.reghao.oss.console.app.db.repository.UploadChannelRepository;
@@ -14,7 +11,9 @@ import cn.reghao.oss.console.app.model.dto.ChannelScopeDto;
 import cn.reghao.oss.console.app.model.dto.UploadChannelDto;
 import cn.reghao.oss.console.app.model.po.StoreNode;
 import cn.reghao.oss.console.app.model.po.UploadChannel;
+import cn.reghao.oss.console.app.model.po.UserNode;
 import cn.reghao.oss.console.app.model.vo.UploadChannelVo;
+import cn.reghao.oss.console.store.rpc.StoreRpcService;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.PageRequest;
@@ -30,24 +29,29 @@ import java.util.stream.Collectors;
  */
 @Service
 public class UploadChannelService {
+    private final ByteConverter byteConverter = new ByteConverter();
     private final UploadChannelRepository uploadChannelRepository;
+    private final UserNodeService userNodeService;
     private final StoreNodeService storeNodeService;
-    private final ByteConverter byteConverter = new ByteConverter();
+    private final StoreRpcService storeRpcService;
 
-    public UploadChannelService(UploadChannelRepository uploadChannelRepository, StoreNodeService storeNodeService) {
+    public UploadChannelService(UploadChannelRepository uploadChannelRepository, UserNodeService userNodeService,
+                                StoreNodeService storeNodeService, StoreRpcService storeRpcService) {
         this.uploadChannelRepository = uploadChannelRepository;
+        this.userNodeService = userNodeService;
         this.storeNodeService = storeNodeService;
+        this.storeRpcService = storeRpcService;
     }
 
     @Transactional(rollbackFor = Exception.class)
     public synchronized Result add(UploadChannelDto uploadChannelDto) {
+        int createBy = UserContext.getUser().getId();
         int nodeId = uploadChannelDto.getNodeId();
-        StoreNode storeNode = storeNodeService.getById(nodeId);
-        if (storeNode == null) {
+        UserNode userNode = userNodeService.getUserNode(nodeId, createBy);
+        if (userNode == null) {
             return Result.fail(String.format("store_node with id %s not exist", nodeId));
         }
 
-        int createBy = UserContext.getUser().getId();
         //int createBy = 410;
         String channelPrefix = uploadChannelDto.getChannelPrefix();
         UploadChannel uploadChannel = uploadChannelRepository.findByPrefixAndCreateByAndNodeId(channelPrefix, createBy, nodeId);
@@ -64,7 +68,7 @@ public class UploadChannelService {
         uploadChannel = new UploadChannel(channelId, uploadChannelDto, createBy);
         uploadChannelRepository.save(uploadChannel);
 
-        String domain = storeNode.getDomain();
+        String domain = userNode.getDomain();
         String name = uploadChannel.getName();
         long maxSize = uploadChannel.getMaxSize();
         int fileType = uploadChannel.getFileType();
@@ -72,11 +76,8 @@ public class UploadChannelService {
         int scope = uploadChannel.getScope();
         ObjectChannel channel = new ObjectChannel(channelId, name, channelPrefix, maxSize, fileType, seturl, scope, domain, createBy);
 
-        String host = storeNode.getNodeAddr();
-        int port = storeNode.getRpcPort();
-        RemoteService<StoreService> remoteService = new RemoteService<>();
-        StoreService storeService = remoteService.getService(host, port, StoreService.class);
-        storeService.createChannel(createBy, channel);
+        StoreNode storeNode = storeNodeService.getById(nodeId);
+        storeRpcService.createChannel(storeNode, createBy, channel);
         return Result.success();
     }
 
@@ -119,19 +120,14 @@ public class UploadChannelService {
         List<UploadChannelVo> list = page.stream().map(uploadChannel -> {
             long maxSize = uploadChannel.getMaxSize();
             String maxSizeStr = byteConverter.convert(ByteType.Bytes, maxSize);
-            String bindDomain = storeNodeService.getById(uploadChannel.getNodeId()).getDomain();
+            UserNode userNode = userNodeService.getUserNode(uploadChannel.getNodeId(), loginUser);
+            String bindDomain = userNode.getDomain();
             return new UploadChannelVo(uploadChannel, maxSizeStr, bindDomain);
         }).collect(Collectors.toList());
 
         return new PageImpl<>(list, pageRequest, page.getTotalElements());
     }
 
-    public List<UploadChannel> getByDomain(String domain) {
-        StoreNode storeNode = storeNodeService.getByDomain(domain);
-        int nodeId = storeNode.getId();
-        return uploadChannelRepository.findByNodeId(nodeId);
-    }
-
     public UploadChannel getUploadChannel(int id) {
         return uploadChannelRepository.findById(id).orElse(null);
     }
@@ -153,8 +149,10 @@ public class UploadChannelService {
         int fileType = uploadChannel.getFileType();
         boolean seturl = uploadChannel.getSeturl();
         int scope = uploadChannel.getScope();
-        String domain = storeNodeService.getById(uploadChannel.getNodeId()).getDomain();
         int createBy = uploadChannel.getCreateBy();
+
+        UserNode userNode = userNodeService.getUserNode(uploadChannel.getNodeId(), createBy);
+        String domain = userNode.getDomain();
         return new ObjectChannel(channelId, name, channelPrefix, maxSize, fileType, seturl, scope, domain, createBy);
     }
 
@@ -165,7 +163,8 @@ public class UploadChannelService {
             throw new Exception(errMsg);
         }
 
-        String domain = storeNodeService.getById(uploadChannel.getNodeId()).getDomain();
+        UserNode userNode = userNodeService.getUserNode(uploadChannel.getNodeId(), uploadChannel.getCreateBy());
+        String domain = userNode.getDomain();
         String ossUrl = String.format("//%s", domain);
         long maxSize = uploadChannel.getMaxSize();
 

+ 25 - 4
oss-console/src/main/java/cn/reghao/oss/console/app/service/UserNodeService.java

@@ -2,11 +2,13 @@ package cn.reghao.oss.console.app.service;
 
 import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.oss.console.account.service.UserContext;
+import cn.reghao.oss.console.app.db.repository.UploadChannelRepository;
 import cn.reghao.oss.console.app.db.repository.UserNodeRepository;
 import cn.reghao.oss.console.app.model.dto.UserNodeDto;
 import cn.reghao.oss.console.app.model.po.StoreNode;
 import cn.reghao.oss.console.app.model.po.UploadChannel;
 import cn.reghao.oss.console.app.model.po.UserNode;
+import cn.reghao.oss.console.app.model.vo.UserNodeVO;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;
 
@@ -21,14 +23,14 @@ import java.util.stream.Collectors;
 @Service
 public class UserNodeService {
     private final UserNodeRepository userNodeRepository;
+    private final UploadChannelRepository uploadChannelRepository;
     private final StoreNodeService storeNodeService;
-    private final UploadChannelService uploadChannelService;
 
     public UserNodeService(UserNodeRepository userNodeRepository, StoreNodeService storeNodeService,
-                           UploadChannelService uploadChannelService) {
+                           UploadChannelRepository uploadChannelRepository) {
         this.userNodeRepository = userNodeRepository;
         this.storeNodeService = storeNodeService;
-        this.uploadChannelService = uploadChannelService;
+        this.uploadChannelRepository = uploadChannelRepository;
     }
 
     public Result add(UserNodeDto userNodeDto) {
@@ -55,7 +57,7 @@ public class UserNodeService {
             int nodeId = userNode.getNodeId();
 
             int userId = UserContext.getUser().getId();
-            List<UploadChannel> uploadChannels = uploadChannelService.getByNodeIdAndUserId(nodeId, userId);
+            List<UploadChannel> uploadChannels = uploadChannelRepository.findByNodeIdAndCreateBy(nodeId, userId);
             if (!uploadChannels.isEmpty()) {
                 return Result.fail("UploadChannel exists");
             }
@@ -79,6 +81,25 @@ public class UserNodeService {
         return storeNodeService.getByIds(nodeIds);
     }
 
+    public List<UserNodeVO> getUserStoreNodes1() {
+        int loginUser = UserContext.getUser().getId();
+        PageRequest pageRequest = PageRequest.of(0, 100);
+        List<UserNode> list = userNodeRepository.findByUserId(loginUser, pageRequest).getContent();
+        if (list.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        return list.stream()
+                .map(userNode -> {
+                    int nodeId = userNode.getNodeId();
+                    StoreNode storeNode = storeNodeService.getById(nodeId);
+                    String nodeAddr = storeNode.getNodeAddr();
+                    String domain = userNode.getDomain();
+                    return new UserNodeVO(nodeId, nodeId, nodeAddr, domain);
+                })
+                .collect(Collectors.toList());
+    }
+
     public UserNode getUserNode(int nodeId, int loginUser) {
         return userNodeRepository.findByNodeIdAndUserId(nodeId, loginUser);
     }

+ 10 - 2
oss-console/src/main/java/cn/reghao/oss/console/app/controller/MediaController.java → oss-console/src/main/java/cn/reghao/oss/console/store/controller/MediaController.java

@@ -1,8 +1,8 @@
-package cn.reghao.oss.console.app.controller;
+package cn.reghao.oss.console.store.controller;
 
 import cn.reghao.jutil.jdk.result.WebResult;
 import cn.reghao.oss.console.app.model.dto.GetImageUrls;
-import cn.reghao.oss.console.app.rpc.MediaRpcService;
+import cn.reghao.oss.console.store.rpc.MediaRpcService;
 import cn.reghao.oss.api.dto.media.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -54,4 +54,12 @@ public class MediaController {
         AudioInfo audioInfo = mediaRpcService.getAudioInfo(channelId, audioFileId);
         return WebResult.success(audioInfo);
     }
+
+    @ApiOperation(value = "获取对象签名 url")
+    @GetMapping(value = "/url", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String getObjectUrl(@RequestParam("channelId") Integer channelId,
+                               @RequestParam("objectId") String objectId) throws Exception {
+        String signedUrl = mediaRpcService.getSignedUrl(channelId, objectId);
+        return WebResult.success(signedUrl);
+    }
 }

+ 10 - 10
oss-console/src/main/java/cn/reghao/oss/console/app/controller/ObjectController.java → oss-console/src/main/java/cn/reghao/oss/console/store/controller/ObjectController.java

@@ -1,8 +1,8 @@
-package cn.reghao.oss.console.app.controller;
+package cn.reghao.oss.console.store.controller;
 
 import cn.reghao.jutil.jdk.result.WebResult;
 import cn.reghao.oss.console.app.model.dto.ObjectsScopeDto;
-import cn.reghao.oss.console.app.rpc.OssObjectService;
+import cn.reghao.oss.console.store.rpc.ObjectRpcService;
 import cn.reghao.oss.api.dto.ObjectInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -19,16 +19,16 @@ import java.util.List;
 @RestController
 @RequestMapping("/api/oss/object")
 public class ObjectController {
-    private final OssObjectService ossObjectService;
+    private final ObjectRpcService objectRpcService;
 
-    public ObjectController(OssObjectService ossObjectService) {
-        this.ossObjectService = ossObjectService;
+    public ObjectController(ObjectRpcService objectRpcService) {
+        this.objectRpcService = objectRpcService;
     }
 
     @ApiOperation(value = "设置对象列表可见范围")
     @PostMapping(value = "/scope/objects", produces = MediaType.APPLICATION_JSON_VALUE)
     public String setObjectsScope(ObjectsScopeDto objectsScopeDto) throws Exception {
-        ossObjectService.setObjectsScope(objectsScopeDto);
+        objectRpcService.setObjectsScope(objectsScopeDto);
         return WebResult.success();
     }
 
@@ -36,14 +36,14 @@ public class ObjectController {
     @PostMapping(value = "/delete/ids", produces = MediaType.APPLICATION_JSON_VALUE)
     public String deleteByObjects(@RequestParam("channelId") Integer channelId,
                                   @RequestParam("objectIds") List<String> objectIds) throws Exception {
-        ossObjectService.deleteByObjectIds(channelId, objectIds);
+        objectRpcService.deleteByObjectIds(channelId, objectIds);
         return WebResult.success();
     }
 
     @ApiOperation(value = "根据 object_url 删除对象")
     @PostMapping(value = "/delete/url", produces = MediaType.APPLICATION_JSON_VALUE)
     public String deleteByObjectUrl(@RequestParam("objectUrl") String objectUrl) throws Exception {
-        ossObjectService.deleteByObjectUrl(objectUrl);
+        objectRpcService.deleteByObjectUrl(objectUrl);
         return WebResult.success();
     }
 
@@ -52,7 +52,7 @@ public class ObjectController {
     @GetMapping(value = "/url", produces = MediaType.APPLICATION_JSON_VALUE)
     public String getObjectUrl(@RequestParam("channelId") Integer channelId,
                                @RequestParam("objectId") String objectId) throws Exception {
-        //String signedUrl = ossObjectService.getSignedUrl(channelId, objectId);
+        //String signedUrl = objectRpcService.getSignedUrl(channelId, objectId);
         return WebResult.success();
     }
 
@@ -60,7 +60,7 @@ public class ObjectController {
     @GetMapping(value = "/info", produces = MediaType.APPLICATION_JSON_VALUE)
     public String getObjectInfo(@RequestParam("channelId") int channelId,
                                 @RequestParam("objectId") String objectId) throws Exception {
-        ObjectInfo objectInfo = ossObjectService.getObjectInfo(channelId, objectId);
+        ObjectInfo objectInfo = objectRpcService.getObjectInfo(channelId, objectId);
         return WebResult.success(objectInfo);
     }
 }

+ 6 - 1
oss-console/src/main/java/cn/reghao/oss/console/app/rpc/MediaRpcService.java → oss-console/src/main/java/cn/reghao/oss/console/store/rpc/MediaRpcService.java

@@ -1,4 +1,4 @@
-package cn.reghao.oss.console.app.rpc;
+package cn.reghao.oss.console.store.rpc;
 
 import cn.reghao.oss.console.app.model.po.StoreNode;
 import cn.reghao.oss.console.app.service.UploadChannelService;
@@ -44,6 +44,11 @@ public class MediaRpcService {
         return mediaService.getAudioInfo(channelId, audioFileId);
     }
 
+    public String getSignedUrl(int channelId, String objectId) throws Exception {
+        MediaService mediaService = getMediaService(channelId);
+        return mediaService.getSignedUrl(channelId, objectId);
+    }
+
     private MediaService getMediaService(int channelId) throws Exception {
         int loginUser = 1;
         StoreNode storeNode = uploadChannelService.getStoreNodeByChannelId(loginUser, channelId);

+ 3 - 3
oss-console/src/main/java/cn/reghao/oss/console/app/rpc/OssObjectService.java → oss-console/src/main/java/cn/reghao/oss/console/store/rpc/ObjectRpcService.java

@@ -1,4 +1,4 @@
-package cn.reghao.oss.console.app.rpc;
+package cn.reghao.oss.console.store.rpc;
 
 import cn.reghao.oss.console.app.model.dto.ObjectsScopeDto;
 import cn.reghao.oss.console.app.model.po.StoreNode;
@@ -16,10 +16,10 @@ import java.util.List;
  * @date 2024-02-29 14:27:03
  */
 @Service
-public class OssObjectService {
+public class ObjectRpcService {
     private final UploadChannelService uploadChannelService;
 
-    public OssObjectService(UploadChannelService uploadChannelService) {
+    public ObjectRpcService(UploadChannelService uploadChannelService) {
         this.uploadChannelService = uploadChannelService;
     }
 

+ 1 - 1
oss-console/src/main/java/cn/reghao/oss/console/app/rpc/RemoteService.java → oss-console/src/main/java/cn/reghao/oss/console/store/rpc/RemoteService.java

@@ -1,4 +1,4 @@
-package cn.reghao.oss.console.app.rpc;
+package cn.reghao.oss.console.store.rpc;
 
 import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.config.ConsumerConfig;

+ 32 - 0
oss-console/src/main/java/cn/reghao/oss/console/store/rpc/StoreRpcService.java

@@ -0,0 +1,32 @@
+package cn.reghao.oss.console.store.rpc;
+
+import cn.reghao.oss.api.dto.ObjectChannel;
+import cn.reghao.oss.api.dto.StoreInfo;
+import cn.reghao.oss.api.iface.StoreService;
+import cn.reghao.oss.console.app.model.po.StoreNode;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author reghao
+ * @date 2024-07-02 16:11:38
+ */
+@Service
+public class StoreRpcService {
+    public void createChannel(StoreNode storeNode, int createBy, ObjectChannel channel) {
+        StoreService storeService = getStoreService(storeNode);
+        storeService.createChannel(createBy, channel);
+    }
+
+    public StoreInfo getStoreInfo(StoreNode storeNode) {
+        StoreService storeService = getStoreService(storeNode);
+        StoreInfo storeInfo = storeService.getStoreInfo();
+        return storeInfo;
+    }
+
+    private StoreService getStoreService(StoreNode storeNode) {
+        String host = storeNode.getNodeAddr();
+        int port = storeNode.getRpcPort();
+        RemoteService<StoreService> remoteService = new RemoteService<>();
+        return remoteService.getService(host, port, StoreService.class);
+    }
+}

+ 1 - 1
oss-console/src/main/resources/application.yml

@@ -5,7 +5,7 @@ dubbo:
   application:
     name: oss-console-provider
   scan:
-    base-packages: cn.reghao.oss.console.rpc
+    base-packages: cn.reghao.oss.console.app.rpc
   registry:
     address: N/A
 server:

+ 0 - 36
oss-console/src/main/resources/templates/node/edit.html

@@ -20,42 +20,6 @@
                     </div>
                 </td>
             </tr>
-            <tr>
-                <th>
-                    <label class="layui-form-label required">节点域名</label>
-                </th>
-                <td>
-                    <div class="layui-form-item">
-                        <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="domain" required th:value="${storeNode.domain}">
-                        </div>
-                    </div>
-                </td>
-            </tr>
-            <tr>
-                <th>
-                    <label class="layui-form-label required">SecretKey</label>
-                </th>
-                <td>
-                    <div class="layui-form-item">
-                        <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="secretKey" th:value="${storeNode.secretKey}">
-                        </div>
-                    </div>
-                </td>
-            </tr>
-            <tr>
-                <th>
-                    <label class="layui-form-label">referer</label>
-                </th>
-                <td>
-                    <div class="layui-form-item">
-                        <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="referer" th:value="${storeNode.referer}">
-                        </div>
-                    </div>
-                </td>
-            </tr>
             </tbody>
         </table>
         <div class="layui-form-item timo-finally">

+ 0 - 2
oss-console/src/main/resources/templates/node/index.html

@@ -32,7 +32,6 @@
                     <th class="sortable" data-field="appName">节点地址</th>
                     <th class="sortable" data-field="appId">HTTP 端口</th>
                     <th class="sortable" data-field="repoBranch">RPC 端口</th>
-                    <th class="sortable" data-field="appName">节点域名</th>
                     <th class="sortable" data-field="appName">启用</th>
                     <th>操作</th>
                 </tr>
@@ -42,7 +41,6 @@
                     <td th:text="${item.nodeAddr}">应用名</td>
                     <td th:text="${item.httpPort}">应用 ID</td>
                     <td th:text="${item.rpcPort}">分支</td>
-                    <td th:text="${item.domain}">应用名</td>
                     <td th:text="${item.enabled}">应用名</td>
                     <td>
                         <a class="open-popup" data-title="设置存储节点" th:attr="data-url=@{'/store/node/config/'+${item.id}}"