|
|
@@ -0,0 +1,245 @@
|
|
|
+package cn.reghao.bnt.web.console.rpc;
|
|
|
+
|
|
|
+import cn.reghao.oss.api.dto.ObjectChannel;
|
|
|
+import cn.reghao.oss.api.dto.ObjectInfo;
|
|
|
+import cn.reghao.oss.api.dto.StoreInfo;
|
|
|
+import cn.reghao.oss.api.dto.media.AudioInfo;
|
|
|
+import cn.reghao.oss.api.dto.media.ConvertedImageInfo;
|
|
|
+import cn.reghao.oss.api.dto.media.ImageInfo;
|
|
|
+import cn.reghao.oss.api.dto.media.VideoInfo;
|
|
|
+import cn.reghao.oss.api.iface.StoreService;
|
|
|
+import cn.reghao.oss.api.iface.StoreServiceWrapper;
|
|
|
+import cn.reghao.oss.api.util.AuthContext;
|
|
|
+import cn.reghao.bnt.web.console.model.po.StoreNode;
|
|
|
+import cn.reghao.bnt.web.console.model.po.UploadChannel;
|
|
|
+import cn.reghao.bnt.web.console.service.UploadChannelService;
|
|
|
+import cn.reghao.bnt.web.console.service.UserNodeService;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author reghao
|
|
|
+ * @date 2024-07-03 14:40:25
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class StoreServiceWrapperImpl implements StoreServiceWrapper {
|
|
|
+ private final UploadChannelService uploadChannelService;
|
|
|
+ private final UserNodeService userNodeService;
|
|
|
+ private final RpcService rpcService;
|
|
|
+
|
|
|
+ public StoreServiceWrapperImpl(UploadChannelService uploadChannelService, RpcService rpcService,
|
|
|
+ UserNodeService userNodeService) {
|
|
|
+ this.uploadChannelService = uploadChannelService;
|
|
|
+ this.rpcService = rpcService;
|
|
|
+ this.userNodeService = userNodeService;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Integer getChannelScope(int channelId) {
|
|
|
+ int loginUser = AuthContext.getUserId();
|
|
|
+ ObjectChannel objectChannel = uploadChannelService.getObjectChannelByChannelId(channelId, loginUser);
|
|
|
+ if (objectChannel != null) {
|
|
|
+ return objectChannel.getChannelId();
|
|
|
+ }
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ private StoreService getStoreService(int channelId) throws Exception {
|
|
|
+ int loginUser = AuthContext.getUserId();
|
|
|
+ StoreNode storeNode = uploadChannelService.getStoreNodeByChannelId(loginUser, channelId);
|
|
|
+ if (storeNode == null) {
|
|
|
+ String errMsg = String.format("channel_id %s not associate with any store_node", channelId);
|
|
|
+ throw new Exception(errMsg);
|
|
|
+ }
|
|
|
+
|
|
|
+ return rpcService.getStoreService(storeNode);
|
|
|
+ }
|
|
|
+
|
|
|
+ /*public StoreService getStoreService(StoreNode storeNode) {
|
|
|
+ RemoteService<StoreService> remoteService = new RemoteService<>();
|
|
|
+ String host = storeNode.getNodeAddr();
|
|
|
+ int port = storeNode.getRpcPort();
|
|
|
+ return remoteService.getService(host, port, StoreService.class);
|
|
|
+ }*/
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void createChannel(int channelId, String channelPrefix) {
|
|
|
+ try {
|
|
|
+ StoreService storeService = getStoreService(channelId);
|
|
|
+ storeService.createChannel(channelPrefix);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public StoreInfo getStoreInfo(int channelId) {
|
|
|
+ try {
|
|
|
+ StoreService storeService = getStoreService(channelId);
|
|
|
+ return storeService.getStoreInfo();
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void setObjectScope(int channelId, String objectId, int scope) {
|
|
|
+ try {
|
|
|
+ StoreService storeService = getStoreService(channelId);
|
|
|
+ storeService.setObjectScope(objectId, scope);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void deleteByObjectId(int channelId, String objectId) {
|
|
|
+ try {
|
|
|
+ StoreService storeService = getStoreService(channelId);
|
|
|
+ storeService.deleteByObjectId(objectId);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void deleteByObjectUrl(String objectUrl) {
|
|
|
+ int loginUser = AuthContext.getUserId();
|
|
|
+ String domain = objectUrl.replace("//", "").split("/")[0];
|
|
|
+ String objectName = objectUrl.replace("//" + domain + "/", "");
|
|
|
+ List<UploadChannel> uploadChannels = uploadChannelService.getByDomainAndCreateBy(domain, loginUser);
|
|
|
+ for (UploadChannel uploadChannel : uploadChannels) {
|
|
|
+ String prefix = uploadChannel.getPrefix();
|
|
|
+ // TODO get best match
|
|
|
+ if (objectName.startsWith(prefix)) {
|
|
|
+ int channelId = uploadChannel.getChannelId();
|
|
|
+ try {
|
|
|
+ StoreService storeService = getStoreService(channelId);
|
|
|
+ storeService.deleteByObjectUrl(objectName);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ObjectInfo getObjectInfo(int channelId, String objectId) {
|
|
|
+ try {
|
|
|
+ StoreService storeService = getStoreService(channelId);
|
|
|
+ int expireSecond = 3600;
|
|
|
+ ObjectInfo objectInfo = storeService.getObjectInfo(objectId);
|
|
|
+ if (objectInfo != null) {
|
|
|
+ int loginUser = AuthContext.getUserId();
|
|
|
+ String domain = userNodeService.getDomain(channelId, loginUser);
|
|
|
+ String url = String.format("//%s/%s", domain, objectInfo.getUrl());
|
|
|
+ objectInfo.setUrl(url);
|
|
|
+ }
|
|
|
+
|
|
|
+ return objectInfo;
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getSignedUrl(int channelId, String objectId) {
|
|
|
+ int loginUser = AuthContext.getUserId();
|
|
|
+ String domain = userNodeService.getDomain(channelId, loginUser);
|
|
|
+ try {
|
|
|
+ StoreService storeService = getStoreService(channelId);
|
|
|
+ // 多少秒后 url 过期
|
|
|
+ int expire = 3600;
|
|
|
+ return storeService.getSignedUrl(domain, loginUser, objectId, expire);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public VideoInfo getVideoInfo(int channelId, String videoFileId) {
|
|
|
+ try {
|
|
|
+ StoreService storeService = getStoreService(channelId);
|
|
|
+ VideoInfo videoInfo = storeService.getVideoInfo(videoFileId);
|
|
|
+ if (videoInfo != null) {
|
|
|
+ int loginUser = AuthContext.getUserId();
|
|
|
+ String domain = userNodeService.getDomain(channelId, loginUser);
|
|
|
+ String url = String.format("//%s/%s", domain, videoInfo.getUrl());
|
|
|
+ videoInfo.setUrl(url);
|
|
|
+ }
|
|
|
+
|
|
|
+ return videoInfo;
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ImageInfo getImageInfo(int channelId, String imageFileId) {
|
|
|
+ try {
|
|
|
+ StoreService storeService = getStoreService(channelId);
|
|
|
+ ImageInfo imageInfo = storeService.getImageInfo(imageFileId);
|
|
|
+ if (imageInfo != null) {
|
|
|
+ int loginUser = AuthContext.getUserId();
|
|
|
+ String domain = userNodeService.getDomain(channelId, loginUser);
|
|
|
+ String url = String.format("//%s/%s", domain, imageInfo.getUrl());
|
|
|
+ imageInfo.setUrl(url);
|
|
|
+ }
|
|
|
+
|
|
|
+ return imageInfo;
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ConvertedImageInfo getWebpInfo(int channelId, String imageFileId) {
|
|
|
+ try {
|
|
|
+ StoreService storeService = getStoreService(channelId);
|
|
|
+ ConvertedImageInfo convertedImageInfo = storeService.getWebpInfo(imageFileId);
|
|
|
+ if (convertedImageInfo != null) {
|
|
|
+ int loginUser = AuthContext.getUserId();
|
|
|
+ String domain = userNodeService.getDomain(channelId, loginUser);
|
|
|
+ String url = String.format("//%s/%s", domain, convertedImageInfo.getUrl());
|
|
|
+ convertedImageInfo.setUrl(url);
|
|
|
+ }
|
|
|
+
|
|
|
+ return convertedImageInfo;
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AudioInfo getAudioInfo(int channelId, String audioFileId) {
|
|
|
+ try {
|
|
|
+ StoreService storeService = getStoreService(channelId);
|
|
|
+ AudioInfo audioInfo = storeService.getAudioInfo(audioFileId);
|
|
|
+ if (audioInfo != null) {
|
|
|
+ int loginUser = AuthContext.getUserId();
|
|
|
+ String domain = userNodeService.getDomain(channelId, loginUser);
|
|
|
+ String url = String.format("//%s/%s", domain, audioInfo.getUrl());
|
|
|
+ audioInfo.setUrl(url);
|
|
|
+ }
|
|
|
+
|
|
|
+ return audioInfo;
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+}
|