add checkTagObjectStatus when delete tagObject (#1225)

This commit is contained in:
daikon
2024-06-25 21:40:34 +08:00
committed by GitHub
parent bba0a2ff8d
commit 8cf5380cb8
4 changed files with 56 additions and 5 deletions

View File

@@ -74,7 +74,7 @@ public class TagObjectController {
HttpServletRequest request, HttpServletRequest request,
HttpServletResponse response) throws Exception { HttpServletResponse response) throws Exception {
User user = UserHolder.findUser(request, response); User user = UserHolder.findUser(request, response);
tagObjectService.delete(id, user); tagObjectService.delete(id, user, true);
return true; return true;
} }

View File

@@ -16,6 +16,8 @@ public interface TagObjectService {
Boolean delete(Long id, User user) throws Exception; Boolean delete(Long id, User user) throws Exception;
Boolean delete(Long id, User user, Boolean checkStatus) throws Exception;
TagObjectResp getTagObject(Long id, User user); TagObjectResp getTagObject(Long id, User user);
List<TagObjectResp> getTagObjects(TagObjectFilter filter, User user); List<TagObjectResp> getTagObjects(TagObjectFilter filter, User user);

View File

@@ -1,30 +1,44 @@
package com.tencent.supersonic.headless.server.web.service.impl; 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.auth.api.authentication.pojo.User;
import com.tencent.supersonic.common.pojo.enums.StatusEnum; import com.tencent.supersonic.common.pojo.enums.StatusEnum;
import com.tencent.supersonic.common.util.BeanMapper; 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.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.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.dataobject.TagObjectDO;
import com.tencent.supersonic.headless.server.persistence.repository.TagObjectRepository; import com.tencent.supersonic.headless.server.persistence.repository.TagObjectRepository;
import com.tencent.supersonic.headless.server.pojo.TagObjectFilter; 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.web.service.TagObjectService;
import com.tencent.supersonic.headless.server.utils.TagObjectConverter; import com.tencent.supersonic.headless.server.utils.TagObjectConverter;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
public class TagObjectServiceImpl implements TagObjectService { public class TagObjectServiceImpl implements TagObjectService {
private final TagObjectRepository tagObjectRepository; 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.tagObjectRepository = tagObjectRepository;
this.modelService = modelService;
this.tagMetaService = tagMetaService;
} }
@Override @Override
@@ -78,6 +92,7 @@ public class TagObjectServiceImpl implements TagObjectService {
public Boolean delete(Long id, User user) throws Exception { public Boolean delete(Long id, User user) throws Exception {
TagObjectDO tagObjectDO = tagObjectRepository.getTagObjectById(id); TagObjectDO tagObjectDO = tagObjectRepository.getTagObjectById(id);
checkDeletePermission(tagObjectDO, user); checkDeletePermission(tagObjectDO, user);
checkTagObjectStatus(tagObjectDO, user);
tagObjectDO.setUpdatedAt(new Date()); tagObjectDO.setUpdatedAt(new Date());
tagObjectDO.setUpdatedBy(user.getName()); tagObjectDO.setUpdatedBy(user.getName());
tagObjectDO.setStatus(StatusEnum.DELETED.getCode()); tagObjectDO.setStatus(StatusEnum.DELETED.getCode());
@@ -85,6 +100,40 @@ public class TagObjectServiceImpl implements TagObjectService {
return true; 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<ModelResp> allModelByDomainIds = modelService.getAllModelByDomainIds(
Arrays.asList(tagObjectDO.getDomainId()));
if (!CollectionUtils.isEmpty(allModelByDomainIds)) {
List<Long> 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<TagResp> respPageInfo = tagMetaService.queryTagMarketPage(tagMarketPageReq, user);
if (Objects.nonNull(respPageInfo)) {
List<TagResp> tagRespList = respPageInfo.getList();
if (!CollectionUtils.isEmpty(tagRespList)) {
List<Long> 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 { private void checkDeletePermission(TagObjectDO tagObjectDO, User user) throws Exception {
if (user.getName().equalsIgnoreCase(tagObjectDO.getCreatedBy()) || user.isSuperAdmin()) { if (user.getName().equalsIgnoreCase(tagObjectDO.getCreatedBy()) || user.isSuperAdmin()) {
return; return;

View File

@@ -21,7 +21,7 @@ public class TagObjectTest extends BaseTest {
User user = User.getFakeUser(); User user = User.getFakeUser();
TagObjectReq tagObjectReq = newTagObjectReq(); TagObjectReq tagObjectReq = newTagObjectReq();
TagObjectResp tagObjectResp = tagObjectService.create(tagObjectReq, user); TagObjectResp tagObjectResp = tagObjectService.create(tagObjectReq, user);
tagObjectService.delete(tagObjectResp.getId(), user); tagObjectService.delete(tagObjectResp.getId(), user, false);
} }
@Test @Test
@@ -33,7 +33,7 @@ public class TagObjectTest extends BaseTest {
tagObjectReqUpdate.setName("艺人1"); tagObjectReqUpdate.setName("艺人1");
tagObjectService.update(tagObjectReqUpdate, User.getFakeUser()); tagObjectService.update(tagObjectReqUpdate, User.getFakeUser());
TagObjectResp tagObject = tagObjectService.getTagObject(tagObjectReqUpdate.getId(), User.getFakeUser()); TagObjectResp tagObject = tagObjectService.getTagObject(tagObjectReqUpdate.getId(), User.getFakeUser());
tagObjectService.delete(tagObject.getId(), User.getFakeUser()); tagObjectService.delete(tagObject.getId(), User.getFakeUser(), false);
} }
@Test @Test
@@ -43,7 +43,7 @@ public class TagObjectTest extends BaseTest {
TagObjectFilter filter = new TagObjectFilter(); TagObjectFilter filter = new TagObjectFilter();
List<TagObjectResp> tagObjects = tagObjectService.getTagObjects(filter, User.getFakeUser()); List<TagObjectResp> tagObjects = tagObjectService.getTagObjects(filter, User.getFakeUser());
tagObjects.size(); tagObjects.size();
tagObjectService.delete(tagObjectResp.getId(), User.getFakeUser()); tagObjectService.delete(tagObjectResp.getId(), User.getFakeUser(), false);
} }
private TagObjectReq newTagObjectReq() { private TagObjectReq newTagObjectReq() {