mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-13 04:57:28 +00:00
(improvement)(Headless) Support setting fields as foreign keys when creating data-model (#1857)
Co-authored-by: lxwcodemonkey
This commit is contained in:
@@ -8,9 +8,14 @@ import com.tencent.supersonic.common.pojo.JoinCondition;
|
||||
import com.tencent.supersonic.common.pojo.ModelRela;
|
||||
import com.tencent.supersonic.common.pojo.User;
|
||||
import com.tencent.supersonic.common.util.BeanMapper;
|
||||
import com.tencent.supersonic.headless.api.pojo.enums.IdentifyType;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.ModelResp;
|
||||
import com.tencent.supersonic.headless.server.persistence.dataobject.ModelRelaDO;
|
||||
import com.tencent.supersonic.headless.server.persistence.mapper.ModelRelaDOMapper;
|
||||
import com.tencent.supersonic.headless.server.service.ModelRelaService;
|
||||
import com.tencent.supersonic.headless.server.service.ModelService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
@@ -21,8 +26,13 @@ import java.util.stream.Collectors;
|
||||
public class ModelRelaServiceImpl extends ServiceImpl<ModelRelaDOMapper, ModelRelaDO>
|
||||
implements ModelRelaService {
|
||||
|
||||
@Lazy
|
||||
@Autowired
|
||||
private ModelService modelService;
|
||||
|
||||
@Override
|
||||
public void save(ModelRela modelRela, User user) {
|
||||
check(modelRela);
|
||||
modelRela.createdBy(user.getName());
|
||||
ModelRelaDO modelRelaDO = convert(modelRela);
|
||||
save(modelRelaDO);
|
||||
@@ -30,11 +40,31 @@ public class ModelRelaServiceImpl extends ServiceImpl<ModelRelaDOMapper, ModelRe
|
||||
|
||||
@Override
|
||||
public void update(ModelRela modelRela, User user) {
|
||||
check(modelRela);
|
||||
modelRela.updatedBy(user.getName());
|
||||
ModelRelaDO modelRelaDO = convert(modelRela);
|
||||
updateById(modelRelaDO);
|
||||
}
|
||||
|
||||
private void check(ModelRela modelRela) {
|
||||
ModelResp fromModel = modelService.getModel(modelRela.getFromModelId());
|
||||
ModelResp toModel = modelService.getModel(modelRela.getToModelId());
|
||||
if (CollectionUtils.isEmpty(modelRela.getJoinConditions())) {
|
||||
throw new RuntimeException("关联关系不可为空");
|
||||
}
|
||||
for (JoinCondition joinCondition : modelRela.getJoinConditions()) {
|
||||
IdentifyType identifyTypeLeft = fromModel.getIdentifyType(joinCondition.getLeftField());
|
||||
IdentifyType identifyTypeRight = toModel.getIdentifyType(joinCondition.getRightField());
|
||||
if (IdentifyType.foreign.equals(identifyTypeLeft)
|
||||
|| IdentifyType.foreign.equals(identifyTypeRight)) {
|
||||
if (!IdentifyType.primary.equals(identifyTypeLeft)
|
||||
&& !IdentifyType.primary.equals(identifyTypeRight)) {
|
||||
throw new RuntimeException("外键必须跟主键关联");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ModelRela> getModelRelaList(Long domainId) {
|
||||
QueryWrapper<ModelRelaDO> wrapper = new QueryWrapper<>();
|
||||
|
||||
@@ -116,7 +116,7 @@ public class DimensionConverter {
|
||||
try {
|
||||
// Support compatibility with legacy data.
|
||||
IdentifyType.valueOf(type.toLowerCase());
|
||||
return DimensionType.identify;
|
||||
return DimensionType.primary_key;
|
||||
} catch (IllegalArgumentException e) {
|
||||
return DimensionType.valueOf(type);
|
||||
}
|
||||
|
||||
@@ -152,7 +152,7 @@ public class ModelConverter {
|
||||
dimensionReq.setSemanticType(SemanticType.CATEGORY.name());
|
||||
dimensionReq.setModelId(modelDO.getId());
|
||||
dimensionReq.setExpr(identify.getBizName());
|
||||
dimensionReq.setType(DimensionType.identify.name());
|
||||
dimensionReq.setType(DimensionType.fromIdentify(identify.getType()).name());
|
||||
return dimensionReq;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user