mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-10-31 10:57:13 +08:00 
			
		
		
		
	refactor: 优化存储管理
This commit is contained in:
		| @@ -20,9 +20,10 @@ import top.charles7c.continew.admin.system.model.entity.StorageDO; | |||||||
| import top.charles7c.continew.starter.data.mybatis.plus.base.BaseMapper; | import top.charles7c.continew.starter.data.mybatis.plus.base.BaseMapper; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 存储库 Mapper |  * 存储 Mapper | ||||||
|  * |  * | ||||||
|  * @author Charles7c |  * @author Charles7c | ||||||
|  * @since 2023/12/26 22:09 |  * @since 2023/12/26 22:09 | ||||||
|  */ |  */ | ||||||
| public interface StorageMapper extends BaseMapper<StorageDO> {} | public interface StorageMapper extends BaseMapper<StorageDO> { | ||||||
|  | } | ||||||
| @@ -73,14 +73,14 @@ public class FileDO extends BaseDO { | |||||||
|     private FileTypeEnum type; |     private FileTypeEnum type; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 存储库 ID |      * 存储 ID | ||||||
|      */ |      */ | ||||||
|     private Long storageId; |     private Long storageId; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 转换为 X-File-Storage 文件信息对象 |      * 转换为 X-File-Storage 文件信息对象 | ||||||
|      * |      * | ||||||
|      * @param storageCode 存储库编码 |      * @param storageCode 存储编码 | ||||||
|      * @return X-File-Storage 文件信息对象 |      * @return X-File-Storage 文件信息对象 | ||||||
|      */ |      */ | ||||||
|     public FileInfo toFileInfo(String storageCode) { |     public FileInfo toFileInfo(String storageCode) { | ||||||
|   | |||||||
| @@ -16,18 +16,16 @@ | |||||||
|  |  | ||||||
| package top.charles7c.continew.admin.system.model.entity; | package top.charles7c.continew.admin.system.model.entity; | ||||||
|  |  | ||||||
| import java.io.Serial; |  | ||||||
|  |  | ||||||
| import lombok.Data; |  | ||||||
|  |  | ||||||
| import com.baomidou.mybatisplus.annotation.TableName; | import com.baomidou.mybatisplus.annotation.TableName; | ||||||
|  | import lombok.Data; | ||||||
| import top.charles7c.continew.admin.common.enums.DisEnableStatusEnum; | import top.charles7c.continew.admin.common.enums.DisEnableStatusEnum; | ||||||
| import top.charles7c.continew.admin.system.enums.StorageTypeEnum; | import top.charles7c.continew.admin.system.enums.StorageTypeEnum; | ||||||
| import top.charles7c.continew.starter.extension.crud.model.entity.BaseDO; | import top.charles7c.continew.starter.extension.crud.model.entity.BaseDO; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 存储库实体 |  * 存储实体 | ||||||
|  * |  * | ||||||
|  * @author Charles7c |  * @author Charles7c | ||||||
|  * @since 2023/12/26 22:09 |  * @since 2023/12/26 22:09 | ||||||
| @@ -55,17 +53,17 @@ public class StorageDO extends BaseDO { | |||||||
|     private StorageTypeEnum type; |     private StorageTypeEnum type; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Access Key |      * Access Key(访问密钥) | ||||||
|      */ |      */ | ||||||
|     private String accessKey; |     private String accessKey; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Secret Key |      * Secret Key(私有密钥) | ||||||
|      */ |      */ | ||||||
|     private String secretKey; |     private String secretKey; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Endpoint |      * Endpoint(终端节点) | ||||||
|      */ |      */ | ||||||
|     private String endpoint; |     private String endpoint; | ||||||
|  |  | ||||||
| @@ -75,7 +73,7 @@ public class StorageDO extends BaseDO { | |||||||
|     private String bucketName; |     private String bucketName; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 自定义域名 |      * 域名 | ||||||
|      */ |      */ | ||||||
|     private String domain; |     private String domain; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -25,13 +25,13 @@ import java.io.Serial; | |||||||
| import java.io.Serializable; | import java.io.Serializable; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 存储库查询条件 |  * 存储查询条件 | ||||||
|  * |  * | ||||||
|  * @author Charles7c |  * @author Charles7c | ||||||
|  * @since 2023/12/26 22:09 |  * @since 2023/12/26 22:09 | ||||||
|  */ |  */ | ||||||
| @Data | @Data | ||||||
| @Schema(description = "存储库查询条件") | @Schema(description = "存储查询条件") | ||||||
| public class StorageQuery implements Serializable { | public class StorageQuery implements Serializable { | ||||||
|  |  | ||||||
|     @Serial |     @Serial | ||||||
| @@ -41,7 +41,7 @@ public class StorageQuery implements Serializable { | |||||||
|      * 关键词 |      * 关键词 | ||||||
|      */ |      */ | ||||||
|     @Schema(description = "关键词", example = "本地存储") |     @Schema(description = "关键词", example = "本地存储") | ||||||
|     @Query(columns = {"name", "description"}, type = QueryType.LIKE) |     @Query(columns = {"name", "code", "description"}, type = QueryType.LIKE) | ||||||
|     private String description; |     private String description; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -30,13 +30,13 @@ import top.charles7c.continew.starter.extension.crud.model.req.BaseReq; | |||||||
| import java.io.Serial; | import java.io.Serial; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 创建或修改存储库信息 |  * 存储请求信息 | ||||||
|  * |  * | ||||||
|  * @author Charles7c |  * @author Charles7c | ||||||
|  * @since 2023/12/26 22:09 |  * @since 2023/12/26 22:09 | ||||||
|  */ |  */ | ||||||
| @Data | @Data | ||||||
| @Schema(description = "创建或修改存储库信息") | @Schema(description = "存储请求信息") | ||||||
| public class StorageReq extends BaseReq { | public class StorageReq extends BaseReq { | ||||||
|  |  | ||||||
|     @Serial |     @Serial | ||||||
| @@ -45,7 +45,7 @@ public class StorageReq extends BaseReq { | |||||||
|     /** |     /** | ||||||
|      * 名称 |      * 名称 | ||||||
|      */ |      */ | ||||||
|     @Schema(description = "名称", example = "存储库1") |     @Schema(description = "名称", example = "存储1") | ||||||
|     @NotBlank(message = "名称不能为空") |     @NotBlank(message = "名称不能为空") | ||||||
|     @Length(max = 100, message = "名称长度不能超过 {max} 个字符") |     @Length(max = 100, message = "名称长度不能超过 {max} 个字符") | ||||||
|     private String name; |     private String name; | ||||||
| @@ -94,10 +94,10 @@ public class StorageReq extends BaseReq { | |||||||
|     private String bucketName; |     private String bucketName; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 自定义域名 |      * 域名 | ||||||
|      */ |      */ | ||||||
|     @Schema(description = "自定义域名", example = "http://localhost:8000/file") |     @Schema(description = "域名", example = "http://localhost:8000/file") | ||||||
|     @Length(max = 255, message = "自定义域名长度不能超过 {max} 个字符") |     @Length(max = 255, message = "域名长度不能超过 {max} 个字符") | ||||||
|     private String domain; |     private String domain; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -109,7 +109,7 @@ public class StorageReq extends BaseReq { | |||||||
|     /** |     /** | ||||||
|      * 描述 |      * 描述 | ||||||
|      */ |      */ | ||||||
|     @Schema(description = "描述", example = "存储库描述") |     @Schema(description = "描述", example = "存储描述") | ||||||
|     @Length(max = 200, message = "描述长度不能超过 {max} 个字符") |     @Length(max = 200, message = "描述长度不能超过 {max} 个字符") | ||||||
|     private String description; |     private String description; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -73,8 +73,8 @@ public class FileResp extends BaseDetailResp { | |||||||
|     private FileTypeEnum type; |     private FileTypeEnum type; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 存储库 ID |      * 存储 ID | ||||||
|      */ |      */ | ||||||
|     @Schema(description = "存储库ID", example = "1") |     @Schema(description = "存储ID", example = "1") | ||||||
|     private Long storageId; |     private Long storageId; | ||||||
| } | } | ||||||
| @@ -26,13 +26,13 @@ import top.charles7c.continew.starter.extension.crud.model.resp.BaseDetailResp; | |||||||
| import java.io.Serial; | import java.io.Serial; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 存储库信息 |  * 存储响应信息 | ||||||
|  * |  * | ||||||
|  * @author Charles7c |  * @author Charles7c | ||||||
|  * @since 2023/12/26 22:09 |  * @since 2023/12/26 22:09 | ||||||
|  */ |  */ | ||||||
| @Data | @Data | ||||||
| @Schema(description = "存储库信息") | @Schema(description = "存储响应信息") | ||||||
| public class StorageResp extends BaseDetailResp { | public class StorageResp extends BaseDetailResp { | ||||||
|  |  | ||||||
|     @Serial |     @Serial | ||||||
| @@ -41,7 +41,7 @@ public class StorageResp extends BaseDetailResp { | |||||||
|     /** |     /** | ||||||
|      * 名称 |      * 名称 | ||||||
|      */ |      */ | ||||||
|     @Schema(description = "名称", example = "存储库1") |     @Schema(description = "名称", example = "存储1") | ||||||
|     private String name; |     private String name; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -88,15 +88,15 @@ public class StorageResp extends BaseDetailResp { | |||||||
|     private String bucketName; |     private String bucketName; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 自定义域名 |      * 域名 | ||||||
|      */ |      */ | ||||||
|     @Schema(description = "自定义域名", example = "http://localhost:8000/file") |     @Schema(description = "域名", example = "http://localhost:8000/file") | ||||||
|     private String domain; |     private String domain; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 描述 |      * 描述 | ||||||
|      */ |      */ | ||||||
|     @Schema(description = "描述", example = "存储库描述") |     @Schema(description = "描述", example = "存储描述") | ||||||
|     private String description; |     private String description; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -36,7 +36,7 @@ import java.util.List; | |||||||
| public interface FileService extends BaseService<FileResp, FileResp, FileQuery, FileReq>, IService<FileDO> { | public interface FileService extends BaseService<FileResp, FileResp, FileQuery, FileReq>, IService<FileDO> { | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 上传到默认存储库 |      * 上传到默认存储 | ||||||
|      * |      * | ||||||
|      * @param file 文件信息 |      * @param file 文件信息 | ||||||
|      * @return 文件信息 |      * @return 文件信息 | ||||||
| @@ -46,18 +46,18 @@ public interface FileService extends BaseService<FileResp, FileResp, FileQuery, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 上传到指定存储库 |      * 上传到指定存储 | ||||||
|      * |      * | ||||||
|      * @param file        文件信息 |      * @param file        文件信息 | ||||||
|      * @param storageCode 存储库编码 |      * @param storageCode 存储编码 | ||||||
|      * @return 文件信息 |      * @return 文件信息 | ||||||
|      */ |      */ | ||||||
|     FileInfo upload(MultipartFile file, String storageCode); |     FileInfo upload(MultipartFile file, String storageCode); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 根据存储库 ID 列表查询 |      * 根据存储 ID 列表查询 | ||||||
|      * |      * | ||||||
|      * @param storageIds 存储库 ID 列表 |      * @param storageIds 存储 ID 列表 | ||||||
|      * @return 文件数量 |      * @return 文件数量 | ||||||
|      */ |      */ | ||||||
|     Long countByStorageIds(List<Long> storageIds); |     Long countByStorageIds(List<Long> storageIds); | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ import top.charles7c.continew.starter.data.mybatis.plus.service.IService; | |||||||
| import top.charles7c.continew.starter.extension.crud.service.BaseService; | import top.charles7c.continew.starter.extension.crud.service.BaseService; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 存储库业务接口 |  * 存储业务接口 | ||||||
|  * |  * | ||||||
|  * @author Charles7c |  * @author Charles7c | ||||||
|  * @since 2023/12/26 22:09 |  * @since 2023/12/26 22:09 | ||||||
| @@ -32,9 +32,9 @@ import top.charles7c.continew.starter.extension.crud.service.BaseService; | |||||||
| public interface StorageService extends BaseService<StorageResp, StorageResp, StorageQuery, StorageReq>, IService<StorageDO> { | public interface StorageService extends BaseService<StorageResp, StorageResp, StorageQuery, StorageReq>, IService<StorageDO> { | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 查询默认存储库 |      * 查询默认存储 | ||||||
|      * |      * | ||||||
|      * @return 存储库信息 |      * @return 存储信息 | ||||||
|      */ |      */ | ||||||
|     StorageDO getDefaultStorage(); |     StorageDO getDefaultStorage(); | ||||||
|  |  | ||||||
| @@ -42,23 +42,21 @@ public interface StorageService extends BaseService<StorageResp, StorageResp, St | |||||||
|      * 根据编码查询 |      * 根据编码查询 | ||||||
|      * |      * | ||||||
|      * @param code 编码 |      * @param code 编码 | ||||||
|      * @return 存储库信息 |      * @return 存储信息 | ||||||
|      */ |      */ | ||||||
|     StorageDO getByCode(String code); |     StorageDO getByCode(String code); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 加载存储库 |      * 加载存储 | ||||||
|      * |      * | ||||||
|      * @param req |      * @param req 存储信息 | ||||||
|      *            存储库信息 |  | ||||||
|      */ |      */ | ||||||
|     void load(StorageReq req); |     void load(StorageReq req); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 卸载存储库 |      * 卸载存储 | ||||||
|      * |      * | ||||||
|      * @param req |      * @param req 存储信息 | ||||||
|      *            存储库信息 |  | ||||||
|      */ |      */ | ||||||
|     void unload(StorageReq req); |     void unload(StorageReq req); | ||||||
| } | } | ||||||
| @@ -78,7 +78,7 @@ public class FileServiceImpl extends BaseServiceImpl<FileMapper, FileDO, FileRes | |||||||
|         StorageDO storage; |         StorageDO storage; | ||||||
|         if (StrUtil.isBlank(storageCode)) { |         if (StrUtil.isBlank(storageCode)) { | ||||||
|             storage = storageService.getDefaultStorage(); |             storage = storageService.getDefaultStorage(); | ||||||
|             CheckUtils.throwIfNull(storage, "请先指定默认存储库"); |             CheckUtils.throwIfNull(storage, "请先指定默认存储"); | ||||||
|         } else { |         } else { | ||||||
|             storage = storageService.getByCode(storageCode); |             storage = storageService.getByCode(storageCode); | ||||||
|             CheckUtils.throwIfNotExists(storage, "StorageDO", "Code", storageCode); |             CheckUtils.throwIfNotExists(storage, "StorageDO", "Code", storageCode); | ||||||
|   | |||||||
| @@ -48,7 +48,7 @@ import java.util.List; | |||||||
| import java.util.concurrent.CopyOnWriteArrayList; | import java.util.concurrent.CopyOnWriteArrayList; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 存储库业务实现 |  * 存储业务实现 | ||||||
|  * |  * | ||||||
|  * @author Charles7c |  * @author Charles7c | ||||||
|  * @since 2023/12/26 22:09 |  * @since 2023/12/26 22:09 | ||||||
| @@ -57,13 +57,13 @@ import java.util.concurrent.CopyOnWriteArrayList; | |||||||
| @RequiredArgsConstructor | @RequiredArgsConstructor | ||||||
| public class StorageServiceImpl extends BaseServiceImpl<StorageMapper, StorageDO, StorageResp, StorageResp, StorageQuery, StorageReq> implements StorageService { | public class StorageServiceImpl extends BaseServiceImpl<StorageMapper, StorageDO, StorageResp, StorageResp, StorageQuery, StorageReq> implements StorageService { | ||||||
|  |  | ||||||
|  |     private final FileStorageService fileStorageService; | ||||||
|     @Resource |     @Resource | ||||||
|     private FileService fileService; |     private FileService fileService; | ||||||
|     private final FileStorageService fileStorageService; |  | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     protected void beforeAdd(StorageReq req) { |     protected void beforeAdd(StorageReq req) { | ||||||
|         CheckUtils.throwIf(Boolean.TRUE.equals(req.getIsDefault()) && this.isDefaultExists(null), "请先取消原有默认存储库"); |         CheckUtils.throwIf(Boolean.TRUE.equals(req.getIsDefault()) && this.isDefaultExists(null), "请先取消原有默认存储"); | ||||||
|         String code = req.getCode(); |         String code = req.getCode(); | ||||||
|         CheckUtils.throwIf(this.isCodeExists(code, null), "新增失败,[{}] 已存在", code); |         CheckUtils.throwIf(this.isCodeExists(code, null), "新增失败,[{}] 已存在", code); | ||||||
|         this.load(req); |         this.load(req); | ||||||
| @@ -76,7 +76,7 @@ public class StorageServiceImpl extends BaseServiceImpl<StorageMapper, StorageDO | |||||||
|         DisEnableStatusEnum newStatus = req.getStatus(); |         DisEnableStatusEnum newStatus = req.getStatus(); | ||||||
|         StorageDO oldStorage = super.getById(id); |         StorageDO oldStorage = super.getById(id); | ||||||
|         CheckUtils.throwIf(Boolean.TRUE.equals(oldStorage.getIsDefault()) && DisEnableStatusEnum.DISABLE |         CheckUtils.throwIf(Boolean.TRUE.equals(oldStorage.getIsDefault()) && DisEnableStatusEnum.DISABLE | ||||||
|             .equals(newStatus), "[{}] 是默认存储库,不允许禁用", oldStorage.getName()); |             .equals(newStatus), "[{}] 是默认存储,不允许禁用", oldStorage.getName()); | ||||||
|         DisEnableStatusEnum oldStatus = oldStorage.getStatus(); |         DisEnableStatusEnum oldStatus = oldStorage.getStatus(); | ||||||
|         if (DisEnableStatusEnum.ENABLE.equals(oldStatus) || DisEnableStatusEnum.DISABLE.equals(newStatus)) { |         if (DisEnableStatusEnum.ENABLE.equals(oldStatus) || DisEnableStatusEnum.DISABLE.equals(newStatus)) { | ||||||
|             this.unload(BeanUtil.copyProperties(oldStorage, StorageReq.class)); |             this.unload(BeanUtil.copyProperties(oldStorage, StorageReq.class)); | ||||||
| @@ -85,17 +85,17 @@ public class StorageServiceImpl extends BaseServiceImpl<StorageMapper, StorageDO | |||||||
|             this.load(req); |             this.load(req); | ||||||
|         } |         } | ||||||
|         if (Boolean.TRUE.equals(req.getIsDefault())) { |         if (Boolean.TRUE.equals(req.getIsDefault())) { | ||||||
|             CheckUtils.throwIf(!DisEnableStatusEnum.ENABLE.equals(oldStatus), "请先启用该存储库"); |             CheckUtils.throwIf(!DisEnableStatusEnum.ENABLE.equals(oldStatus), "请先启用该存储"); | ||||||
|             CheckUtils.throwIf(this.isDefaultExists(id), "请先取消原有默认存储库"); |             CheckUtils.throwIf(this.isDefaultExists(id), "请先取消原有默认存储"); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     protected void beforeDelete(List<Long> ids) { |     protected void beforeDelete(List<Long> ids) { | ||||||
|         CheckUtils.throwIf(fileService.countByStorageIds(ids) > 0, "所选存储库存在文件关联,请删除文件后重试"); |         CheckUtils.throwIf(fileService.countByStorageIds(ids) > 0, "所选存储存在文件关联,请删除文件后重试"); | ||||||
|         List<StorageDO> storageList = baseMapper.lambdaQuery().in(StorageDO::getId, ids).list(); |         List<StorageDO> storageList = baseMapper.lambdaQuery().in(StorageDO::getId, ids).list(); | ||||||
|         storageList.forEach(s -> { |         storageList.forEach(s -> { | ||||||
|             CheckUtils.throwIfEqual(Boolean.TRUE, s.getIsDefault(), "[{}] 是默认存储库,不允许禁用", s.getName()); |             CheckUtils.throwIfEqual(Boolean.TRUE, s.getIsDefault(), "[{}] 是默认存储,不允许禁用", s.getName()); | ||||||
|             this.unload(BeanUtil.copyProperties(s, StorageReq.class)); |             this.unload(BeanUtil.copyProperties(s, StorageReq.class)); | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
| @@ -118,8 +118,8 @@ public class StorageServiceImpl extends BaseServiceImpl<StorageMapper, StorageDO | |||||||
|         StorageTypeEnum type = req.getType(); |         StorageTypeEnum type = req.getType(); | ||||||
|         if (StorageTypeEnum.LOCAL.equals(type)) { |         if (StorageTypeEnum.LOCAL.equals(type)) { | ||||||
|             ValidationUtils.throwIfBlank(bucketName, "存储路径不能为空"); |             ValidationUtils.throwIfBlank(bucketName, "存储路径不能为空"); | ||||||
|             ValidationUtils.throwIfBlank(domain, "自定义域名不能为空"); |             ValidationUtils.throwIfBlank(domain, "域名不能为空"); | ||||||
|             ValidationUtils.throwIf(!URLUtils.isHttpUrl(domain), "自定义域名格式错误"); |             ValidationUtils.throwIf(!URLUtils.isHttpUrl(domain), "域名格式错误"); | ||||||
|             req.setBucketName(StrUtil.appendIfMissing(bucketName |             req.setBucketName(StrUtil.appendIfMissing(bucketName | ||||||
|                 .replace(StringConstants.BACKSLASH, StringConstants.SLASH), StringConstants.SLASH)); |                 .replace(StringConstants.BACKSLASH, StringConstants.SLASH), StringConstants.SLASH)); | ||||||
|             FileStorageProperties.LocalPlusConfig config = new FileStorageProperties.LocalPlusConfig(); |             FileStorageProperties.LocalPlusConfig config = new FileStorageProperties.LocalPlusConfig(); | ||||||
| @@ -159,7 +159,7 @@ public class StorageServiceImpl extends BaseServiceImpl<StorageMapper, StorageDO | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 默认存储库是否存在 |      * 默认存储是否存在 | ||||||
|      * |      * | ||||||
|      * @param id ID |      * @param id ID | ||||||
|      * @return 是否存在 |      * @return 是否存在 | ||||||
|   | |||||||
| @@ -27,12 +27,13 @@ import top.charles7c.continew.starter.extension.crud.controller.BaseController; | |||||||
| import top.charles7c.continew.starter.extension.crud.enums.Api; | import top.charles7c.continew.starter.extension.crud.enums.Api; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 存储库管理 API |  * 存储管理 API | ||||||
|  * |  * | ||||||
|  * @author Charles7c |  * @author Charles7c | ||||||
|  * @since 2023/12/26 22:09 |  * @since 2023/12/26 22:09 | ||||||
|  */ |  */ | ||||||
| @Tag(name = "存储库管理 API") | @Tag(name = "存储管理 API") | ||||||
| @RestController | @RestController | ||||||
| @CrudRequestMapping(value = "/system/storage", api = {Api.PAGE, Api.GET, Api.ADD, Api.UPDATE, Api.DELETE}) | @CrudRequestMapping(value = "/system/storage", api = {Api.PAGE, Api.GET, Api.ADD, Api.UPDATE, Api.DELETE}) | ||||||
| public class StorageController extends BaseController<StorageService, StorageResp, StorageResp, StorageQuery, StorageReq> {} | public class StorageController extends BaseController<StorageService, StorageResp, StorageResp, StorageQuery, StorageReq> { | ||||||
|  | } | ||||||
| @@ -57,10 +57,9 @@ VALUES | |||||||
| (1106, '文件下载', 1100, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:file:download', 6, 1, 1, NOW(), NULL, NULL), | (1106, '文件下载', 1100, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:file:download', 6, 1, 1, NOW(), NULL, NULL), | ||||||
| (1110, '存储管理', 1000, 2, '/system/storage', 'Storage', 'system/storage/index', NULL, 'storage', b'0', b'0', b'0', NULL, 8, 1, 1, NOW(), NULL, NULL), | (1110, '存储管理', 1000, 2, '/system/storage', 'Storage', 'system/storage/index', NULL, 'storage', b'0', b'0', b'0', NULL, 8, 1, 1, NOW(), NULL, NULL), | ||||||
| (1111, '存储列表', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:list', 1, 1, 1, NOW(), NULL, NULL), | (1111, '存储列表', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:list', 1, 1, 1, NOW(), NULL, NULL), | ||||||
| (1112, '存储详情', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:detail', 2, 1, 1, NOW(), NULL, NULL), | (1112, '存储新增', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:add', 2, 1, 1, NOW(), NULL, NULL), | ||||||
| (1113, '存储新增', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:add', 3, 1, 1, NOW(), NULL, NULL), | (1113, '存储修改', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:update', 3, 1, 1, NOW(), NULL, NULL), | ||||||
| (1114, '存储修改', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:update', 4, 1, 1, NOW(), NULL, NULL), | (1114, '存储删除', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:delete', 4, 1, 1, NOW(), NULL, NULL), | ||||||
| (1115, '存储删除', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:delete', 5, 1, 1, NOW(), NULL, NULL), |  | ||||||
| (1190, '系统配置', 1000, 2, '/system/config', 'Config', 'system/config/index', NULL, 'desktop', b'0', b'0', b'0', NULL, 999, 1, 1, NOW(), NULL, NULL), | (1190, '系统配置', 1000, 2, '/system/config', 'Config', 'system/config/index', NULL, 'desktop', b'0', b'0', b'0', NULL, 999, 1, 1, NOW(), NULL, NULL), | ||||||
| (1191, '配置查询', 1190, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:config:query', 1, 1, 1, NOW(), NULL, NULL), | (1191, '配置查询', 1190, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:config:query', 1, 1, 1, NOW(), NULL, NULL), | ||||||
| (1192, '配置修改', 1190, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:config:update', 2, 1, 1, NOW(), NULL, NULL), | (1192, '配置修改', 1190, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:config:update', 2, 1, 1, NOW(), NULL, NULL), | ||||||
| @@ -150,7 +149,7 @@ VALUES | |||||||
| -- 初始化默认角色和部门关联数据 | -- 初始化默认角色和部门关联数据 | ||||||
| INSERT INTO `sys_role_dept` (`role_id`, `dept_id`) VALUES (547888897925840928, 547888483713155087); | INSERT INTO `sys_role_dept` (`role_id`, `dept_id`) VALUES (547888897925840928, 547888483713155087); | ||||||
|  |  | ||||||
| -- 初始化默认存储库 | -- 初始化默认存储 | ||||||
| INSERT INTO `sys_storage` | INSERT INTO `sys_storage` | ||||||
| (`id`, `name`, `code`, `type`, `access_key`, `secret_key`, `endpoint`, `bucket_name`, `domain`, `description`, `is_default`, `sort`, `status`, `create_user`, `create_time`, `update_user`, `update_time`) | (`id`, `name`, `code`, `type`, `access_key`, `secret_key`, `endpoint`, `bucket_name`, `domain`, `description`, `is_default`, `sort`, `status`, `create_user`, `create_time`, `update_user`, `update_time`) | ||||||
| VALUES | VALUES | ||||||
|   | |||||||
| @@ -241,7 +241,7 @@ CREATE TABLE IF NOT EXISTS `sys_storage` ( | |||||||
|     `secret_key`  varchar(255) DEFAULT NULL                COMMENT 'Secret Key(私有密钥)', |     `secret_key`  varchar(255) DEFAULT NULL                COMMENT 'Secret Key(私有密钥)', | ||||||
|     `endpoint`    varchar(255) DEFAULT NULL                COMMENT 'Endpoint(终端节点)', |     `endpoint`    varchar(255) DEFAULT NULL                COMMENT 'Endpoint(终端节点)', | ||||||
|     `bucket_name` varchar(255) DEFAULT NULL                COMMENT '桶名称', |     `bucket_name` varchar(255) DEFAULT NULL                COMMENT '桶名称', | ||||||
|     `domain`      varchar(255) NOT NULL DEFAULT ''         COMMENT '自定义域名', |     `domain`      varchar(255) NOT NULL DEFAULT ''         COMMENT '域名', | ||||||
|     `description` varchar(200) DEFAULT NULL                COMMENT '描述', |     `description` varchar(200) DEFAULT NULL                COMMENT '描述', | ||||||
|     `is_default`  bit(1)       NOT NULL DEFAULT b'0'       COMMENT '是否为默认存储', |     `is_default`  bit(1)       NOT NULL DEFAULT b'0'       COMMENT '是否为默认存储', | ||||||
|     `sort`        int          NOT NULL DEFAULT 999        COMMENT '排序', |     `sort`        int          NOT NULL DEFAULT 999        COMMENT '排序', | ||||||
| @@ -254,7 +254,7 @@ CREATE TABLE IF NOT EXISTS `sys_storage` ( | |||||||
|     UNIQUE INDEX `uk_code`(`code`) USING BTREE, |     UNIQUE INDEX `uk_code`(`code`) USING BTREE, | ||||||
|     INDEX `idx_create_user`(`create_user`) USING BTREE, |     INDEX `idx_create_user`(`create_user`) USING BTREE, | ||||||
|     INDEX `idx_update_user`(`update_user`) USING BTREE |     INDEX `idx_update_user`(`update_user`) USING BTREE | ||||||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='存储库表'; | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='存储表'; | ||||||
|  |  | ||||||
| CREATE TABLE IF NOT EXISTS `sys_file` ( | CREATE TABLE IF NOT EXISTS `sys_file` ( | ||||||
|     `id`            bigint(20)   NOT NULL                    COMMENT 'ID', |     `id`            bigint(20)   NOT NULL                    COMMENT 'ID', | ||||||
| @@ -263,7 +263,7 @@ CREATE TABLE IF NOT EXISTS `sys_file` ( | |||||||
|     `url`           varchar(512) NOT NULL                    COMMENT 'URL', |     `url`           varchar(512) NOT NULL                    COMMENT 'URL', | ||||||
|     `extension`     varchar(100) DEFAULT NULL                COMMENT '扩展名', |     `extension`     varchar(100) DEFAULT NULL                COMMENT '扩展名', | ||||||
|     `type`          tinyint(1)   UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型(1:其他;2:图片;3:文档;4:视频;5:音频)', |     `type`          tinyint(1)   UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型(1:其他;2:图片;3:文档;4:视频;5:音频)', | ||||||
|     `storage_id`    bigint(20)   NOT NULL                    COMMENT '存储库ID', |     `storage_id`    bigint(20)   NOT NULL                    COMMENT '存储ID', | ||||||
|     `create_user`   bigint(20)   NOT NULL                    COMMENT '创建人', |     `create_user`   bigint(20)   NOT NULL                    COMMENT '创建人', | ||||||
|     `create_time`   datetime     NOT NULL                    COMMENT '创建时间', |     `create_time`   datetime     NOT NULL                    COMMENT '创建时间', | ||||||
|     `update_user`   bigint(20)   NOT NULL                    COMMENT '修改人', |     `update_user`   bigint(20)   NOT NULL                    COMMENT '修改人', | ||||||
|   | |||||||
| @@ -57,10 +57,9 @@ VALUES | |||||||
| (1106, '文件下载', 1100, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:file:download', 6, 1, 1, NOW(), NULL, NULL), | (1106, '文件下载', 1100, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:file:download', 6, 1, 1, NOW(), NULL, NULL), | ||||||
| (1110, '存储管理', 1000, 2, '/system/storage', 'Storage', 'system/storage/index', NULL, 'storage', b'0', b'0', b'0', NULL, 8, 1, 1, NOW(), NULL, NULL), | (1110, '存储管理', 1000, 2, '/system/storage', 'Storage', 'system/storage/index', NULL, 'storage', b'0', b'0', b'0', NULL, 8, 1, 1, NOW(), NULL, NULL), | ||||||
| (1111, '存储列表', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:list', 1, 1, 1, NOW(), NULL, NULL), | (1111, '存储列表', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:list', 1, 1, 1, NOW(), NULL, NULL), | ||||||
| (1112, '存储详情', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:detail', 2, 1, 1, NOW(), NULL, NULL), | (1112, '存储新增', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:add', 2, 1, 1, NOW(), NULL, NULL), | ||||||
| (1113, '存储新增', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:add', 3, 1, 1, NOW(), NULL, NULL), | (1113, '存储修改', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:update', 3, 1, 1, NOW(), NULL, NULL), | ||||||
| (1114, '存储修改', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:update', 4, 1, 1, NOW(), NULL, NULL), | (1114, '存储删除', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:delete', 4, 1, 1, NOW(), NULL, NULL), | ||||||
| (1115, '存储删除', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:delete', 5, 1, 1, NOW(), NULL, NULL), |  | ||||||
| (1190, '系统配置', 1000, 2, '/system/config', 'Config', 'system/config/index', NULL, 'desktop', b'0', b'0', b'0', NULL, 999, 1, 1, NOW(), NULL, NULL), | (1190, '系统配置', 1000, 2, '/system/config', 'Config', 'system/config/index', NULL, 'desktop', b'0', b'0', b'0', NULL, 999, 1, 1, NOW(), NULL, NULL), | ||||||
| (1191, '配置查询', 1190, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:config:query', 1, 1, 1, NOW(), NULL, NULL), | (1191, '配置查询', 1190, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:config:query', 1, 1, 1, NOW(), NULL, NULL), | ||||||
| (1192, '配置修改', 1190, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:config:update', 2, 1, 1, NOW(), NULL, NULL), | (1192, '配置修改', 1190, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:config:update', 2, 1, 1, NOW(), NULL, NULL), | ||||||
| @@ -150,7 +149,7 @@ VALUES | |||||||
| -- 初始化默认角色和部门关联数据 | -- 初始化默认角色和部门关联数据 | ||||||
| INSERT INTO "sys_role_dept" ("role_id", "dept_id") VALUES (547888897925840928, 547888483713155087); | INSERT INTO "sys_role_dept" ("role_id", "dept_id") VALUES (547888897925840928, 547888483713155087); | ||||||
|  |  | ||||||
| -- 初始化默认存储库 | -- 初始化默认存储 | ||||||
| INSERT INTO "sys_storage" | INSERT INTO "sys_storage" | ||||||
| ("id", "name", "code", "type", "access_key", "secret_key", "endpoint", "bucket_name", "domain", "description", "is_default", "sort", "status", "create_user", "create_time", "update_user", "update_time") | ("id", "name", "code", "type", "access_key", "secret_key", "endpoint", "bucket_name", "domain", "description", "is_default", "sort", "status", "create_user", "create_time", "update_user", "update_time") | ||||||
| VALUES | VALUES | ||||||
|   | |||||||
| @@ -420,7 +420,7 @@ COMMENT ON COLUMN "sys_storage"."access_key"  IS 'Access Key(访问密钥)'; | |||||||
| COMMENT ON COLUMN "sys_storage"."secret_key"  IS 'Secret Key(私有密钥)'; | COMMENT ON COLUMN "sys_storage"."secret_key"  IS 'Secret Key(私有密钥)'; | ||||||
| COMMENT ON COLUMN "sys_storage"."endpoint"    IS 'Endpoint(终端节点)'; | COMMENT ON COLUMN "sys_storage"."endpoint"    IS 'Endpoint(终端节点)'; | ||||||
| COMMENT ON COLUMN "sys_storage"."bucket_name" IS '桶名称'; | COMMENT ON COLUMN "sys_storage"."bucket_name" IS '桶名称'; | ||||||
| COMMENT ON COLUMN "sys_storage"."domain"      IS '自定义域名'; | COMMENT ON COLUMN "sys_storage"."domain"      IS '域名'; | ||||||
| COMMENT ON COLUMN "sys_storage"."description" IS '描述'; | COMMENT ON COLUMN "sys_storage"."description" IS '描述'; | ||||||
| COMMENT ON COLUMN "sys_storage"."is_default"  IS '是否为默认存储'; | COMMENT ON COLUMN "sys_storage"."is_default"  IS '是否为默认存储'; | ||||||
| COMMENT ON COLUMN "sys_storage"."sort"        IS '排序'; | COMMENT ON COLUMN "sys_storage"."sort"        IS '排序'; | ||||||
| @@ -429,7 +429,7 @@ COMMENT ON COLUMN "sys_storage"."create_user" IS '创建人'; | |||||||
| COMMENT ON COLUMN "sys_storage"."create_time" IS '创建时间'; | COMMENT ON COLUMN "sys_storage"."create_time" IS '创建时间'; | ||||||
| COMMENT ON COLUMN "sys_storage"."update_user" IS '修改人'; | COMMENT ON COLUMN "sys_storage"."update_user" IS '修改人'; | ||||||
| COMMENT ON COLUMN "sys_storage"."update_time" IS '修改时间'; | COMMENT ON COLUMN "sys_storage"."update_time" IS '修改时间'; | ||||||
| COMMENT ON TABLE  "sys_storage"               IS '存储库表'; | COMMENT ON TABLE  "sys_storage"               IS '存储表'; | ||||||
|  |  | ||||||
| CREATE TABLE IF NOT EXISTS "sys_file" ( | CREATE TABLE IF NOT EXISTS "sys_file" ( | ||||||
|     "id"            int8         NOT NULL, |     "id"            int8         NOT NULL, | ||||||
| @@ -455,7 +455,7 @@ COMMENT ON COLUMN "sys_file"."size"        IS '大小(字节)'; | |||||||
| COMMENT ON COLUMN "sys_file"."url"         IS 'URL'; | COMMENT ON COLUMN "sys_file"."url"         IS 'URL'; | ||||||
| COMMENT ON COLUMN "sys_file"."extension"   IS '扩展名'; | COMMENT ON COLUMN "sys_file"."extension"   IS '扩展名'; | ||||||
| COMMENT ON COLUMN "sys_file"."type"        IS '类型(1:其他;2:图片;3:文档;4:视频;5:音频)'; | COMMENT ON COLUMN "sys_file"."type"        IS '类型(1:其他;2:图片;3:文档;4:视频;5:音频)'; | ||||||
| COMMENT ON COLUMN "sys_file"."storage_id"  IS '存储库ID'; | COMMENT ON COLUMN "sys_file"."storage_id"  IS '存储ID'; | ||||||
| COMMENT ON COLUMN "sys_file"."create_user" IS '创建人'; | COMMENT ON COLUMN "sys_file"."create_user" IS '创建人'; | ||||||
| COMMENT ON COLUMN "sys_file"."create_time" IS '创建时间'; | COMMENT ON COLUMN "sys_file"."create_time" IS '创建时间'; | ||||||
| COMMENT ON COLUMN "sys_file"."update_user" IS '修改人'; | COMMENT ON COLUMN "sys_file"."update_user" IS '修改人'; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user