feat(web): 增加数据资源创建接口
This commit is contained in:
2
.idea/jpa.xml
generated
2
.idea/jpa.xml
generated
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="JpaBuddyIdeaProjectConfig">
|
||||
<component name="JpaBuddyIdeaProjectConfig" newRepositoryParent="com.blinkfox.fenix.jpa.FenixJpaRepository">
|
||||
<option name="defaultUnitInitialized" value="true" />
|
||||
<option name="renamerInitialized" value="true" />
|
||||
</component>
|
||||
|
||||
@@ -191,7 +191,7 @@ export function resourceAddDialog() {
|
||||
{
|
||||
type: 'input-text',
|
||||
label: '文件筛选',
|
||||
name: 'ftpRegex',
|
||||
name: 'ftpRegexFilter',
|
||||
description: '正则表达式,用于匹配文件的路径,只有符合筛选条件的文件才会被采集;若为空则默认采集全部文件',
|
||||
...clearable,
|
||||
},
|
||||
|
||||
@@ -1,9 +1,26 @@
|
||||
package com.eshore.gringotts.web.domain.resource.controller;
|
||||
|
||||
import cn.hutool.core.util.EnumUtil;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.format.CsvResourceFormat;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.format.JsonLineResourceFormat;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.format.JsonResourceFormat;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.format.LineResourceFormat;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.format.NoneResourceFormat;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.format.ResourceFormat;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.type.ApiResourceType;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.type.DatabaseResourceType;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.type.FileResourceType;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.type.FtpResourceType;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.type.HDFSResourceType;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.type.ResourceType;
|
||||
import com.eshore.gringotts.web.domain.resource.service.DataResourceService;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import java.util.Map;
|
||||
import lombok.Data;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
@@ -20,9 +37,59 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
public class DataResourceController {
|
||||
private static final Logger logger = LoggerFactory.getLogger(DataResourceController.class);
|
||||
|
||||
private final ObjectMapper mapper;
|
||||
private final DataResourceService dataResourceService;
|
||||
|
||||
public DataResourceController(Jackson2ObjectMapperBuilder builder, DataResourceService dataResourceService) {
|
||||
this.mapper = builder.build();
|
||||
this.dataResourceService = dataResourceService;
|
||||
}
|
||||
|
||||
@PostMapping("/create")
|
||||
public void create(@RequestBody CreateRequest request) {
|
||||
public void create(@RequestBody CreateRequest request) throws JsonProcessingException {
|
||||
logger.info("Create request: {}", request);
|
||||
ResourceType type = null;
|
||||
switch (request.resourceType) {
|
||||
case "api":
|
||||
type = new ApiResourceType(request.apiUrl, request.apiUsername, request.apiPassword);
|
||||
break;
|
||||
case "file":
|
||||
type = new FileResourceType(request.filePath);
|
||||
break;
|
||||
case "database":
|
||||
type = new DatabaseResourceType(
|
||||
request.databaseJdbc,
|
||||
request.databaseUsername,
|
||||
request.databasePassword,
|
||||
EnumUtil.fromString(DatabaseResourceType.Type.class, request.databaseType)
|
||||
);
|
||||
break;
|
||||
case "hdfs":
|
||||
type = new HDFSResourceType(request.coreSiteFile, request.hdfsSiteFile);
|
||||
break;
|
||||
case "ftp":
|
||||
type = new FtpResourceType(request.ftpUrl, request.ftpUsername, request.ftpPassword, request.ftpPath, request.ftpRegexFilter);
|
||||
break;
|
||||
}
|
||||
ResourceFormat format = null;
|
||||
switch (request.formatType) {
|
||||
case "NONE":
|
||||
format = new NoneResourceFormat();
|
||||
break;
|
||||
case "LINE":
|
||||
format = new LineResourceFormat();
|
||||
break;
|
||||
case "JSON":
|
||||
format = new JsonResourceFormat(mapper.writeValueAsString(request.jsonSchema));
|
||||
break;
|
||||
case "JSON_LINE":
|
||||
format = new JsonLineResourceFormat(mapper.writeValueAsString(request.jsonLineSchema));
|
||||
break;
|
||||
case "CSV":
|
||||
format = new CsvResourceFormat(mapper.writeValueAsString(request.csvSchema));
|
||||
break;
|
||||
}
|
||||
dataResourceService.create(request.name, request.description, format, type);
|
||||
}
|
||||
|
||||
@Data
|
||||
@@ -44,7 +111,7 @@ public class DataResourceController {
|
||||
private String ftpUsername;
|
||||
private String ftpPassword;
|
||||
private String ftpPath;
|
||||
private String ftpRegex;
|
||||
private String ftpRegexFilter;
|
||||
private String formatType;
|
||||
private Map<?, ?> jsonSchema;
|
||||
private Map<?, ?> jsonLineSchema;
|
||||
|
||||
@@ -5,8 +5,9 @@ import com.eshore.gringotts.web.domain.entity.SimpleEntity;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.format.ResourceFormat;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.type.ResourceType;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.EnumType;
|
||||
import javax.persistence.Enumerated;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.OneToOne;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@@ -15,8 +16,6 @@ import org.hibernate.annotations.DynamicUpdate;
|
||||
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.EntityListeners;
|
||||
import javax.persistence.Inheritance;
|
||||
import javax.persistence.InheritanceType;
|
||||
import javax.persistence.Table;
|
||||
|
||||
@Getter
|
||||
|
||||
@@ -2,7 +2,9 @@ package com.eshore.gringotts.web.domain.resource.entity.format;
|
||||
|
||||
import javax.persistence.DiscriminatorValue;
|
||||
import javax.persistence.Entity;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
@@ -15,6 +17,8 @@ import lombok.ToString;
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@DiscriminatorValue("CSV")
|
||||
public class CsvResourceFormat extends ResourceFormat{
|
||||
|
||||
@@ -2,7 +2,9 @@ package com.eshore.gringotts.web.domain.resource.entity.format;
|
||||
|
||||
import javax.persistence.DiscriminatorValue;
|
||||
import javax.persistence.Entity;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
@@ -15,6 +17,8 @@ import lombok.ToString;
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@DiscriminatorValue("JSON_LINE")
|
||||
public class JsonLineResourceFormat extends ResourceFormat{
|
||||
|
||||
@@ -3,7 +3,9 @@ package com.eshore.gringotts.web.domain.resource.entity.format;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.DiscriminatorValue;
|
||||
import javax.persistence.Entity;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
@@ -16,6 +18,8 @@ import lombok.ToString;
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@DiscriminatorValue("JSON")
|
||||
public class JsonResourceFormat extends ResourceFormat{
|
||||
|
||||
@@ -4,13 +4,17 @@ import com.eshore.gringotts.core.Constants;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Table;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name = Constants.TABLE_PREFIX + "resource_type_api")
|
||||
public class ApiResourceType extends ResourceType {
|
||||
|
||||
@@ -6,13 +6,17 @@ import javax.persistence.Entity;
|
||||
import javax.persistence.EnumType;
|
||||
import javax.persistence.Enumerated;
|
||||
import javax.persistence.Table;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name = Constants.TABLE_PREFIX + "resource_type_database")
|
||||
public class DatabaseResourceType extends ResourceType {
|
||||
|
||||
@@ -4,13 +4,17 @@ import com.eshore.gringotts.core.Constants;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Table;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name = Constants.TABLE_PREFIX + "resource_type_file")
|
||||
public class FileResourceType extends ResourceType {
|
||||
|
||||
@@ -4,13 +4,17 @@ import com.eshore.gringotts.core.Constants;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Table;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name = Constants.TABLE_PREFIX + "resource_type_ftp")
|
||||
public class FtpResourceType extends ResourceType {
|
||||
@@ -19,4 +23,5 @@ public class FtpResourceType extends ResourceType {
|
||||
private String username;
|
||||
private String password;
|
||||
private String path;
|
||||
private String regexFilter;
|
||||
}
|
||||
|
||||
@@ -4,13 +4,17 @@ import com.eshore.gringotts.core.Constants;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Table;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name = Constants.TABLE_PREFIX + "resource_type_hdfs")
|
||||
public class HDFSResourceType extends ResourceType {
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.eshore.gringotts.web.domain.resource.repository;
|
||||
|
||||
import com.blinkfox.fenix.jpa.FenixJpaRepository;
|
||||
import com.blinkfox.fenix.specification.FenixJpaSpecificationExecutor;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.DataResource;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface DataResourceRepository extends FenixJpaRepository<DataResource, Long>, FenixJpaSpecificationExecutor<DataResource> {
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.eshore.gringotts.web.domain.resource.repository;
|
||||
|
||||
import com.blinkfox.fenix.jpa.FenixJpaRepository;
|
||||
import com.blinkfox.fenix.specification.FenixJpaSpecificationExecutor;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.format.ResourceFormat;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface ResourceFormatRepository extends FenixJpaRepository<ResourceFormat, Long>, FenixJpaSpecificationExecutor<ResourceFormat> {
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.eshore.gringotts.web.domain.resource.repository;
|
||||
|
||||
import com.blinkfox.fenix.jpa.FenixJpaRepository;
|
||||
import com.blinkfox.fenix.specification.FenixJpaSpecificationExecutor;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.type.ResourceType;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface ResourceTypeRepository extends FenixJpaRepository<ResourceType, Long>, FenixJpaSpecificationExecutor<ResourceType> {
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.eshore.gringotts.web.domain.resource.service;
|
||||
|
||||
import com.eshore.gringotts.web.domain.resource.entity.DataResource;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.format.ResourceFormat;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.type.ResourceType;
|
||||
import com.eshore.gringotts.web.domain.resource.repository.DataResourceRepository;
|
||||
import com.eshore.gringotts.web.domain.resource.repository.ResourceFormatRepository;
|
||||
import com.eshore.gringotts.web.domain.resource.repository.ResourceTypeRepository;
|
||||
import com.eshore.gringotts.web.domain.user.entity.User;
|
||||
import com.eshore.gringotts.web.domain.user.service.UserService;
|
||||
import javax.transaction.Transactional;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 数据资源服务
|
||||
*
|
||||
* @author lanyuanxiaoyao
|
||||
*/
|
||||
@Service
|
||||
public class DataResourceService {
|
||||
private static final Logger log = LoggerFactory.getLogger(DataResourceService.class);
|
||||
|
||||
private final DataResourceRepository dataResourceRepository;
|
||||
private final ResourceTypeRepository resourceTypeRepository;
|
||||
private final ResourceFormatRepository resourceFormatRepository;
|
||||
private final UserService userService;
|
||||
|
||||
public DataResourceService(DataResourceRepository dataResourceRepository, ResourceTypeRepository resourceTypeRepository, ResourceFormatRepository resourceFormatRepository, UserService userService) {
|
||||
this.dataResourceRepository = dataResourceRepository;
|
||||
this.resourceTypeRepository = resourceTypeRepository;
|
||||
this.resourceFormatRepository = resourceFormatRepository;
|
||||
this.userService = userService;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void create(String name, String description, ResourceFormat format, ResourceType type) {
|
||||
resourceFormatRepository.save(format);
|
||||
resourceTypeRepository.save(type);
|
||||
DataResource resource = new DataResource();
|
||||
resource.setName(name);
|
||||
resource.setDescription(description);
|
||||
resource.setFormat(format);
|
||||
resource.setType(type);
|
||||
User user = userService.currentLoginUser();
|
||||
resource.setCreatedUser(user);
|
||||
resource.setModifiedUser(user);
|
||||
dataResourceRepository.save(resource);
|
||||
}
|
||||
}
|
||||
@@ -19,9 +19,4 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
public interface UserRepository extends FenixJpaRepository<User, Long>, FenixJpaSpecificationExecutor<User> {
|
||||
Boolean existsByUsername(String username);
|
||||
Optional<User> findByUsername(String username);
|
||||
|
||||
@Transactional
|
||||
@Modifying
|
||||
@Query("update User u set u.state = ?2 where u.username = ?1")
|
||||
void updateStateByUsername(String username, User.State state);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user