support mock data (#67)

* feat:support generate mock sql

* feat: update frontend resources

* feat: update readme

* fix: check failed
This commit is contained in:
vran
2022-04-06 19:21:12 +08:00
committed by GitHub
parent 30765be4d4
commit e4428a3890
117 changed files with 2501 additions and 258 deletions

View File

@@ -0,0 +1,12 @@
package com.databasir.dao.converter;
import com.databasir.dao.enums.MockDataType;
import org.jooq.impl.EnumConverter;
public class MockDataTypeConverter extends EnumConverter<String, MockDataType> {
public MockDataTypeConverter() {
super(String.class, MockDataType.class);
}
}

View File

@@ -0,0 +1,25 @@
package com.databasir.dao.enums;
import java.util.List;
public enum MockDataType {
// java faker supported type
PHONE,
EMAIL,
FULL_NAME,
FULL_ADDRESS,
AVATAR_URL,
UUID,
// databasir custom type
SCRIPT,
CONSTANT,
REF,
AUTO,
;
public static List<MockDataType> fakerTypes() {
return List.of(PHONE, EMAIL, FULL_NAME, FULL_ADDRESS, AVATAR_URL, UUID);
}
}

View File

@@ -0,0 +1,61 @@
package com.databasir.dao.impl;
import com.databasir.dao.tables.pojos.MockDataRulePojo;
import com.databasir.dao.tables.records.MockDataRuleRecord;
import lombok.Getter;
import org.jooq.DSLContext;
import org.jooq.InsertReturningStep;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import static com.databasir.dao.Tables.MOCK_DATA_RULE;
@Repository
public class MockDataRuleDao extends BaseDao<MockDataRulePojo> {
@Autowired
@Getter
private DSLContext dslContext;
public MockDataRuleDao() {
super(MOCK_DATA_RULE, MockDataRulePojo.class);
}
public List<MockDataRulePojo> selectByProjectId(Integer projectId) {
return this.getDslContext()
.selectFrom(MOCK_DATA_RULE)
.where(MOCK_DATA_RULE.PROJECT_ID.eq(projectId))
.fetchInto(MockDataRulePojo.class);
}
public List<MockDataRulePojo> selectByProjectIdAndTableName(Integer projectId, String tableName) {
return this.getDslContext()
.selectFrom(MOCK_DATA_RULE)
.where(MOCK_DATA_RULE.PROJECT_ID.eq(projectId)
.and(MOCK_DATA_RULE.TABLE_NAME.eq(tableName)))
.fetchInto(MockDataRulePojo.class);
}
public void batchSave(Collection<MockDataRulePojo> data) {
if (data == null || data.isEmpty()) {
return;
}
List<InsertReturningStep<MockDataRuleRecord>> query = data.stream()
.map(pojo -> getDslContext()
.insertInto(MOCK_DATA_RULE)
.set(getDslContext().newRecord(MOCK_DATA_RULE, pojo))
.onDuplicateKeyUpdate()
.set(MOCK_DATA_RULE.MOCK_DATA_TYPE, pojo.getMockDataType())
.set(MOCK_DATA_RULE.MOCK_DATA_SCRIPT, pojo.getMockDataScript())
.set(MOCK_DATA_RULE.DEPENDENT_COLUMN_NAME, pojo.getDependentColumnName())
.set(MOCK_DATA_RULE.DEPENDENT_TABLE_NAME, pojo.getDependentTableName())
)
.collect(Collectors.toList());
getDslContext().batch(query).execute();
}
}

View File

@@ -40,4 +40,17 @@ public class TableColumnDocumentDao extends BaseDao<TableColumnDocumentPojo> {
.and(TABLE_COLUMN_DOCUMENT.TABLE_DOCUMENT_ID.in(tableIdIn)))
.fetchInto(TableColumnDocumentPojo.class);
}
public List<TableColumnDocumentPojo> selectByTableDocumentId(Integer tableDocumentId) {
return getDslContext()
.selectFrom(TABLE_COLUMN_DOCUMENT)
.where(TABLE_COLUMN_DOCUMENT.TABLE_DOCUMENT_ID.eq(tableDocumentId))
.fetchInto(TableColumnDocumentPojo.class);
}
public boolean exists(Integer tableDocumentId, String columnName) {
return getDslContext()
.fetchExists(TABLE_COLUMN_DOCUMENT, TABLE_COLUMN_DOCUMENT.TABLE_DOCUMENT_ID.eq(tableDocumentId)
.and(TABLE_COLUMN_DOCUMENT.NAME.eq(columnName)));
}
}

