You've already forked FrameTour-BE
refactor(puzzle): 重构元素DTO及新增元素基类
- 将ElementCreateRequest和PuzzleElementDTO中的elementType从Integer改为String - 删除所有类型特定字段,新增config和configMap支持JSON配置 - 新增BaseElement抽象基类定义元素通用行为 - 添加ElementConfig接口和具体实现类ImageConfig、TextConfig - 创建ElementFactory工厂类和ElementRegistrar注册器 - 新增ElementType枚举和ElementValidationException异常类 - 实现ImageElement和TextElement具体元素类 - 添加Position位置信息封装类
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
package com.ycwl.basic.puzzle.service.impl;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.ycwl.basic.puzzle.util.ElementConfigHelper;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.ycwl.basic.puzzle.dto.ElementCreateRequest;
|
||||
@@ -137,18 +139,24 @@ public class PuzzleTemplateServiceImpl implements IPuzzleTemplateService {
|
||||
public Long addElement(ElementCreateRequest request) {
|
||||
log.info("添加元素到模板: templateId={}, elementKey={}", request.getTemplateId(), request.getElementKey());
|
||||
|
||||
// 检查模板是否存在
|
||||
// 1. 验证请求
|
||||
ElementConfigHelper.validateRequest(request);
|
||||
|
||||
// 2. 检查模板是否存在
|
||||
PuzzleTemplateEntity template = templateMapper.getById(request.getTemplateId());
|
||||
if (template == null) {
|
||||
throw new IllegalArgumentException("模板不存在: " + request.getTemplateId());
|
||||
}
|
||||
|
||||
// 转换为实体并插入
|
||||
PuzzleElementEntity entity = BeanUtil.copyProperties(request, PuzzleElementEntity.class);
|
||||
// 3. 转换为Entity(使用Helper)
|
||||
PuzzleElementEntity entity = ElementConfigHelper.toEntity(request);
|
||||
entity.setDeleted(0);
|
||||
|
||||
// 4. 插入数据库
|
||||
elementMapper.insert(entity);
|
||||
|
||||
log.info("元素添加成功: id={}, elementKey={}", entity.getId(), entity.getElementKey());
|
||||
log.info("元素添加成功: id={}, type={}, key={}",
|
||||
entity.getId(), entity.getElementType(), entity.getElementKey());
|
||||
return entity.getId();
|
||||
}
|
||||
|
||||
@@ -157,22 +165,23 @@ public class PuzzleTemplateServiceImpl implements IPuzzleTemplateService {
|
||||
public void batchAddElements(Long templateId, List<ElementCreateRequest> elements) {
|
||||
log.info("批量添加元素到模板: templateId={}, count={}", templateId, elements.size());
|
||||
|
||||
// 检查模板是否存在
|
||||
// 1. 校验模板
|
||||
PuzzleTemplateEntity template = templateMapper.getById(templateId);
|
||||
if (template == null) {
|
||||
throw new IllegalArgumentException("模板不存在: " + templateId);
|
||||
}
|
||||
|
||||
// 转换为实体列表
|
||||
List<PuzzleElementEntity> entityList = new ArrayList<>();
|
||||
for (ElementCreateRequest request : elements) {
|
||||
request.setTemplateId(templateId);
|
||||
PuzzleElementEntity entity = BeanUtil.copyProperties(request, PuzzleElementEntity.class);
|
||||
entity.setDeleted(0);
|
||||
entityList.add(entity);
|
||||
}
|
||||
// 2. 批量转换
|
||||
List<PuzzleElementEntity> entityList = elements.stream()
|
||||
.peek(req -> {
|
||||
req.setTemplateId(templateId);
|
||||
ElementConfigHelper.validateRequest(req);
|
||||
})
|
||||
.map(ElementConfigHelper::toEntity)
|
||||
.peek(entity -> entity.setDeleted(0))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 批量插入
|
||||
// 3. 批量插入
|
||||
if (!entityList.isEmpty()) {
|
||||
elementMapper.batchInsert(entityList);
|
||||
log.info("批量添加元素成功: templateId={}, count={}", templateId, entityList.size());
|
||||
@@ -184,14 +193,17 @@ public class PuzzleTemplateServiceImpl implements IPuzzleTemplateService {
|
||||
public void updateElement(Long id, ElementCreateRequest request) {
|
||||
log.info("更新元素: id={}", id);
|
||||
|
||||
// 检查元素是否存在
|
||||
// 1. 校验元素存在
|
||||
PuzzleElementEntity existing = elementMapper.getById(id);
|
||||
if (existing == null) {
|
||||
throw new IllegalArgumentException("元素不存在: " + id);
|
||||
}
|
||||
|
||||
// 更新
|
||||
PuzzleElementEntity entity = BeanUtil.copyProperties(request, PuzzleElementEntity.class);
|
||||
// 2. 验证请求
|
||||
ElementConfigHelper.validateRequest(request);
|
||||
|
||||
// 3. 转换并更新
|
||||
PuzzleElementEntity entity = ElementConfigHelper.toEntity(request);
|
||||
entity.setId(id);
|
||||
elementMapper.update(entity);
|
||||
|
||||
@@ -222,7 +234,7 @@ public class PuzzleTemplateServiceImpl implements IPuzzleTemplateService {
|
||||
throw new IllegalArgumentException("元素不存在: " + id);
|
||||
}
|
||||
|
||||
return BeanUtil.copyProperties(element, PuzzleElementDTO.class);
|
||||
return convertElementToDTO(element);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -234,10 +246,25 @@ public class PuzzleTemplateServiceImpl implements IPuzzleTemplateService {
|
||||
// 查询元素列表
|
||||
List<PuzzleElementEntity> elements = elementMapper.getByTemplateId(template.getId());
|
||||
List<PuzzleElementDTO> elementDTOs = elements.stream()
|
||||
.map(e -> BeanUtil.copyProperties(e, PuzzleElementDTO.class))
|
||||
.map(this::convertElementToDTO)
|
||||
.collect(Collectors.toList());
|
||||
dto.setElements(elementDTOs);
|
||||
|
||||
return dto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换元素为DTO
|
||||
*/
|
||||
private PuzzleElementDTO convertElementToDTO(PuzzleElementEntity entity) {
|
||||
PuzzleElementDTO dto = new PuzzleElementDTO();
|
||||
BeanUtil.copyProperties(entity, dto);
|
||||
|
||||
// 解析config为configMap(方便前端使用)
|
||||
if (StrUtil.isNotBlank(entity.getConfig())) {
|
||||
dto.setConfigMap(ElementConfigHelper.parseConfigToMap(entity.getConfig()));
|
||||
}
|
||||
|
||||
return dto;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user