mirror of
https://github.com/tencentmusic/supersonic.git
synced 2026-08-10 10:56:52 +08:00
refactor(model): 重构模型删除逻辑实现级联删除
- 删除原有的删除检查方法 checkDelete - 新增 deleteModelItems 方法实现模型下指标和维度的级联删除 - 在模型删除时自动清理相关的指标和维度数据 - 移除对在线状态指标和维度的删除限制检查
This commit is contained in:
@@ -167,13 +167,31 @@ public class ModelServiceImpl implements ModelService {
|
||||
if (datasourceDO == null) {
|
||||
return;
|
||||
}
|
||||
checkDelete(id);
|
||||
// cascade delete metrics and dimensions under the model
|
||||
deleteModelItems(id, user);
|
||||
datasourceDO.setStatus(StatusEnum.DELETED.getCode());
|
||||
datasourceDO.setUpdatedAt(new Date());
|
||||
datasourceDO.setUpdatedBy(user.getName());
|
||||
modelRepository.updateModel(datasourceDO);
|
||||
}
|
||||
|
||||
private void deleteModelItems(Long modelId, User user) {
|
||||
MetaFilter metaFilter = new MetaFilter();
|
||||
metaFilter.setModelIds(Lists.newArrayList(modelId));
|
||||
List<MetricResp> metricResps = metricService.getMetrics(metaFilter);
|
||||
List<DimensionResp> dimensionResps = dimensionService.getDimensions(metaFilter);
|
||||
List<Long> metricIds = metricResps.stream().map(MetricResp::getId)
|
||||
.collect(Collectors.toList());
|
||||
List<Long> dimensionIds = dimensionResps.stream().map(DimensionResp::getId)
|
||||
.collect(Collectors.toList());
|
||||
if (!CollectionUtils.isEmpty(metricIds)) {
|
||||
metricService.deleteMetricBatch(metricIds, user);
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(dimensionIds)) {
|
||||
dimensionService.deleteDimensionBatch(dimensionIds, user);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemDateResp getItemDate(ItemDateFilter dimension, ItemDateFilter metric) {
|
||||
List<DateInfoReq> itemDates = new ArrayList<>();
|
||||
@@ -331,20 +349,6 @@ public class ModelServiceImpl implements ModelService {
|
||||
}
|
||||
}
|
||||
|
||||
private void checkDelete(Long modelId) {
|
||||
MetaFilter metaFilter = new MetaFilter();
|
||||
metaFilter.setModelIds(Lists.newArrayList(modelId));
|
||||
List<MetricResp> metricResps = metricService.getMetrics(metaFilter);
|
||||
List<DimensionResp> dimensionResps = dimensionService.getDimensions(metaFilter);
|
||||
boolean validMetric = metricResps.stream().anyMatch(
|
||||
metricResp -> Objects.equals(metricResp.getStatus(), StatusEnum.ONLINE.getCode()));
|
||||
boolean validDimension = dimensionResps.stream().anyMatch(dimensionResp -> Objects
|
||||
.equals(dimensionResp.getStatus(), StatusEnum.ONLINE.getCode()));
|
||||
if (validMetric || validDimension) {
|
||||
throw new RuntimeException("存在基于该模型创建的指标和维度, 暂不能删除, 请确认");
|
||||
}
|
||||
}
|
||||
|
||||
private ItemDateResp calculateDateInternal(List<DateInfoReq> itemDates) {
|
||||
if (CollectionUtils.isEmpty(itemDates)) {
|
||||
log.warn("itemDates is empty!");
|
||||
|
||||
Reference in New Issue
Block a user