mirror of
https://github.com/vran-dev/databasir.git
synced 2025-10-29 11:29:19 +08:00
support mock data (#67)
* feat:support generate mock sql * feat: update frontend resources * feat: update readme * fix: check failed
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
25
dao/src/main/java/com/databasir/dao/enums/MockDataType.java
Normal file
25
dao/src/main/java/com/databasir/dao/enums/MockDataType.java
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
18
dao/src/main/resources/db/migration/V1.2__mock_data.sql
Normal file
18
dao/src/main/resources/db/migration/V1.2__mock_data.sql
Normal 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;
|
||||
Reference in New Issue
Block a user