Merge pull request #23 from ModelEngine-Group/develop_op

refactor: update service and repository structure to use DTOs and imp…
This commit is contained in:
hhhhsc701
2025-10-24 17:56:32 +08:00
committed by GitHub
36 changed files with 427 additions and 353 deletions

View File

@@ -13,10 +13,9 @@ import org.springframework.scheduling.annotation.EnableScheduling;
@Configuration
@EnableAsync
@EnableScheduling
@EntityScan(basePackages = "com.datamate.operator.domain.modal")
@EntityScan(basePackages = "com.datamate.operator.domain.model")
@ComponentScan(basePackages = {
"com.datamate.operator",
"com.datamate.shared"
"com.datamate.operator"
})
public class OperatorMarketServiceConfiguration {
// Service configuration class for JAR packaging

View File

@@ -1,10 +1,10 @@
package com.datamate.operator.application;
import com.datamate.operator.domain.modal.Category;
import com.datamate.operator.domain.modal.CategoryRelation;
import com.datamate.operator.infrastructure.persistence.mapper.CategoryMapper;
import com.datamate.operator.infrastructure.persistence.mapper.CategoryRelationMapper;
import com.datamate.operator.domain.repository.CategoryRelationRepository;
import com.datamate.operator.domain.repository.CategoryRepository;
import com.datamate.operator.interfaces.dto.CategoryDto;
import com.datamate.operator.interfaces.dto.CategoryRelationDto;
import com.datamate.operator.interfaces.dto.CategoryTreeResponse;
import com.datamate.operator.interfaces.dto.SubCategory;
import lombok.RequiredArgsConstructor;
@@ -18,30 +18,30 @@ import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class CategoryService {
private final CategoryMapper categoryMapper;
private final CategoryRepository categoryRepo;
private final CategoryRelationMapper categoryRelationMapper;
private final CategoryRelationRepository categoryRelationRepo;
public List<CategoryTreeResponse> getAllCategories() {
List<Category> allCategories = categoryMapper.findAllCategories();
List<CategoryRelation> allRelations = categoryRelationMapper.findAllRelation();
List<CategoryDto> allCategories = categoryRepo.findAllCategories();
List<CategoryRelationDto> allRelations = categoryRelationRepo.findAllRelation();
Map<Integer, Integer> relationMap = allRelations.stream()
.collect(Collectors.groupingBy(
CategoryRelation::getCategoryId,
CategoryRelationDto::getCategoryId,
Collectors.collectingAndThen(Collectors.counting(), Math::toIntExact)));
Map<Integer, String> nameMap = allCategories.stream()
.collect(Collectors.toMap(Category::getId, Category::getName));
Map<Integer, List<Category>> groupedByParentId = allCategories.stream()
.collect(Collectors.toMap(CategoryDto::getId, CategoryDto::getName));
Map<Integer, List<CategoryDto>> groupedByParentId = allCategories.stream()
.filter(relation -> relation.getParentId() > 0)
.collect(Collectors.groupingBy(Category::getParentId));
.collect(Collectors.groupingBy(CategoryDto::getParentId));
return groupedByParentId.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.map(entry -> {
Integer parentId = entry.getKey();
List<Category> group = entry.getValue();
List<CategoryDto> group = entry.getValue();
CategoryTreeResponse response = new CategoryTreeResponse();
response.setId(parentId);
response.setName(nameMap.get(parentId));

View File

@@ -1,21 +1,20 @@
package com.datamate.operator.application;
import com.datamate.operator.interfaces.dto.Label;
import com.datamate.operator.interfaces.dto.*;
import com.datamate.operator.interfaces.dto.LabelDto;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Collections;
@Service
public class LabelService {
public List<Label> getLabels(Integer page, Integer size, String keyword) {
public List<LabelDto> getLabels(Integer page, Integer size, String keyword) {
// TODO: 查询标签列表
return Collections.emptyList();
}
public void updateLabel(String id, List<Label> updateLabelRequest) {
public void updateLabel(String id, List<LabelDto> updateLabelDtoRequest) {
// TODO: 更新标签
}
public void createLabels(Label labelsPostRequest) {
public void createLabels(LabelDto labelsPostRequest) {
// TODO: 批量创建标签
}
}

View File

@@ -1,13 +1,11 @@
package com.datamate.operator.application;
import com.datamate.operator.domain.converter.OperatorConverter;
import com.datamate.operator.infrastructure.persistence.mapper.CategoryRelationMapper;
import com.datamate.operator.infrastructure.persistence.mapper.OperatorMapper;
import com.datamate.operator.interfaces.dto.CreateOperatorRequest;
import com.datamate.operator.interfaces.dto.OperatorResponse;
import com.datamate.operator.interfaces.dto.UpdateOperatorRequest;
import com.datamate.operator.interfaces.dto.*;
import com.datamate.operator.domain.modal.Operator;
import com.datamate.operator.infrastructure.converter.OperatorConverter;
import com.datamate.operator.domain.model.OperatorView;
import com.datamate.operator.domain.repository.CategoryRelationRepository;
import com.datamate.operator.domain.repository.OperatorRepository;
import com.datamate.operator.domain.repository.OperatorViewRepository;
import com.datamate.operator.interfaces.dto.OperatorDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@@ -17,60 +15,42 @@ import java.util.List;
@Service
@RequiredArgsConstructor
public class OperatorService {
private final OperatorMapper operatorMapper;
private final OperatorRepository operatorRepo;
private final CategoryRelationMapper relationMapper;
private final OperatorViewRepository operatorViewRepo;
public List<OperatorResponse> getOperators(Integer page, Integer size, List<Integer> categories,
private final CategoryRelationRepository relationRepo;
public List<OperatorDto> getOperators(Integer page, Integer size, List<Integer> categories,
String operatorName, Boolean isStar) {
Integer offset = page * size;
List<Operator> filteredOperators = operatorMapper.findOperatorsByCriteria(size, offset, operatorName,
List<OperatorView> filteredOperators = operatorViewRepo.findOperatorsByCriteria(page, size, operatorName,
categories, isStar);
return filteredOperators.stream()
.map(OperatorConverter.INSTANCE::operatorToResponse).toList();
return filteredOperators.stream().map(OperatorConverter.INSTANCE::fromEntityToDto).toList();
}
public int getOperatorsCount(List<Integer> categories, String operatorName, Boolean isStar) {
return operatorMapper.countOperatorsByCriteria(operatorName, categories, isStar);
return operatorViewRepo.countOperatorsByCriteria(operatorName, categories, isStar);
}
public OperatorResponse getOperatorById(String id) {
Operator operator = operatorMapper.findOperatorById(id);
return OperatorConverter.INSTANCE.operatorToResponse(operator);
public OperatorDto getOperatorById(String id) {
OperatorView operator = operatorViewRepo.findOperatorById(id);
return OperatorConverter.INSTANCE.fromEntityToDto(operator);
}
public OperatorResponse createOperator(CreateOperatorRequest req) {
Operator operator = new Operator();
operator.setId(req.getId());
operator.setName(req.getName());
operator.setDescription(req.getDescription());
operator.setVersion(req.getVersion());
operator.setInputs(req.getInputs());
operator.setOutputs(req.getOutputs());
operator.setRuntime(req.getRuntime());
operator.setSettings(req.getSettings());
operatorMapper.insertOperator(operator);
relationMapper.batchInsert(req.getId(), req.getCategories());
return OperatorConverter.INSTANCE.operatorToResponse(operator);
public OperatorDto createOperator(OperatorDto req) {
operatorRepo.insertOperator(req);
relationRepo.batchInsert(req.getId(), req.getCategories());
return getOperatorById(req.getId());
}
public OperatorResponse updateOperator(String id, UpdateOperatorRequest req) {
Operator operator = new Operator();
operator.setId(id);
operator.setName(req.getName());
operator.setDescription(req.getDescription());
operator.setVersion(req.getVersion());
operator.setInputs(req.getInputs());
operator.setOutputs(req.getOutputs());
operator.setRuntime(req.getRuntime());
operator.setSettings(req.getSettings());
operatorMapper.updateOperator(operator);
relationMapper.batchInsert(id, req.getCategories());
public OperatorDto updateOperator(String id, OperatorDto req) {
operatorRepo.updateOperator(req);
relationRepo.batchInsert(id, req.getCategories());
return getOperatorById(id);
}
public OperatorResponse uploadOperator(MultipartFile file, String description) {
public OperatorDto uploadOperator(MultipartFile file, String description) {
// TODO: 文件上传与解析
return new OperatorResponse();
return new OperatorDto();
}
}

View File

@@ -1,15 +0,0 @@
package com.datamate.operator.domain.modal;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@AllArgsConstructor
public class RelationCategoryDTO {
private Integer categoryId;
private String operatorId;
private String name;
private Integer parentId;
}

View File

@@ -0,0 +1,18 @@
package com.datamate.operator.domain.model;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@TableName(value = "t_operator_category", autoResultMap = true)
public class Category {
private Integer id;
private String name;
private String type;
private Integer parentId;
}

View File

@@ -0,0 +1,16 @@
package com.datamate.operator.domain.model;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@AllArgsConstructor
@TableName(value = "t_operator_category_relation", autoResultMap = true)
public class CategoryRelation {
private Integer categoryId;
private String operatorId;
}

View File

@@ -1,5 +1,6 @@
package com.datamate.operator.domain.modal;
package com.datamate.operator.domain.model;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
@@ -7,6 +8,7 @@ import java.time.LocalDateTime;
@Getter
@Setter
@TableName(value = "t_operator")
public class Operator {
private String id;
@@ -20,12 +22,12 @@ public class Operator {
private String outputs;
private String categories;
private String runtime;
private String settings;
private String fileName;
private Boolean isStar;
private LocalDateTime createdAt;

View File

@@ -0,0 +1,39 @@
package com.datamate.operator.domain.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
@Getter
@Setter
@TableName(value = "v_operator")
public class OperatorView {
@TableField(value = "operator_id")
private String id;
@TableField(value = "operator_name")
private String name;
private String description;
private String version;
private String inputs;
private String outputs;
private String categories;
private String runtime;
private String settings;
private Boolean isStar;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}

View File

@@ -0,0 +1,15 @@
package com.datamate.operator.domain.repository;
import com.baomidou.mybatisplus.extension.repository.IRepository;
import com.datamate.operator.domain.model.CategoryRelation;
import com.datamate.operator.interfaces.dto.CategoryRelationDto;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface CategoryRelationRepository extends IRepository<CategoryRelation> {
List<CategoryRelationDto> findAllRelation();
void batchInsert(@Param("operatorId") String operatorId, @Param("categories") List<Integer> categories);
}

View File

@@ -0,0 +1,11 @@
package com.datamate.operator.domain.repository;
import com.baomidou.mybatisplus.extension.repository.IRepository;
import com.datamate.operator.domain.model.Category;
import com.datamate.operator.interfaces.dto.CategoryDto;
import java.util.List;
public interface CategoryRepository extends IRepository<Category> {
List<CategoryDto> findAllCategories();
}

View File

@@ -0,0 +1,15 @@
package com.datamate.operator.domain.repository;
import com.baomidou.mybatisplus.extension.repository.IRepository;
import com.datamate.operator.domain.model.Operator;
import com.datamate.operator.interfaces.dto.OperatorDto;
import java.util.List;
public interface OperatorRepository extends IRepository<Operator> {
List<Operator> findAllOperators();
void updateOperator(OperatorDto operator);
void insertOperator(OperatorDto operator);
}

View File

@@ -0,0 +1,15 @@
package com.datamate.operator.domain.repository;
import com.baomidou.mybatisplus.extension.repository.IRepository;
import com.datamate.operator.domain.model.OperatorView;
import java.util.List;
public interface OperatorViewRepository extends IRepository<OperatorView> {
List<OperatorView> findOperatorsByCriteria(Integer page, Integer size, String operatorName,
List<Integer> categories, Boolean isStar);
Integer countOperatorsByCriteria(String operatorName, List<Integer> categories, Boolean isStar);
OperatorView findOperatorById(String id);
}

View File

@@ -0,0 +1,15 @@
package com.datamate.operator.infrastructure.converter;
import com.datamate.operator.domain.model.Category;
import com.datamate.operator.interfaces.dto.CategoryDto;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper
public interface CategoryConverter {
CategoryConverter INSTANCE = Mappers.getMapper(CategoryConverter.class);
List<CategoryDto> fromEntityToDto (List<Category> dto);
}

View File

@@ -0,0 +1,15 @@
package com.datamate.operator.infrastructure.converter;
import com.datamate.operator.domain.model.CategoryRelation;
import com.datamate.operator.interfaces.dto.CategoryRelationDto;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper
public interface CategoryRelationConverter {
CategoryRelationConverter INSTANCE = Mappers.getMapper(CategoryRelationConverter.class);
List<CategoryRelationDto> fromEntityToDto (List<CategoryRelation> dto);
}

View File

@@ -1,7 +1,8 @@
package com.datamate.operator.domain.converter;
package com.datamate.operator.infrastructure.converter;
import com.datamate.operator.domain.modal.Operator;
import com.datamate.operator.interfaces.dto.OperatorResponse;
import com.datamate.operator.domain.model.Operator;
import com.datamate.operator.domain.model.OperatorView;
import com.datamate.operator.interfaces.dto.OperatorDto;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
@@ -16,7 +17,7 @@ public interface OperatorConverter {
OperatorConverter INSTANCE = Mappers.getMapper(OperatorConverter.class);
@Mapping(target = "categories", source = "categories", qualifiedByName = "stringToList")
OperatorResponse operatorToResponse(Operator operator);
OperatorDto fromEntityToDto(OperatorView operator);
@Named("stringToList")
static List<Integer> stringToList(String input) {
@@ -25,4 +26,6 @@ public interface OperatorConverter {
}
return Arrays.stream(input.split(",")).map(Integer::valueOf).toList();
}
Operator fromDtoToEntity(OperatorDto operator);
}

View File

@@ -0,0 +1,32 @@
package com.datamate.operator.infrastructure.persistence.Impl;
import com.baomidou.mybatisplus.extension.repository.CrudRepository;
import com.datamate.operator.domain.model.CategoryRelation;
import com.datamate.operator.domain.repository.CategoryRelationRepository;
import com.datamate.operator.infrastructure.converter.CategoryRelationConverter;
import com.datamate.operator.infrastructure.persistence.mapper.CategoryRelationMapper;
import com.datamate.operator.interfaces.dto.CategoryRelationDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@RequiredArgsConstructor
public class CategoryRelationRepositoryImpl extends CrudRepository<CategoryRelationMapper, CategoryRelation>
implements CategoryRelationRepository {
private final CategoryRelationMapper mapper;
@Override
public List<CategoryRelationDto> findAllRelation() {
return CategoryRelationConverter.INSTANCE.fromEntityToDto(mapper.selectList(null));
}
@Override
public void batchInsert(String operatorId, List<Integer> categories) {
List<CategoryRelation> categoryRelations = categories.stream()
.map(category -> new CategoryRelation(category, operatorId))
.toList();
mapper.insert(categoryRelations);
}
}

View File

@@ -0,0 +1,24 @@
package com.datamate.operator.infrastructure.persistence.Impl;
import com.baomidou.mybatisplus.extension.repository.CrudRepository;
import com.datamate.operator.domain.model.Category;
import com.datamate.operator.domain.repository.CategoryRepository;
import com.datamate.operator.infrastructure.converter.CategoryConverter;
import com.datamate.operator.infrastructure.persistence.mapper.CategoryMapper;
import com.datamate.operator.interfaces.dto.CategoryDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@RequiredArgsConstructor
public class CategoryRepositoryImpl extends CrudRepository<CategoryMapper, Category> implements CategoryRepository {
private final CategoryMapper mapper;
@Override
public List<CategoryDto> findAllCategories() {
return CategoryConverter.INSTANCE.fromEntityToDto(mapper.selectList(null));
}
}

View File

@@ -0,0 +1,33 @@
package com.datamate.operator.infrastructure.persistence.Impl;
import com.baomidou.mybatisplus.extension.repository.CrudRepository;
import com.datamate.operator.infrastructure.converter.OperatorConverter;
import com.datamate.operator.domain.model.Operator;
import com.datamate.operator.domain.repository.OperatorRepository;
import com.datamate.operator.infrastructure.persistence.mapper.OperatorMapper;
import com.datamate.operator.interfaces.dto.OperatorDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@RequiredArgsConstructor
public class OperatorRepositoryImpl extends CrudRepository<OperatorMapper, Operator> implements OperatorRepository {
private final OperatorMapper mapper;
@Override
public List<Operator> findAllOperators() {
return mapper.selectList(null);
}
@Override
public void updateOperator(OperatorDto operator) {
mapper.updateById(OperatorConverter.INSTANCE.fromDtoToEntity(operator));
}
@Override
public void insertOperator(OperatorDto operator) {
mapper.insert(OperatorConverter.INSTANCE.fromDtoToEntity(operator));
}
}

View File

@@ -0,0 +1,52 @@
package com.datamate.operator.infrastructure.persistence.Impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.repository.CrudRepository;
import com.datamate.operator.domain.model.OperatorView;
import com.datamate.operator.domain.repository.OperatorViewRepository;
import com.datamate.operator.infrastructure.persistence.mapper.OperatorViewMapper;
import io.micrometer.common.util.StringUtils;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@RequiredArgsConstructor
public class OperatorViewRepositoryImpl extends CrudRepository<OperatorViewMapper, OperatorView> implements OperatorViewRepository {
private final OperatorViewMapper mapper;
@Override
public List<OperatorView> findOperatorsByCriteria(Integer page, Integer size, String operatorName,
List<Integer> categories, Boolean isStar) {
QueryWrapper<OperatorView> queryWrapper = Wrappers.query();
queryWrapper.in(CollectionUtils.isNotEmpty(categories), "category_id", categories)
.like(StringUtils.isNotBlank(operatorName), "operator_name", operatorName)
.eq(isStar != null, "is_star", isStar)
.groupBy("operator_id");
Page<OperatorView> queryPage = null;
if (size != null && page != null) {
queryPage = new Page<>(page + 1, size);
}
IPage<OperatorView> operators = mapper.findOperatorsByCriteria(queryPage, queryWrapper);
return operators.getRecords();
}
@Override
public Integer countOperatorsByCriteria(String operatorName, List<Integer> categories, Boolean isStar) {
QueryWrapper<OperatorView> queryWrapper = Wrappers.query();
queryWrapper.in(CollectionUtils.isNotEmpty(categories),"category_id", categories)
.like(StringUtils.isNotBlank(operatorName), "operator_name", operatorName)
.eq(isStar != null, "is_star", isStar);
return mapper.countOperatorsByCriteria(queryWrapper);
}
@Override
public OperatorView findOperatorById(String id) {
return mapper.findOperatorById(id);
}
}

View File

@@ -1,12 +1,9 @@
package com.datamate.operator.infrastructure.persistence.mapper;
import com.datamate.operator.domain.modal.Category;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.datamate.operator.domain.model.Category;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface CategoryMapper {
List<Category> findAllCategories();
public interface CategoryMapper extends BaseMapper<Category> {
}

View File

@@ -1,18 +1,9 @@
package com.datamate.operator.infrastructure.persistence.mapper;
import com.datamate.operator.domain.modal.CategoryRelation;
import com.datamate.operator.domain.modal.RelationCategoryDTO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.datamate.operator.domain.model.CategoryRelation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface CategoryRelationMapper {
List<RelationCategoryDTO> findAllRelationWithCategory();
List<CategoryRelation> findAllRelation();
void batchInsert(@Param("operatorId") String operatorId, @Param("categories") List<Integer> categories);
public interface CategoryRelationMapper extends BaseMapper<CategoryRelation> {
}

View File

@@ -1,27 +1,9 @@
package com.datamate.operator.infrastructure.persistence.mapper;
import com.datamate.operator.domain.modal.Operator;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.datamate.operator.domain.model.Operator;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface OperatorMapper {
List<Operator> findAllOperators();
List<Operator> findOperatorsByCriteria(@Param("size") Integer size, @Param("offset") Integer offset,
@Param("operatorName") String operatorName,
@Param("categories") List<Integer> categories,
@Param("isStar") Boolean isStar);
Integer countOperatorsByCriteria(@Param("operatorName") String operatorName,
@Param("categories") List<Integer> categories,
@Param("isStar") Boolean isStar);
Operator findOperatorById(@Param("id") String id);
void updateOperator(Operator operator);
void insertOperator(Operator operator);
public interface OperatorMapper extends BaseMapper<Operator> {
}

View File

@@ -0,0 +1,30 @@
package com.datamate.operator.infrastructure.persistence.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.datamate.operator.domain.model.OperatorView;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface OperatorViewMapper extends BaseMapper<OperatorView> {
@Select("SELECT operator_id AS id, operator_name AS name, description, version, inputs, outputs, runtime, " +
"settings, is_star, created_at, updated_at, " +
"GROUP_CONCAT(category_id ORDER BY created_at DESC SEPARATOR ',') AS categories " +
"FROM v_operator ${ew.customSqlSegment}")
IPage<OperatorView> findOperatorsByCriteria(IPage<OperatorView> page,
@Param(Constants.WRAPPER) Wrapper<OperatorView> queryWrapper);
@Select("SELECT COUNT(DISTINCT operator_id) AS count FROM v_operator ${ew.customSqlSegment}")
Integer countOperatorsByCriteria(@Param(Constants.WRAPPER) Wrapper<OperatorView> queryWrapper);
@Select("SELECT operator_id AS id, operator_name AS name, description, version, inputs, outputs, runtime, " +
"settings, is_star, created_at, updated_at, " +
"GROUP_CONCAT(category_id ORDER BY created_at DESC SEPARATOR ',') AS categories " +
"FROM v_operator WHERE operator_id = #{id}")
OperatorView findOperatorById(@Param("id") String id);
}

View File

@@ -1,14 +1,16 @@
package com.datamate.operator.domain.modal;
package com.datamate.operator.interfaces.dto;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class Category {
public class CategoryDto {
private Integer id;
private String name;
private String type;
private Integer parentId;
}

View File

@@ -1,11 +1,11 @@
package com.datamate.operator.domain.modal;
package com.datamate.operator.interfaces.dto;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class CategoryRelation {
public class CategoryRelationDto {
private Integer categoryId;
private String operatorId;

View File

@@ -1,36 +0,0 @@
package com.datamate.operator.interfaces.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* CreateOperatorRequest
*/
@Getter
@Setter
public class CreateOperatorRequest {
private String id;
private String name;
private String description;
private String version;
private String inputs;
private String outputs;
private List<Integer> categories;
private String runtime;
private String settings;
private String fileName;
}

View File

@@ -8,12 +8,12 @@ import java.time.LocalDateTime;
import java.util.List;
/**
* OperatorResponse
* OperatorDto
*/
@Getter
@Setter
public class OperatorResponse {
public class OperatorDto {
private String id;
private String name;
@@ -32,6 +32,8 @@ public class OperatorResponse {
private String settings;
private String fileName;
private Boolean isStar;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)

View File

@@ -1,32 +0,0 @@
package com.datamate.operator.interfaces.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* UpdateOperatorRequest
*/
@Getter
@Setter
public class UpdateOperatorRequest {
private String name;
private String description;
private String version;
private String inputs;
private String outputs;
private List<Integer> categories;
private String runtime;
private String settings;
}

View File

@@ -1,4 +1,4 @@
package com.datamate.operator.interfaces.api;
package com.datamate.operator.interfaces.rest;
import com.datamate.common.infrastructure.common.Response;
import com.datamate.common.interfaces.PagedResponse;

View File

@@ -1,9 +1,9 @@
package com.datamate.operator.interfaces.api;
package com.datamate.operator.interfaces.rest;
import com.datamate.common.infrastructure.common.Response;
import com.datamate.common.interfaces.PagedResponse;
import com.datamate.operator.application.LabelService;
import com.datamate.operator.interfaces.dto.Label;
import com.datamate.operator.interfaces.dto.LabelDto;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@@ -17,7 +17,7 @@ public class LabelController {
private final LabelService labelService;
@GetMapping
public ResponseEntity<Response<PagedResponse<Label>>> labelsGet(@RequestParam("page") Integer page,
public ResponseEntity<Response<PagedResponse<LabelDto>>> labelsGet(@RequestParam("page") Integer page,
@RequestParam("size") Integer size,
@RequestParam("keyword") String keyword) {
return ResponseEntity.ok(Response.ok(PagedResponse.of(labelService.getLabels(page, size, keyword))));
@@ -25,13 +25,13 @@ public class LabelController {
@PutMapping("/{id}")
public ResponseEntity<Response<Object>> labelsIdPut(@PathVariable("id") String id,
@RequestBody List<Label> updateLabelRequest) {
labelService.updateLabel(id, updateLabelRequest);
@RequestBody List<LabelDto> updateLabelDtoRequest) {
labelService.updateLabel(id, updateLabelDtoRequest);
return ResponseEntity.ok(Response.ok(null));
}
@PostMapping
public ResponseEntity<Response<Object>> labelsPost(@RequestBody Label labelsPostRequest) {
public ResponseEntity<Response<Object>> labelsPost(@RequestBody LabelDto labelsPostRequest) {
labelService.createLabels(labelsPostRequest);
return ResponseEntity.ok(Response.ok(null));
}

View File

@@ -1,12 +1,10 @@
package com.datamate.operator.interfaces.api;
package com.datamate.operator.interfaces.rest;
import com.datamate.common.infrastructure.common.Response;
import com.datamate.common.interfaces.PagedResponse;
import com.datamate.operator.application.OperatorService;
import com.datamate.operator.interfaces.dto.CreateOperatorRequest;
import com.datamate.operator.interfaces.dto.OperatorResponse;
import com.datamate.operator.interfaces.dto.OperatorDto;
import com.datamate.operator.interfaces.dto.OperatorsListPostRequest;
import com.datamate.operator.interfaces.dto.UpdateOperatorRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@@ -21,8 +19,8 @@ public class OperatorController {
private final OperatorService operatorService;
@PostMapping("/list")
public ResponseEntity<Response<PagedResponse<OperatorResponse>>> operatorsListPost(@RequestBody OperatorsListPostRequest request) {
List<OperatorResponse> responses = operatorService.getOperators(request.getPage(), request.getSize(),
public ResponseEntity<Response<PagedResponse<OperatorDto>>> operatorsListPost(@RequestBody OperatorsListPostRequest request) {
List<OperatorDto> responses = operatorService.getOperators(request.getPage(), request.getSize(),
request.getCategories(), request.getOperatorName(), request.getIsStar());
int count = operatorService.getOperatorsCount(request.getCategories(), request.getOperatorName(),
request.getIsStar());
@@ -31,23 +29,23 @@ public class OperatorController {
}
@GetMapping("/{id}")
public ResponseEntity<Response<OperatorResponse>> operatorsIdGet(@PathVariable("id") String id) {
public ResponseEntity<Response<OperatorDto>> operatorsIdGet(@PathVariable("id") String id) {
return ResponseEntity.ok(Response.ok(operatorService.getOperatorById(id)));
}
@PutMapping("/{id}")
public ResponseEntity<Response<OperatorResponse>> operatorsIdPut(@PathVariable("id") String id,
@RequestBody UpdateOperatorRequest updateOperatorRequest) {
public ResponseEntity<Response<OperatorDto>> operatorsIdPut(@PathVariable("id") String id,
@RequestBody OperatorDto updateOperatorRequest) {
return ResponseEntity.ok(Response.ok(operatorService.updateOperator(id, updateOperatorRequest)));
}
@PostMapping("/create")
public ResponseEntity<Response<OperatorResponse>> operatorsCreatePost(@RequestBody CreateOperatorRequest createOperatorRequest) {
public ResponseEntity<Response<OperatorDto>> operatorsCreatePost(@RequestBody OperatorDto createOperatorRequest) {
return ResponseEntity.ok(Response.ok(operatorService.createOperator(createOperatorRequest)));
}
@PostMapping("/upload")
public ResponseEntity<Response<OperatorResponse>> operatorsUploadPost(@RequestPart(value = "file") MultipartFile file,
public ResponseEntity<Response<OperatorDto>> operatorsUploadPost(@RequestPart(value = "file") MultipartFile file,
@RequestParam(value = "description") String description) {
return ResponseEntity.ok(Response.ok(operatorService.uploadOperator(file, description)));
}

View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.datamate.operator.infrastructure.persistence.mapper.CategoryMapper">
<select id="findAllCategories" resultType="com.datamate.operator.domain.modal.Category">
SELECT * FROM t_operator_category
</select>
</mapper>

View File

@@ -1,24 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.datamate.operator.infrastructure.persistence.mapper.CategoryRelationMapper">
<select id="findAllRelationWithCategory" resultType="com.datamate.operator.domain.modal.RelationCategoryDTO">
SELECT tc.id AS id, tcr.operator_id AS operatorId, tc.name AS name, tc.parent_id AS parentId
FROM t_operator_category_relation tcr
LEFT JOIN t_operator_category tc ON tcr.category_id = tc.id
</select>
<select id="findAllRelation" resultType="com.datamate.operator.domain.modal.CategoryRelation">
SELECT category_id, operator_id FROM t_operator_category_relation
</select>
<insert id="batchInsert" parameterType="java.util.List">
INSERT INTO t_operator_category_relation (operator_id, category_id)
VALUES
<foreach collection="categories" item="categoryId" separator=",">
(#{operatorId}, #{categoryId})
</foreach>
</insert>
</mapper>

View File

@@ -1,96 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.datamate.operator.infrastructure.persistence.mapper.OperatorMapper">
<select id="findAllOperators" resultType="com.datamate.operator.domain.modal.Operator">
SELECT id, name, description, version, inputs, outputs, runtime, settings, is_star, created_at, updated_at FROM
t_operator
</select>
<select id="findOperatorsByCriteria" parameterType="map" resultType="com.datamate.operator.domain.modal.Operator">
SELECT operator_id as id, operator_name as name, description, version, inputs, outputs, runtime, settings,
is_star, created_at, updated_at, GROUP_CONCAT(category_id ORDER BY created_at DESC SEPARATOR ',') AS categories
FROM v_operator
<where>
<if test="operatorName != null and operatorName != ''">
AND operator_name LIKE CONCAT('%', #{operatorName}, '%')
</if>
<if test="categories != null and !categories.isEmpty()">
AND category_id IN
<foreach collection="categories" item="category" open="(" separator="," close=")">
#{category}
</foreach>
</if>
<if test="isStar != null">
AND is_star = #{isStar}
</if>
</where>
GROUP BY operator_id
<if test="size != null and offset != null">
LIMIT ${size} OFFSET ${offset}
</if>
</select>
<select id="countOperatorsByCriteria" parameterType="map">
SELECT COUNT(DISTINCT operator_id) AS count
FROM v_operator
<where>
<if test="operatorName != null and operatorName != ''">
AND operator_name LIKE CONCAT('%', #{operatorName}, '%')
</if>
<if test="categories != null and !categories.isEmpty()">
AND category_id IN
<foreach collection="categories" item="category" open="(" separator="," close=")">
#{category}
</foreach>
</if>
<if test="isStar != null">
AND is_star = #{isStar}
</if>
</where>
</select>
<select id="findOperatorById" parameterType="string" resultType="com.datamate.operator.domain.modal.Operator">
SELECT operator_id as id, operator_name as name, description, version, inputs, outputs, runtime, settings,
is_star, created_at, updated_at, GROUP_CONCAT(category_id ORDER BY created_at DESC SEPARATOR ',') AS categories
FROM v_operator
WHERE operator_id = #{id}
</select>
<insert id="insertOperator" parameterType="com.datamate.operator.domain.modal.Operator">
INSERT INTO t_operator (id, name, description, version, inputs, outputs, runtime, settings, is_star, created_at, updated_at)
VALUES (#{id}, #{name}, #{description}, #{version}, #{inputs}, #{outputs}, #{runtime}, #{settings}, #{isStar}, NOW(), NOW())
</insert>
<update id="updateOperator" parameterType="com.datamate.operator.domain.modal.Operator">
UPDATE t_operator
<set>
<if test="name != null and name != ''">
name = #{name},
</if>
<if test="description != null and description != ''">
description = #{description},
</if>
<if test="version != null and version != ''">
version = #{version},
</if>
<if test="inputs != null and inputs != ''">
inputs = #{inputs},
</if>
<if test="outputs != null and outputs != ''">
outputs = #{outputs},
</if>
<if test="runtime != null and runtime != ''">
runtime = #{runtime},
</if>
<if test="settings != null and settings != ''">
settings = #{settings},
</if>
<if test="isStar != null">
is_star = #{isStar},
</if>
updated_at = NOW()
</set>
WHERE id = #{id}
</update>
</mapper>