Переглянути джерело

oss-web 中更新 UploadChannel 的相关接口

reghao 2 роки тому
батько
коміт
412106b225

+ 33 - 20
oss-web/src/main/java/cn/reghao/oss/web/app/controller/page/StoreChannelPageController.java

@@ -1,8 +1,14 @@
 package cn.reghao.oss.web.app.controller.page;
 
+import cn.reghao.jutil.jdk.converter.ByteConverter;
+import cn.reghao.jutil.jdk.converter.ByteType;
+import cn.reghao.oss.api.constant.ObjectScope;
+import cn.reghao.oss.api.constant.ObjectType;
 import cn.reghao.oss.web.app.db.repository.UploadChannelRepository;
 import cn.reghao.oss.web.app.model.po.UploadChannel;
 import cn.reghao.oss.web.app.model.vo.KeyValue;
+import cn.reghao.oss.web.app.model.vo.UploadChannelVo;
+import cn.reghao.oss.web.app.service.UploadChannelService;
 import cn.reghao.oss.web.app.service.UserNodeService;
 import cn.reghao.oss.web.util.DefaultSetting;
 import cn.reghao.oss.web.util.db.PageSort;
@@ -26,11 +32,11 @@ import java.util.stream.Collectors;
 @Controller
 @RequestMapping("/store/channel")
 public class StoreChannelPageController {
-    private final UploadChannelRepository uploadChannelRepository;
+    private final UploadChannelService uploadChannelService;
     private final UserNodeService userNodeService;
 
-    public StoreChannelPageController(UploadChannelRepository uploadChannelRepository, UserNodeService userNodeService) {
-        this.uploadChannelRepository = uploadChannelRepository;
+    public StoreChannelPageController(UploadChannelService uploadChannelService, UserNodeService userNodeService) {
+        this.uploadChannelService = uploadChannelService;
         this.userNodeService = userNodeService;
     }
 
@@ -48,7 +54,7 @@ public class StoreChannelPageController {
         }
 
         PageRequest pageRequest = PageSort.pageRequest();
-        Page<UploadChannel> page = uploadChannelRepository.findAll(pageRequest);
+        Page<UploadChannelVo> page = uploadChannelService.getUploadChannels(pageRequest);
 
         model.addAttribute("env", env);
         model.addAttribute("type", type);
@@ -61,29 +67,36 @@ public class StoreChannelPageController {
     @GetMapping("/add")
     public String deployPage(Model model) {
         List<KeyValue> objectTypes = new ArrayList<>();
-        objectTypes.add(new KeyValue("application/octet-stream", "other"));
-        objectTypes.add(new KeyValue("image/jpeg", "image"));
-        objectTypes.add(new KeyValue("text/plain", "text"));
-        objectTypes.add(new KeyValue("video/mp4", "video"));
-        objectTypes.add(new KeyValue("audio/wav", "audio"));
-        model.addAttribute("objectTypes", objectTypes);
+        for (ObjectType objectType : ObjectType.values()) {
+            if (objectType.getCode() == 1000) {
+                continue;
+            }
+            objectTypes.add(new KeyValue(objectType.getCode()+"", objectType.name()));
+        }
 
-        List<KeyValue> list1 = new ArrayList<>();
-        list1.add(new KeyValue(1024L*1024*2+"", "2MiB"));
-        list1.add(new KeyValue(1024L*1024*10+"", "10MiB"));
-        list1.add(new KeyValue(1024L*1024*100+"", "100MiB"));
-        list1.add(new KeyValue(1024L*1024*1024+"", "1GiB"));
-        list1.add(new KeyValue(1024L*1024*1024*10+"", "10GiB"));
-        list1.add(new KeyValue(1024L*1024*1024*20+"", "20GiB"));
+        List<KeyValue> objectScopes = new ArrayList<>();
+        for (ObjectScope objectScope : ObjectScope.values()) {
+            objectScopes.add(new KeyValue(objectScope.getCode()+"", objectScope.name()));
+        }
 
-        List<KeyValue> list = userNodeService.getUserStoreNodes().stream()
+        List<KeyValue> sizeList = new ArrayList<>();
+        sizeList.add(new KeyValue(1024L*1024*2+"", "2MiB"));
+        sizeList.add(new KeyValue(1024L*1024*10+"", "10MiB"));
+        sizeList.add(new KeyValue(1024L*1024*100+"", "100MiB"));
+        sizeList.add(new KeyValue(1024L*1024*1024+"", "1GiB"));
+        sizeList.add(new KeyValue(1024L*1024*1024*10+"", "10GiB"));
+        sizeList.add(new KeyValue(1024L*1024*1024*20+"", "20GiB"));
+
+        List<KeyValue> storeNodes = userNodeService.getUserStoreNodes().stream()
                 .map(storeNode -> {
                     String domain = storeNode.getDomain();
                     return new KeyValue(domain, domain);
                 }).collect(Collectors.toList());
 
-        model.addAttribute("sizeList", list1);
-        model.addAttribute("storeNodes", list);
+        model.addAttribute("objectTypes", objectTypes);
+        model.addAttribute("objectScopes", objectScopes);
+        model.addAttribute("sizeList", sizeList);
+        model.addAttribute("storeNodes", storeNodes);
         return "/channel/add";
     }
 }

+ 4 - 0
oss-web/src/main/java/cn/reghao/oss/web/app/db/repository/UploadChannelRepository.java

@@ -1,6 +1,9 @@
 package cn.reghao.oss.web.app.db.repository;
 
 import cn.reghao.oss.web.app.model.po.UploadChannel;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 import java.util.List;
@@ -15,4 +18,5 @@ public interface UploadChannelRepository extends JpaRepository<UploadChannel, In
     UploadChannel findByPrefixAndCreateBy(String prefix, int createBy);
     List<UploadChannel> findByBindDomain(String domain);
     UploadChannel findByBindDomainAndChannelId(String domain, int channelId);
+    Page<UploadChannel> findByCreateBy(int createBy, Pageable pageable);
 }

+ 6 - 2
oss-web/src/main/java/cn/reghao/oss/web/app/model/dto/UploadChannelDto.java

@@ -18,6 +18,10 @@ public class UploadChannelDto {
     private String channelPrefix;
     @NotNull
     private Long maxSize;
-    @Length(max = 20, message = "简介最大长度为 40 个字符")
-    private String description;
+    @NotNull
+    private Integer fileType;
+    @Length(min = 6, max = 20, message = "名字长度在 6~20 个字符之间")
+    private String name;
+    @NotNull
+    private Integer scope;
 }

+ 5 - 3
oss-web/src/main/java/cn/reghao/oss/web/app/model/po/UploadChannel.java

@@ -21,16 +21,18 @@ public class UploadChannel extends BaseEntity {
     private String name;
     private String prefix;
     private Long maxSize;
-    private String contentType;
-    private String description;
+    private Integer fileType;
+    private Integer scope;
     private String bindDomain;
     private Integer createBy;
 
     public UploadChannel(int channelId, UploadChannelDto uploadChannelDto, int createBy) {
         this.channelId = channelId;
+        this.name = uploadChannelDto.getName();
         this.prefix = uploadChannelDto.getChannelPrefix();
         this.maxSize = uploadChannelDto.getMaxSize();
-        this.description = uploadChannelDto.getDescription();
+        this.fileType = uploadChannelDto.getFileType();
+        this.scope = uploadChannelDto.getScope();
         this.bindDomain = uploadChannelDto.getDomain();
         this.createBy = createBy;
     }

+ 0 - 17
oss-web/src/main/java/cn/reghao/oss/web/app/model/vo/ChartData.java

@@ -1,17 +0,0 @@
-package cn.reghao.oss.web.app.model.vo;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-11-07 11:10:45
- */
-@Setter
-@Getter
-public class ChartData {
-    private List<String> xAxis;
-    private List<Integer> yAxis;
-}

+ 0 - 17
oss-web/src/main/java/cn/reghao/oss/web/app/model/vo/CommitInfoVO.java

@@ -1,17 +0,0 @@
-package cn.reghao.oss.web.app.model.vo;
-
-import cn.reghao.jutil.jdk.converter.DateTimeConverter;
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2021-10-20 20:40:37
- */
-@Data
-public class CommitInfoVO {
-    private String commitAuthor;
-    private String commitMsg;
-    private String commitTime;
-}

+ 33 - 0
oss-web/src/main/java/cn/reghao/oss/web/app/model/vo/UploadChannelVo.java

@@ -0,0 +1,33 @@
+package cn.reghao.oss.web.app.model.vo;
+
+import cn.reghao.oss.api.constant.ObjectScope;
+import cn.reghao.oss.api.constant.ObjectType;
+import cn.reghao.oss.web.app.model.po.UploadChannel;
+import lombok.Getter;
+
+/**
+ * @author reghao
+ * @date 2024-02-28 13:16:02
+ */
+@Getter
+public class UploadChannelVo {
+    private int id;
+    private int channelId;
+    private String name;
+    private String prefix;
+    private String maxSize;
+    private String fileType;
+    private String scope;
+    private String bindDomain;
+
+    public UploadChannelVo(UploadChannel uploadChannel, String maxSize) {
+        this.id = uploadChannel.getId();
+        this.channelId = uploadChannel.getChannelId();
+        this.name = uploadChannel.getName();
+        this.prefix = uploadChannel.getPrefix();
+        this.maxSize = maxSize;
+        this.fileType = ObjectType.getDescByCode(uploadChannel.getFileType());
+        this.scope = ObjectScope.getByCode(uploadChannel.getScope()).name();
+        this.bindDomain = uploadChannel.getBindDomain();
+    }
+}

+ 9 - 10
oss-web/src/main/java/cn/reghao/oss/web/app/service/OssService.java

@@ -62,13 +62,7 @@ public class OssService {
 
         String domain = storeNode.getDomain();
         return uploadChannelRepository.findByBindDomain(domain).stream()
-                .map(uploadChannel -> {
-                    String name = uploadChannel.getDescription();
-                    long maxSize = uploadChannel.getMaxSize();
-                    String channelPrefix = uploadChannel.getPrefix();
-                    String contentType = uploadChannel.getContentType();
-                    return new ObjectChannel(name, channelPrefix, maxSize, contentType, domain);
-                })
+                .map(uploadChannel -> getObjectChannel(uploadChannel, domain))
                 .collect(Collectors.toList());
     }
 
@@ -84,11 +78,16 @@ public class OssService {
             return null;
         }
 
-        String name = uploadChannel.getDescription();
+        return getObjectChannel(uploadChannel, domain);
+    }
+
+    private ObjectChannel getObjectChannel(UploadChannel uploadChannel, String domain) {
+        String name = uploadChannel.getName();
         String channelPrefix = uploadChannel.getPrefix();
         long maxSize = uploadChannel.getMaxSize();
-        String contentType = uploadChannel.getContentType();
-        return new ObjectChannel(name, channelPrefix, maxSize, contentType, domain);
+        int fileType = uploadChannel.getFileType();
+        int scope = uploadChannel.getScope();
+        return new ObjectChannel(name, channelPrefix, maxSize, fileType, scope, domain);
     }
 
     public ObjectInfo getObjectInfo(String objectId) {

+ 28 - 6
oss-web/src/main/java/cn/reghao/oss/web/app/service/UploadChannelService.java

@@ -1,5 +1,7 @@
 package cn.reghao.oss.web.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.api.dto.ObjectChannel;
 import cn.reghao.oss.api.iface.OssServerService;
@@ -9,8 +11,15 @@ import cn.reghao.oss.web.app.db.repository.UploadChannelRepository;
 import cn.reghao.oss.web.app.model.dto.UploadChannelDto;
 import cn.reghao.oss.web.app.model.po.StoreNode;
 import cn.reghao.oss.web.app.model.po.UploadChannel;
+import cn.reghao.oss.web.app.model.vo.UploadChannelVo;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * @author reghao
  * @date 2024-02-23 15:14:53
@@ -19,6 +28,7 @@ import org.springframework.stereotype.Service;
 public class UploadChannelService {
     private final UploadChannelRepository uploadChannelRepository;
     private final StoreNodeRepository storeNodeRepository;
+    private final ByteConverter byteConverter = new ByteConverter();
 
     public UploadChannelService(UploadChannelRepository uploadChannelRepository, StoreNodeRepository storeNodeRepository) {
         this.uploadChannelRepository = uploadChannelRepository;
@@ -32,8 +42,7 @@ public class UploadChannelService {
             return Result.fail(String.format("store_node with domain %s not exist", domain));
         }
 
-        //int createBy = UserContext.getUser().getId();
-        int createBy = 410;
+        int createBy = UserContext.getUser().getId();
         String channelPrefix = uploadChannelDto.getChannelPrefix();
         UploadChannel uploadChannel = uploadChannelRepository.findByPrefixAndCreateBy(channelPrefix, createBy);
         if (uploadChannel != null) {
@@ -44,10 +53,11 @@ public class UploadChannelService {
         uploadChannel = new UploadChannel(channelId, uploadChannelDto, createBy);
         uploadChannelRepository.save(uploadChannel);
 
-        String name = uploadChannel.getDescription();
+        String name = uploadChannel.getName();
         long maxSize = uploadChannel.getMaxSize();
-        String contentType = "video/";
-        ObjectChannel channel = new ObjectChannel(name, channelPrefix, maxSize, contentType, domain);
+        int fileType = uploadChannel.getFileType();
+        int scope = uploadChannel.getScope();
+        ObjectChannel channel = new ObjectChannel(name, channelPrefix, maxSize, fileType, scope, domain);
 
         String host = storeNode.getIpv4Addr();
         int port = storeNode.getRpcPort();
@@ -58,8 +68,20 @@ public class UploadChannelService {
     }
 
     private int getNextChannelId(int userId) {
-        int channelId = 1001;
+        int channelId = 101;
         int total = uploadChannelRepository.countByCreateBy(userId);
         return channelId + total;
     }
+
+    public Page<UploadChannelVo> getUploadChannels(PageRequest pageRequest) {
+        int loginUser = UserContext.getUser().getId();
+        Page<UploadChannel> page = uploadChannelRepository.findByCreateBy(loginUser, pageRequest);
+        List<UploadChannelVo> list = page.stream().map(uploadChannel -> {
+            long maxSize = uploadChannel.getMaxSize();
+            String maxSizeStr = byteConverter.convert(ByteType.Bytes, maxSize);
+            return new UploadChannelVo(uploadChannel, maxSizeStr);
+        }).collect(Collectors.toList());
+
+        return new PageImpl<>(list, pageRequest, page.getTotalElements());
+    }
 }

+ 19 - 5
oss-web/src/main/resources/templates/channel/add.html

@@ -29,7 +29,7 @@
                     <div class="layui-form-item">
                         <div class="layui-input-inline">
                             <label>
-                                <input class="layui-input" type="text" name="channelPrefix" placeholder="请输入通道前缀" required>
+                                <input class="layui-input" type="text" name="channelPrefix" placeholder="请填写通道前缀" required>
                             </label>
                         </div>
                     </div>
@@ -37,18 +37,32 @@
             </tr>
             <tr>
                 <th>
-                    <label class="layui-form-label required">对象类型</label>
+                    <label class="layui-form-label required">文件类型</label>
                 </th>
                 <td>
                     <div class="layui-form-item">
                         <div class="layui-input-inline">
-                            <select name="objectType">
+                            <select name="fileType">
                                 <option th:each="item : ${objectTypes}" th:value="${item.key}">[[${item.value}]]</option>
                             </select>
                         </div>
                     </div>
                 </td>
             </tr>
+            <tr>
+                <th>
+                    <label class="layui-form-label required">可见范围</label>
+                </th>
+                <td>
+                    <div class="layui-form-item">
+                        <div class="layui-input-inline">
+                            <select name="scope">
+                                <option th:each="item : ${objectScopes}" th:value="${item.key}">[[${item.value}]]</option>
+                            </select>
+                        </div>
+                    </div>
+                </td>
+            </tr>
             <tr>
                 <th>
                     <label class="layui-form-label required">最大文件</label>
@@ -65,12 +79,12 @@
             </tr>
             <tr>
                 <th>
-                    <label class="layui-form-label required">通道简介</label>
+                    <label class="layui-form-label required">通道名字</label>
                 </th>
                 <td>
                     <div class="layui-form-item">
                         <div class="layui-input-inline">
-                            <textarea class="layui-textarea" name="description" placeholder="请填写通道简介"></textarea>
+                            <input class="layui-input" type="text" name="name" placeholder="请填写通道名字" required>
                         </div>
                     </div>
                 </td>

+ 6 - 19
oss-web/src/main/resources/templates/channel/index.html

@@ -22,13 +22,6 @@
                                     mo:dict="ENVIRONMENT" mo-selected="${env}"></select>
                         </div>
                     </div>
-                    <div class="layui-inline">
-                        <label class="layui-form-label">类型</label>
-                        <div class="layui-input-block timo-search-status">
-                            <select id="getPageByType" class="timo-search-select" name="type" onchange="getPageByCriteria()"
-                                    mo:dict="APP_TYPE" mo-selected="${type}"></select>
-                        </div>
-                    </div>
                     <div class="layui-inline timo-search-box">
                         <label class="layui-form-label">应用</label>
                         <div class="layui-input-block">
@@ -56,30 +49,24 @@
             <table class="layui-table timo-table">
                 <thead>
                 <tr>
-                    <th class="timo-table-checkbox">
-                        <label class="timo-checkbox"><input type="checkbox">
-                            <i class="layui-icon layui-icon-ok"></i></label>
-                    </th>
                     <th class="sortable" data-field="appName">Channel ID</th>
+                    <th class="sortable" data-field="appType">名字</th>
                     <th class="sortable" data-field="appId">前缀</th>
                     <th class="sortable" data-field="repoBranch">最大文件</th>
-                    <th class="sortable" data-field="appType">简介</th>
+                    <th class="sortable" data-field="repoBranch">文件类型</th>
+                    <th class="sortable" data-field="repoBranch">可见范围</th>
                     <th class="sortable" data-field="appName">绑定域名</th>
                     <th>操作</th>
                 </tr>
                 </thead>
                 <tbody>
                 <tr th:each="item:${list}">
-                    <td>
-                        <label class="timo-checkbox">
-                            <input type="checkbox" th:value="${item.id}">
-                            <i class="layui-icon layui-icon-ok"></i>
-                        </label>
-                    </td>
                     <td th:text="${item.channelId}">Channel ID</td>
+                    <td th:text="${item.name}">名字</td>
                     <td th:text="${item.prefix}">前缀</td>
                     <td th:text="${item.maxSize}">最大文件</td>
-                    <td th:text="${item.description}">简介</td>
+                    <td th:text="${item.fileType}">文件类型</td>
+                    <td th:text="${item.scope}">可见范围</td>
                     <td th:text="${item.bindDomain}">绑定域名</td>
                     <td>
                         <a class="open-popup" data-title="应用详细信息" th:attr="data-url=@{'/app/config/app/detail/'+${item.id}}"

+ 1 - 1
oss-web/src/main/resources/templates/object/index.html

@@ -64,7 +64,7 @@
                     <td th:text="${item.id}">ID</td>
                     <td th:text="${item.prefix}">前缀</td>
                     <td th:text="${item.maxSize}">最大文件</td>
-                    <td th:text="${item.description}">简介</td>
+                    <td th:text="${item.name}">简介</td>
                     <td th:text="${item.bindDomain}">绑定域名</td>
                     <td>
                         <a class="open-popup" data-title="应用详细信息" th:attr="data-url=@{'/app/config/app/detail/'+${item.id}}"

+ 3 - 1
oss-web/src/test/java/AccountTest.java

@@ -35,12 +35,14 @@ public class AccountTest {
             String name = uploadChannel.name();
             long maxSize = uploadChannel.getMaxSize();
             String prefix = uploadChannel.getPrefix();
+            int fileType = uploadChannel.getFileType();
 
             UploadChannelDto uploadChannelDto = new UploadChannelDto();
             uploadChannelDto.setDomain("oss.reghao.cn");
             uploadChannelDto.setChannelPrefix(prefix);
             uploadChannelDto.setMaxSize(maxSize);
-            uploadChannelDto.setDescription(name);
+            uploadChannelDto.setName(name);
+            uploadChannelDto.setFileType(fileType);
 
             uploadChannelService.add(uploadChannelDto);
         }