You've already forked DataMate
refactor: update service and repository structure to use DTOs and improve clarity
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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: 批量创建标签
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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> {
|
||||
}
|
||||
|
||||
@@ -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> {
|
||||
}
|
||||
|
||||
@@ -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> {
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class Label {
|
||||
public class LabelDto {
|
||||
|
||||
private String id;
|
||||
|
||||
@@ -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)
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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));
|
||||
}
|
||||
@@ -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)));
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user