1
0

feat(web): 增加数据资源创建接口

This commit is contained in:
2024-11-21 00:11:53 +08:00
parent ba19775764
commit 6d63c20b7f
17 changed files with 189 additions and 12 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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{

View File

@@ -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{

View File

@@ -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{

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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;
}

View File

@@ -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 {

View File

@@ -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> {
}

View File

@@ -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> {
}

View File

@@ -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> {
}

View File

@@ -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);
}
}

View File

@@ -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);
}