View File

@@ -1,5 +1,6 @@
package com.databasir.dao.impl;
import com.databasir.dao.tables.pojos.TableColumnDocumentPojo;
import com.databasir.dao.tables.pojos.TableDocumentPojo;
import lombok.Getter;
import org.jooq.DSLContext;
@@ -8,6 +9,7 @@ import org.springframework.stereotype.Repository;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import static com.databasir.dao.Tables.TABLE_DOCUMENT;
@@ -29,12 +31,6 @@ public class TableDocumentDao extends BaseDao<TableDocumentPojo> {
.fetchInto(TableDocumentPojo.class);
}
public void deleteByDatabaseDocumentId(Integer schemaDocumentId) {
getDslContext()
.deleteFrom(TABLE_DOCUMENT).where(TABLE_DOCUMENT.DATABASE_DOCUMENT_ID.eq(schemaDocumentId))
.execute();
}
public List<TableDocumentPojo> selectByDatabaseDocumentIdAndIdIn(Integer databaseDocumentId,
List<Integer> idList) {
if (idList == null || idList.isEmpty()) {
@@ -46,4 +42,22 @@ public class TableDocumentDao extends BaseDao<TableDocumentPojo> {
.and(TABLE_DOCUMENT.ID.in(idList)))
.fetchInto(TableDocumentPojo.class);
}
public Optional<TableColumnDocumentPojo> selectByDatabaseDocumentIdAndTableName(Integer databaseDocumentId,
String tableName) {
return getDslContext()
.select(TABLE_DOCUMENT.fields()).from(TABLE_DOCUMENT)
.where(TABLE_DOCUMENT.DATABASE_DOCUMENT_ID.eq(databaseDocumentId)
.and(TABLE_DOCUMENT.NAME.eq(tableName)))
.fetchOptionalInto(TableColumnDocumentPojo.class);
}
public Optional<TableDocumentPojo> selectByDatabaseDocumentIdAndId(Integer databaseDocumentId,
Integer id) {
return getDslContext()
.selectFrom(TABLE_DOCUMENT)
.where(TABLE_DOCUMENT.DATABASE_DOCUMENT_ID.eq(databaseDocumentId)
.and(TABLE_DOCUMENT.ID.eq(id)))
.fetchOptionalInto(TableDocumentPojo.class);
}
}

View File

@@ -0,0 +1,18 @@
CREATE TABLE IF NOT EXISTS mock_data_rule
(
`id` INT PRIMARY KEY AUTO_INCREMENT,
`project_id` INT NOT NULL,
`table_name` VARCHAR(255) NOT NULL,
`column_name` VARCHAR(255) NOT NULL,
`dependent_table_name` VARCHAR(255) DEFAULT NULL,
`dependent_column_name` VARCHAR(255) DEFAULT NULL,
`mock_data_type` VARCHAR(255) NOT NULL DEFAULT 'AUTO / REF / SCRIPT / PHONE / DATE / TIMESTAMP / ...',
`mock_data_script` TEXT DEFAULT NULL,
`update_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`create_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT UNIQUE uk_project_id_table_name_column_name (project_id, table_name, column_name)
) CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci;
ALTER TABLE databasir.table_column_document
ADD COLUMN data_type INT NOT NULL DEFAULT 99999 AFTER type;