From 8cf5380cb86d900c943a44dbf9a811dcc4b51ba6 Mon Sep 17 00:00:00 2001 From: daikon <1059907724@qq.com> Date: Tue, 25 Jun 2024 21:40:34 +0800 Subject: [PATCH] add checkTagObjectStatus when delete tagObject (#1225) --- .../server/web/rest/TagObjectController.java | 2 +- .../server/web/service/TagObjectService.java | 2 + .../service/impl/TagObjectServiceImpl.java | 51 ++++++++++++++++++- .../supersonic/headless/TagObjectTest.java | 6 +-- 4 files changed, 56 insertions(+), 5 deletions(-) diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/web/rest/TagObjectController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/web/rest/TagObjectController.java index a66e61b8e..5bac7dad4 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/web/rest/TagObjectController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/web/rest/TagObjectController.java @@ -74,7 +74,7 @@ public class TagObjectController { HttpServletRequest request, HttpServletResponse response) throws Exception { User user = UserHolder.findUser(request, response); - tagObjectService.delete(id, user); + tagObjectService.delete(id, user, true); return true; } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/web/service/TagObjectService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/web/service/TagObjectService.java index 1e9ff04ce..f66ce50fb 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/web/service/TagObjectService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/web/service/TagObjectService.java @@ -16,6 +16,8 @@ public interface TagObjectService { Boolean delete(Long id, User user) throws Exception; + Boolean delete(Long id, User user, Boolean checkStatus) throws Exception; + TagObjectResp getTagObject(Long id, User user); List getTagObjects(TagObjectFilter filter, User user); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/web/service/impl/TagObjectServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/web/service/impl/TagObjectServiceImpl.java index be38f951e..736104460 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/web/service/impl/TagObjectServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/web/service/impl/TagObjectServiceImpl.java @@ -1,30 +1,44 @@ package com.tencent.supersonic.headless.server.web.service.impl; +import com.github.pagehelper.PageInfo; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.common.pojo.enums.StatusEnum; import com.tencent.supersonic.common.util.BeanMapper; +import com.tencent.supersonic.headless.api.pojo.request.TagFilterPageReq; import com.tencent.supersonic.headless.api.pojo.request.TagObjectReq; +import com.tencent.supersonic.headless.api.pojo.response.ModelResp; import com.tencent.supersonic.headless.api.pojo.response.TagObjectResp; +import com.tencent.supersonic.headless.api.pojo.response.TagResp; import com.tencent.supersonic.headless.server.persistence.dataobject.TagObjectDO; import com.tencent.supersonic.headless.server.persistence.repository.TagObjectRepository; import com.tencent.supersonic.headless.server.pojo.TagObjectFilter; +import com.tencent.supersonic.headless.server.web.service.ModelService; +import com.tencent.supersonic.headless.server.web.service.TagMetaService; import com.tencent.supersonic.headless.server.web.service.TagObjectService; import com.tencent.supersonic.headless.server.utils.TagObjectConverter; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; @Service public class TagObjectServiceImpl implements TagObjectService { private final TagObjectRepository tagObjectRepository; + private final ModelService modelService; + private final TagMetaService tagMetaService; - public TagObjectServiceImpl(TagObjectRepository tagObjectRepository) { + public TagObjectServiceImpl(TagObjectRepository tagObjectRepository, ModelService modelService, + @Lazy TagMetaService tagMetaService) { this.tagObjectRepository = tagObjectRepository; + this.modelService = modelService; + this.tagMetaService = tagMetaService; } @Override @@ -78,6 +92,7 @@ public class TagObjectServiceImpl implements TagObjectService { public Boolean delete(Long id, User user) throws Exception { TagObjectDO tagObjectDO = tagObjectRepository.getTagObjectById(id); checkDeletePermission(tagObjectDO, user); + checkTagObjectStatus(tagObjectDO, user); tagObjectDO.setUpdatedAt(new Date()); tagObjectDO.setUpdatedBy(user.getName()); tagObjectDO.setStatus(StatusEnum.DELETED.getCode()); @@ -85,6 +100,40 @@ public class TagObjectServiceImpl implements TagObjectService { return true; } + @Override + public Boolean delete(Long id, User user, Boolean checkStatus) throws Exception { + TagObjectDO tagObjectDO = tagObjectRepository.getTagObjectById(id); + checkDeletePermission(tagObjectDO, user); + if (checkStatus) { + checkTagObjectStatus(tagObjectDO, user); + } + tagObjectDO.setUpdatedAt(new Date()); + tagObjectDO.setUpdatedBy(user.getName()); + tagObjectDO.setStatus(StatusEnum.DELETED.getCode()); + tagObjectRepository.update(tagObjectDO); + return true; + } + + private void checkTagObjectStatus(TagObjectDO tagObjectDO, User user) throws Exception { + List allModelByDomainIds = modelService.getAllModelByDomainIds( + Arrays.asList(tagObjectDO.getDomainId())); + if (!CollectionUtils.isEmpty(allModelByDomainIds)) { + List modelIds = allModelByDomainIds.stream().map(ModelResp::getId).collect(Collectors.toList()); + throw new Exception("delete operation is not supported at the moment. related modelIds:" + modelIds); + } + TagFilterPageReq tagMarketPageReq = new TagFilterPageReq(); + tagMarketPageReq.setTagObjectId(tagObjectDO.getId()); + PageInfo respPageInfo = tagMetaService.queryTagMarketPage(tagMarketPageReq, user); + if (Objects.nonNull(respPageInfo)) { + List tagRespList = respPageInfo.getList(); + if (!CollectionUtils.isEmpty(tagRespList)) { + List tagIds = tagRespList.stream().map(TagResp::getId).collect(Collectors.toList()); + throw new Exception("delete operation is not supported at the moment. related tagIds:" + tagIds); + } + } + + } + private void checkDeletePermission(TagObjectDO tagObjectDO, User user) throws Exception { if (user.getName().equalsIgnoreCase(tagObjectDO.getCreatedBy()) || user.isSuperAdmin()) { return; diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/TagObjectTest.java b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/TagObjectTest.java index 9e1ea65c0..20892fc3a 100644 --- a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/TagObjectTest.java +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/TagObjectTest.java @@ -21,7 +21,7 @@ public class TagObjectTest extends BaseTest { User user = User.getFakeUser(); TagObjectReq tagObjectReq = newTagObjectReq(); TagObjectResp tagObjectResp = tagObjectService.create(tagObjectReq, user); - tagObjectService.delete(tagObjectResp.getId(), user); + tagObjectService.delete(tagObjectResp.getId(), user, false); } @Test @@ -33,7 +33,7 @@ public class TagObjectTest extends BaseTest { tagObjectReqUpdate.setName("艺人1"); tagObjectService.update(tagObjectReqUpdate, User.getFakeUser()); TagObjectResp tagObject = tagObjectService.getTagObject(tagObjectReqUpdate.getId(), User.getFakeUser()); - tagObjectService.delete(tagObject.getId(), User.getFakeUser()); + tagObjectService.delete(tagObject.getId(), User.getFakeUser(), false); } @Test @@ -43,7 +43,7 @@ public class TagObjectTest extends BaseTest { TagObjectFilter filter = new TagObjectFilter(); List tagObjects = tagObjectService.getTagObjects(filter, User.getFakeUser()); tagObjects.size(); - tagObjectService.delete(tagObjectResp.getId(), User.getFakeUser()); + tagObjectService.delete(tagObjectResp.getId(), User.getFakeUser(), false); } private TagObjectReq newTagObjectReq() {