完成 FileConfig 的后端模块
parent
05d4aae65d
commit
18a5c46284
@ -0,0 +1,45 @@
|
|||||||
|
### 请求 /infra/file-config/create 接口 => 成功
|
||||||
|
POST {{baseUrl}}/infra/file-config/create
|
||||||
|
Content-Type: application/json
|
||||||
|
tenant-id: {{adminTenentId}}
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "S3 - 七牛云",
|
||||||
|
"remark": "",
|
||||||
|
"storage": 20,
|
||||||
|
"config": {
|
||||||
|
"accessKey": "b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8",
|
||||||
|
"accessSecret": "kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP",
|
||||||
|
"bucket": "ruoyi-vue-pro",
|
||||||
|
"endpoint": "s3-cn-south-1.qiniucs.com",
|
||||||
|
"domain": "http://test.yudao.iocoder.cn",
|
||||||
|
"region": "oss-cn-beijing"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
### 请求 /infra/file-config/update 接口 => 成功
|
||||||
|
PUT {{baseUrl}}/infra/file-config/update
|
||||||
|
Content-Type: application/json
|
||||||
|
tenant-id: {{adminTenentId}}
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"name": "S3 - 七牛云",
|
||||||
|
"remark": "",
|
||||||
|
"config": {
|
||||||
|
"accessKey": "b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8",
|
||||||
|
"accessSecret": "kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP",
|
||||||
|
"bucket": "ruoyi-vue-pro",
|
||||||
|
"endpoint": "s3-cn-south-1.qiniucs.com",
|
||||||
|
"domain": "http://test.yudao.iocoder.cn",
|
||||||
|
"region": "oss-cn-beijing"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
### 请求 /infra/file-config/test 接口 => 成功
|
||||||
|
GET {{baseUrl}}/infra/file-config/test?id=2
|
||||||
|
Content-Type: application/json
|
||||||
|
tenant-id: {{adminTenentId}}
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
@ -0,0 +1,89 @@
|
|||||||
|
package cn.iocoder.yudao.module.infra.controller.admin.file;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigCreateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigRespVO;
|
||||||
|
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigUpdateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.infra.convert.file.FileConfigConvert;
|
||||||
|
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO;
|
||||||
|
import cn.iocoder.yudao.module.infra.service.file.FileConfigService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.validation.Valid;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
|
@Api(tags = "管理后台 - 文件配置")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/infra/file-config")
|
||||||
|
@Validated
|
||||||
|
public class FileConfigController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private FileConfigService fileConfigService;
|
||||||
|
|
||||||
|
@PostMapping("/create")
|
||||||
|
@ApiOperation("创建文件配置")
|
||||||
|
@PreAuthorize("@ss.hasPermission('infra:file-config:create')")
|
||||||
|
public CommonResult<Long> createFileConfig(@Valid @RequestBody FileConfigCreateReqVO createReqVO) {
|
||||||
|
return success(fileConfigService.createFileConfig(createReqVO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update")
|
||||||
|
@ApiOperation("更新文件配置")
|
||||||
|
@PreAuthorize("@ss.hasPermission('infra:file-config:update')")
|
||||||
|
public CommonResult<Boolean> updateFileConfig(@Valid @RequestBody FileConfigUpdateReqVO updateReqVO) {
|
||||||
|
fileConfigService.updateFileConfig(updateReqVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update-master")
|
||||||
|
@ApiOperation("更新文件配置为 Master")
|
||||||
|
@PreAuthorize("@ss.hasPermission('infra:file-config:update')")
|
||||||
|
public CommonResult<Boolean> updateFileConfigMaster(@RequestParam("id") Long id) {
|
||||||
|
fileConfigService.updateFileConfigMaster(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete")
|
||||||
|
@ApiOperation("删除文件配置")
|
||||||
|
@ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class)
|
||||||
|
@PreAuthorize("@ss.hasPermission('infra:file-config:delete')")
|
||||||
|
public CommonResult<Boolean> deleteFileConfig(@RequestParam("id") Long id) {
|
||||||
|
fileConfigService.deleteFileConfig(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get")
|
||||||
|
@ApiOperation("获得文件配置")
|
||||||
|
@ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
|
||||||
|
@PreAuthorize("@ss.hasPermission('infra:file-config:query')")
|
||||||
|
public CommonResult<FileConfigRespVO> getFileConfig(@RequestParam("id") Long id) {
|
||||||
|
FileConfigDO fileConfig = fileConfigService.getFileConfig(id);
|
||||||
|
return success(FileConfigConvert.INSTANCE.convert(fileConfig));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/page")
|
||||||
|
@ApiOperation("获得文件配置分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('infra:file-config:query')")
|
||||||
|
public CommonResult<PageResult<FileConfigRespVO>> getFileConfigPage(@Valid FileConfigPageReqVO pageVO) {
|
||||||
|
PageResult<FileConfigDO> pageResult = fileConfigService.getFileConfigPage(pageVO);
|
||||||
|
return success(FileConfigConvert.INSTANCE.convertPage(pageResult));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/test")
|
||||||
|
@ApiOperation("测试文件配置是否正确")
|
||||||
|
@PreAuthorize("@ss.hasPermission('infra:file-config:query')")
|
||||||
|
public CommonResult<String> testFileConfig(@RequestParam("id") Long id) {
|
||||||
|
String url = fileConfigService.testFileConfig(id);
|
||||||
|
return success(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
package cn.iocoder.yudao.module.infra.controller.admin.file.vo.config;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ApiModel("管理后台 - 文件配置创建 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class FileConfigCreateReqVO extends FileConfigBaseVO {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "存储器", required = true, example = "1", notes = "参见 FileStorageEnum 枚举类")
|
||||||
|
@NotNull(message = "存储器不能为空")
|
||||||
|
private Integer storage;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "存储配置", required = true, notes = "配置是动态参数,所以使用 Map 接收")
|
||||||
|
@NotNull(message = "存储配置不能为空")
|
||||||
|
private Map<String, Object> config;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
package cn.iocoder.yudao.module.infra.controller.admin.file.vo.config;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
|
@ApiModel("管理后台 - 文件配置分页 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class FileConfigPageReqVO extends PageParam {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "配置名", example = "S3 - 阿里云")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "存储器", example = "1")
|
||||||
|
private Integer storage;
|
||||||
|
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
@ApiModelProperty(value = "开始创建时间")
|
||||||
|
private Date beginCreateTime;
|
||||||
|
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
@ApiModelProperty(value = "结束创建时间")
|
||||||
|
private Date endCreateTime;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
package cn.iocoder.yudao.module.infra.controller.admin.file.vo.config;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.file.core.client.FileClientConfig;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@ApiModel("管理后台 - 文件配置 Response VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class FileConfigRespVO extends FileConfigBaseVO {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "编号", required = true, example = "1")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "存储配置", required = true)
|
||||||
|
private FileClientConfig config;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "是否为主配置", required = true, example = "true")
|
||||||
|
@NotNull(message = "是否为主配置不能为空")
|
||||||
|
private Boolean master;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "创建时间", required = true)
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
package cn.iocoder.yudao.module.infra.controller.admin.file.vo.config;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ApiModel("管理后台 - 文件配置更新 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class FileConfigUpdateReqVO extends FileConfigBaseVO {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "编号", required = true, example = "1")
|
||||||
|
@NotNull(message = "编号不能为空")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "存储配置", required = true, notes = "配置是动态参数,所以使用 Map 接收")
|
||||||
|
@NotNull(message = "存储配置不能为空")
|
||||||
|
private Map<String, Object> config;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
package cn.iocoder.yudao.module.infra.convert.file;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigCreateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigRespVO;
|
||||||
|
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigUpdateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件配置 Convert
|
||||||
|
*
|
||||||
|
* @author 芋道源码
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface FileConfigConvert {
|
||||||
|
|
||||||
|
FileConfigConvert INSTANCE = Mappers.getMapper(FileConfigConvert.class);
|
||||||
|
|
||||||
|
@Mapping(target = "config", ignore = true)
|
||||||
|
FileConfigDO convert(FileConfigCreateReqVO bean);
|
||||||
|
|
||||||
|
@Mapping(target = "config", ignore = true)
|
||||||
|
FileConfigDO convert(FileConfigUpdateReqVO bean);
|
||||||
|
|
||||||
|
FileConfigRespVO convert(FileConfigDO bean);
|
||||||
|
|
||||||
|
List<FileConfigRespVO> convertList(List<FileConfigDO> list);
|
||||||
|
|
||||||
|
PageResult<FileConfigRespVO> convertPage(PageResult<FileConfigDO> page);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
package cn.iocoder.yudao.module.infra.dal.mysql.file;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件配置 Mapper
|
||||||
|
*
|
||||||
|
* @author 芋道源码
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface FileConfigMapper extends BaseMapperX<FileConfigDO> {
|
||||||
|
|
||||||
|
default PageResult<FileConfigDO> selectPage(FileConfigPageReqVO reqVO) {
|
||||||
|
return selectPage(reqVO, new LambdaQueryWrapperX<FileConfigDO>()
|
||||||
|
.likeIfPresent(FileConfigDO::getName, reqVO.getName())
|
||||||
|
.eqIfPresent(FileConfigDO::getStorage, reqVO.getStorage())
|
||||||
|
.betweenIfPresent(FileConfigDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
|
||||||
|
.orderByDesc(FileConfigDO::getId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Select("SELECT id FROM infra_file_config WHERE update_time > #{maxUpdateTime} LIMIT 1")
|
||||||
|
Long selectExistsByUpdateTimeAfter(Date maxUpdateTime);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
package cn.iocoder.yudao.module.infra.mq.consumer.file;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener;
|
||||||
|
import cn.iocoder.yudao.module.infra.mq.message.file.FileConfigRefreshMessage;
|
||||||
|
import cn.iocoder.yudao.module.infra.service.file.FileConfigService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 针对 {@link FileConfigRefreshMessage} 的消费者
|
||||||
|
*
|
||||||
|
* @author 芋道源码
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class FileConfigRefreshConsumer extends AbstractChannelMessageListener<FileConfigRefreshMessage> {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private FileConfigService fileConfigService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessage(FileConfigRefreshMessage message) {
|
||||||
|
log.info("[onMessage][收到 FileConfig 刷新消息]");
|
||||||
|
fileConfigService.initFileClients();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.infra.mq.consumer;
|
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
package cn.iocoder.yudao.module.infra.mq.message.file;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件配置数据刷新 Message
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class FileConfigRefreshMessage extends AbstractChannelMessage {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getChannel() {
|
||||||
|
return "infra.file-config.refresh";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.infra.mq.message;
|
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
package cn.iocoder.yudao.module.infra.mq.producer.file;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
|
||||||
|
import cn.iocoder.yudao.module.infra.mq.message.file.FileConfigRefreshMessage;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件配置相关消息的 Producer
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class FileConfigProducer {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RedisMQTemplate redisMQTemplate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送 {@link FileConfigRefreshMessage} 消息
|
||||||
|
*/
|
||||||
|
public void sendFileConfigRefreshMessage() {
|
||||||
|
FileConfigRefreshMessage message = new FileConfigRefreshMessage();
|
||||||
|
redisMQTemplate.send(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.infra.mq.producer;
|
|
||||||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
@ -0,0 +1,132 @@
|
|||||||
|
package cn.iocoder.yudao.module.infra.service.file;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigCreateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigUpdateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO;
|
||||||
|
import cn.iocoder.yudao.module.infra.dal.mysql.file.FileConfigMapper;
|
||||||
|
import cn.iocoder.yudao.module.infra.test.BaseDbUnitTest;
|
||||||
|
import org.junit.jupiter.api.Disabled;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
|
||||||
|
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
|
||||||
|
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
|
||||||
|
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
|
||||||
|
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
|
||||||
|
import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_CONFIG_NOT_EXISTS;
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link FileConfigServiceImpl} 的单元测试类
|
||||||
|
*
|
||||||
|
* @author 芋道源码
|
||||||
|
*/
|
||||||
|
@Import(FileConfigServiceImpl.class)
|
||||||
|
public class FileConfigServiceImplTest extends BaseDbUnitTest {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private FileConfigServiceImpl fileConfigService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private FileConfigMapper fileConfigMapper;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreateFileConfig_success() {
|
||||||
|
// 准备参数
|
||||||
|
FileConfigCreateReqVO reqVO = randomPojo(FileConfigCreateReqVO.class);
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
Long fileConfigId = fileConfigService.createFileConfig(reqVO);
|
||||||
|
// 断言
|
||||||
|
assertNotNull(fileConfigId);
|
||||||
|
// 校验记录的属性是否正确
|
||||||
|
FileConfigDO fileConfig = fileConfigMapper.selectById(fileConfigId);
|
||||||
|
assertPojoEquals(reqVO, fileConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpdateFileConfig_success() {
|
||||||
|
// mock 数据
|
||||||
|
FileConfigDO dbFileConfig = randomPojo(FileConfigDO.class);
|
||||||
|
fileConfigMapper.insert(dbFileConfig);// @Sql: 先插入出一条存在的数据
|
||||||
|
// 准备参数
|
||||||
|
FileConfigUpdateReqVO reqVO = randomPojo(FileConfigUpdateReqVO.class, o -> {
|
||||||
|
o.setId(dbFileConfig.getId()); // 设置更新的 ID
|
||||||
|
});
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
fileConfigService.updateFileConfig(reqVO);
|
||||||
|
// 校验是否更新正确
|
||||||
|
FileConfigDO fileConfig = fileConfigMapper.selectById(reqVO.getId()); // 获取最新的
|
||||||
|
assertPojoEquals(reqVO, fileConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpdateFileConfig_notExists() {
|
||||||
|
// 准备参数
|
||||||
|
FileConfigUpdateReqVO reqVO = randomPojo(FileConfigUpdateReqVO.class);
|
||||||
|
|
||||||
|
// 调用, 并断言异常
|
||||||
|
assertServiceException(() -> fileConfigService.updateFileConfig(reqVO), FILE_CONFIG_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDeleteFileConfig_success() {
|
||||||
|
// mock 数据
|
||||||
|
FileConfigDO dbFileConfig = randomPojo(FileConfigDO.class);
|
||||||
|
fileConfigMapper.insert(dbFileConfig);// @Sql: 先插入出一条存在的数据
|
||||||
|
// 准备参数
|
||||||
|
Long id = dbFileConfig.getId();
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
fileConfigService.deleteFileConfig(id);
|
||||||
|
// 校验数据不存在了
|
||||||
|
assertNull(fileConfigMapper.selectById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDeleteFileConfig_notExists() {
|
||||||
|
// 准备参数
|
||||||
|
Long id = randomLongId();
|
||||||
|
|
||||||
|
// 调用, 并断言异常
|
||||||
|
assertServiceException(() -> fileConfigService.deleteFileConfig(id), FILE_CONFIG_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
|
||||||
|
public void testGetFileConfigPage() {
|
||||||
|
// mock 数据
|
||||||
|
FileConfigDO dbFileConfig = randomPojo(FileConfigDO.class, o -> { // 等会查询到
|
||||||
|
o.setName(null);
|
||||||
|
o.setStorage(null);
|
||||||
|
o.setCreateTime(null);
|
||||||
|
});
|
||||||
|
fileConfigMapper.insert(dbFileConfig);
|
||||||
|
// 测试 name 不匹配
|
||||||
|
fileConfigMapper.insert(cloneIgnoreId(dbFileConfig, o -> o.setName(null)));
|
||||||
|
// 测试 storage 不匹配
|
||||||
|
fileConfigMapper.insert(cloneIgnoreId(dbFileConfig, o -> o.setStorage(null)));
|
||||||
|
// 测试 createTime 不匹配
|
||||||
|
fileConfigMapper.insert(cloneIgnoreId(dbFileConfig, o -> o.setCreateTime(null)));
|
||||||
|
// 准备参数
|
||||||
|
FileConfigPageReqVO reqVO = new FileConfigPageReqVO();
|
||||||
|
reqVO.setName(null);
|
||||||
|
reqVO.setStorage(null);
|
||||||
|
reqVO.setBeginCreateTime(null);
|
||||||
|
reqVO.setEndCreateTime(null);
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
PageResult<FileConfigDO> pageResult = fileConfigService.getFileConfigPage(reqVO);
|
||||||
|
// 断言
|
||||||
|
assertEquals(1, pageResult.getTotal());
|
||||||
|
assertEquals(1, pageResult.getList().size());
|
||||||
|
assertPojoEquals(dbFileConfig, pageResult.getList().get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue