|
|
@@ -0,0 +1,145 @@
|
|
|
+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.api.constant.ObjectScope;
|
|
|
+import cn.reghao.oss.api.constant.ObjectType;
|
|
|
+import cn.reghao.oss.api.dto.ObjectChannel;
|
|
|
+import cn.reghao.oss.api.iface.ObjectChannelService;
|
|
|
+import cn.reghao.oss.api.iface.StoreServiceWrapper;
|
|
|
+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.UploadChannelRepository;
|
|
|
+import cn.reghao.oss.api.dto.ChannelScopeDto;
|
|
|
+import cn.reghao.oss.api.dto.UploadChannelDto;
|
|
|
+import cn.reghao.oss.console.app.db.repository.UserNodeRepository;
|
|
|
+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.api.dto.UploadChannelVo;
|
|
|
+import cn.reghao.oss.api.dto.UserNodeVO;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author reghao
|
|
|
+ * @date 2024-02-23 15:14:53
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class ObjectChannelServiceImpl implements ObjectChannelService {
|
|
|
+ private final ByteConverter byteConverter = new ByteConverter();
|
|
|
+ private final UploadChannelRepository uploadChannelRepository;
|
|
|
+ private final UserNodeRepository userNodeRepository;
|
|
|
+ private final StoreNodeRepository storeNodeRepository;
|
|
|
+ private final StoreServiceWrapper storeServiceWrapper;
|
|
|
+
|
|
|
+ public ObjectChannelServiceImpl(UploadChannelRepository uploadChannelRepository, UserNodeRepository userNodeRepository,
|
|
|
+ StoreNodeRepository storeNodeRepository, StoreServiceWrapper storeServiceWrapper) {
|
|
|
+ this.uploadChannelRepository = uploadChannelRepository;
|
|
|
+ this.userNodeRepository = userNodeRepository;
|
|
|
+ this.storeNodeRepository = storeNodeRepository;
|
|
|
+ this.storeServiceWrapper = storeServiceWrapper;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public synchronized Result addObjectChannel(UploadChannelDto uploadChannelDto) {
|
|
|
+ int createBy = UserContext.getUserId();
|
|
|
+ int nodeId = uploadChannelDto.getNodeId();
|
|
|
+ UserNode userNode = userNodeRepository.findByCreateByAndNodeId(createBy, nodeId);
|
|
|
+ if (userNode == null) {
|
|
|
+ return Result.fail(String.format("store_node with id %s not exist", nodeId));
|
|
|
+ }
|
|
|
+
|
|
|
+ String channelPrefix = uploadChannelDto.getChannelPrefix();
|
|
|
+ UploadChannel uploadChannel = uploadChannelRepository.findByCreateByAndPrefix(createBy, channelPrefix);
|
|
|
+ if (uploadChannel != null) {
|
|
|
+ return Result.fail(String.format("channel_prefix %s exist", channelPrefix));
|
|
|
+ }
|
|
|
+
|
|
|
+ int channelId = getNextChannelId(createBy, nodeId);
|
|
|
+ uploadChannel = new UploadChannel(channelId, uploadChannelDto, createBy);
|
|
|
+ uploadChannelRepository.save(uploadChannel);
|
|
|
+ storeServiceWrapper.createChannel(channelId, channelPrefix);
|
|
|
+ return Result.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ private int getNextChannelId(int createBy, int nodeId) {
|
|
|
+ int channelId = 101;
|
|
|
+ int total = uploadChannelRepository.countByCreateBy(createBy);
|
|
|
+ return channelId + total;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void updateScope(ChannelScopeDto channelScopeDto) {
|
|
|
+ int id = channelScopeDto.getId();
|
|
|
+ int newScope = channelScopeDto.getNewScope();
|
|
|
+ UploadChannel uploadChannel = uploadChannelRepository.findById(id);
|
|
|
+ if (uploadChannel != null) {
|
|
|
+ int currentScope = uploadChannel.getScope();
|
|
|
+ if (currentScope != newScope) {
|
|
|
+ uploadChannel.setScope(newScope);
|
|
|
+ uploadChannelRepository.save(uploadChannel);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<UploadChannelVo> getObjectChannels(int createBy) {
|
|
|
+ List<UploadChannel> page = uploadChannelRepository.findByCreateBy(createBy);
|
|
|
+ List<UploadChannelVo> list = page.stream().map(uploadChannel -> {
|
|
|
+ long maxSize = uploadChannel.getMaxSize();
|
|
|
+ String maxSizeStr = byteConverter.convert(ByteType.Bytes, maxSize);
|
|
|
+ int nodeId = uploadChannel.getNodeId();
|
|
|
+ UserNode userNode = userNodeRepository.findByCreateByAndNodeId(createBy, nodeId);
|
|
|
+ String bindDomain = userNode.getDomain();
|
|
|
+ int id = uploadChannel.getId();
|
|
|
+ int channelId = uploadChannel.getChannelId();
|
|
|
+ String prefix = uploadChannel.getPrefix();
|
|
|
+ String fileTypeStr = ObjectType.getDescByCode(uploadChannel.getFileType());
|
|
|
+ boolean seturl = uploadChannel.getSeturl();
|
|
|
+ String scopeStr = ObjectScope.getByCode(uploadChannel.getScope()).name();
|
|
|
+ return new UploadChannelVo(id, channelId, prefix, maxSizeStr, fileTypeStr, seturl, scopeStr, bindDomain);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ObjectChannel getObjectChannel(int id) {
|
|
|
+ UploadChannel uploadChannel = uploadChannelRepository.findById(id);
|
|
|
+ return uploadChannel != null ? getObjectChannel(uploadChannel) : null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private ObjectChannel getObjectChannel(UploadChannel uploadChannel) {
|
|
|
+ int id = uploadChannel.getId();
|
|
|
+ int channelId = uploadChannel.getChannelId();
|
|
|
+ String channelPrefix = uploadChannel.getPrefix();
|
|
|
+ long maxSize = uploadChannel.getMaxSize();
|
|
|
+ int fileType = uploadChannel.getFileType();
|
|
|
+ boolean seturl = uploadChannel.getSeturl();
|
|
|
+ int scope = uploadChannel.getScope();
|
|
|
+ int createBy = uploadChannel.getCreateBy();
|
|
|
+
|
|
|
+ UserNode userNode = userNodeRepository.findByCreateByAndNodeId(createBy, uploadChannel.getNodeId());
|
|
|
+ String domain = userNode.getDomain();
|
|
|
+ return new ObjectChannel(id, channelId, channelPrefix, maxSize, fileType, seturl, scope, domain, createBy);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<UserNodeVO> getUserStoreNodes(int loginUser) {
|
|
|
+ List<UserNode> list = userNodeRepository.findByCreateBy(loginUser);
|
|
|
+ List<UserNodeVO> storeNodes = list.stream()
|
|
|
+ .map(userNode -> {
|
|
|
+ int nodeId = userNode.getNodeId();
|
|
|
+ StoreNode storeNode = storeNodeRepository.findById(nodeId);
|
|
|
+ String nodeAddr = storeNode.getNodeAddr();
|
|
|
+ String domain = userNode.getDomain();
|
|
|
+ return new UserNodeVO(nodeId, nodeId, nodeAddr, domain);
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ return storeNodes;
|
|
|
+ }
|
|
|
+}
|