mirror of
https://github.com/vran-dev/databasir.git
synced 2025-09-21 19:29:23 +08:00
feature:support auto sync project document by cron task (#3)
* feat: auto sync project document by cron task * feat:update README
This commit is contained in:
@@ -2,13 +2,17 @@ package com.databasir.dao.impl;
|
||||
|
||||
import com.databasir.dao.tables.pojos.DatabaseDocumentHistoryPojo;
|
||||
import com.databasir.dao.tables.records.DatabaseDocumentHistoryRecord;
|
||||
import com.databasir.dao.value.DatabaseDocumentVersionPojo;
|
||||
import lombok.Getter;
|
||||
import org.jooq.Condition;
|
||||
import org.jooq.DSLContext;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageImpl;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static com.databasir.dao.Tables.DATABASE_DOCUMENT_HISTORY;
|
||||
@@ -31,8 +35,24 @@ public class DatabaseDocumentHistoryDao extends BaseDao<DatabaseDocumentHistoryR
|
||||
.fetchOptionalInto(DatabaseDocumentHistoryPojo.class);
|
||||
}
|
||||
|
||||
public Page<DatabaseDocumentHistoryPojo> selectPageByDatabaseDocumentId(Pageable request, Integer schemaDocumentId) {
|
||||
return super.selectByPage(request, DATABASE_DOCUMENT_HISTORY.DATABASE_DOCUMENT_ID.eq(schemaDocumentId));
|
||||
public Page<DatabaseDocumentVersionPojo> selectVersionPageByDatabaseDocumentId(Pageable request, Integer schemaDocumentId) {
|
||||
Condition condition = DATABASE_DOCUMENT_HISTORY.DATABASE_DOCUMENT_ID.eq(schemaDocumentId);
|
||||
Integer count = getDslContext()
|
||||
.selectCount().from(DATABASE_DOCUMENT_HISTORY).where(condition)
|
||||
.fetchOne(0, int.class);
|
||||
int total = count == null ? 0 : count;
|
||||
List<DatabaseDocumentVersionPojo> data = getDslContext()
|
||||
.select(
|
||||
DATABASE_DOCUMENT_HISTORY.VERSION,
|
||||
DATABASE_DOCUMENT_HISTORY.DATABASE_DOCUMENT_ID,
|
||||
DATABASE_DOCUMENT_HISTORY.CREATE_AT
|
||||
)
|
||||
.from(DATABASE_DOCUMENT_HISTORY)
|
||||
.where(condition)
|
||||
.orderBy(getSortFields(request.getSort()))
|
||||
.offset(request.getOffset())
|
||||
.limit(request.getPageSize())
|
||||
.fetchInto(DatabaseDocumentVersionPojo.class);
|
||||
return new PageImpl<>(data, request, total);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -9,6 +9,8 @@ import org.jooq.DSLContext;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static com.databasir.dao.Tables.PROJECT_SYNC_RULE;
|
||||
@@ -46,4 +48,51 @@ public class ProjectSyncRuleDao extends BaseDao<ProjectSyncRuleRecord, ProjectSy
|
||||
.update(table).set(record).where(table.PROJECT_ID.eq(rule.getProjectId()))
|
||||
.execute();
|
||||
}
|
||||
|
||||
public void deleteByProjectId(Integer projectId) {
|
||||
getDslContext()
|
||||
.deleteFrom(PROJECT_SYNC_RULE).where(PROJECT_SYNC_RULE.PROJECT_ID.eq(projectId))
|
||||
.execute();
|
||||
}
|
||||
|
||||
public List<ProjectSyncRulePojo> selectInProjectIds(List<Integer> projectIds) {
|
||||
if (projectIds == null || projectIds.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return getDslContext()
|
||||
.selectFrom(PROJECT_SYNC_RULE).where(PROJECT_SYNC_RULE.PROJECT_ID.in(projectIds))
|
||||
.fetchInto(ProjectSyncRulePojo.class);
|
||||
}
|
||||
|
||||
public List<ProjectSyncRulePojo> selectByIsAutoSyncAndProjectIds(boolean isAutoSync, List<Integer> projectIds) {
|
||||
if (projectIds == null || projectIds.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return getDslContext()
|
||||
.selectFrom(PROJECT_SYNC_RULE).where(
|
||||
PROJECT_SYNC_RULE.IS_AUTO_SYNC.eq(isAutoSync)
|
||||
.and(PROJECT_SYNC_RULE.PROJECT_ID.in(projectIds))
|
||||
)
|
||||
.fetchInto(ProjectSyncRulePojo.class);
|
||||
}
|
||||
|
||||
public List<ProjectSyncRulePojo> selectByIsAutoSyncAndNotInProjectIds(boolean isAutoSync, List<Integer> projectIds) {
|
||||
if (projectIds == null || projectIds.isEmpty()) {
|
||||
return getDslContext()
|
||||
.selectFrom(PROJECT_SYNC_RULE)
|
||||
.where(PROJECT_SYNC_RULE.IS_AUTO_SYNC.eq(isAutoSync)
|
||||
.and(PROJECT_SYNC_RULE.PROJECT_ID.notIn(projectIds)))
|
||||
.fetchInto(ProjectSyncRulePojo.class);
|
||||
} else {
|
||||
return getDslContext()
|
||||
.selectFrom(PROJECT_SYNC_RULE).where(PROJECT_SYNC_RULE.IS_AUTO_SYNC.eq(isAutoSync))
|
||||
.fetchInto(ProjectSyncRulePojo.class);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean existsByProjectIdAndCron(int projectId, String cron) {
|
||||
return dslContext.fetchExists(PROJECT_SYNC_RULE,
|
||||
PROJECT_SYNC_RULE.PROJECT_ID.eq(projectId)
|
||||
.and(PROJECT_SYNC_RULE.AUTO_SYNC_CRON.eq(cron)));
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,15 @@
|
||||
package com.databasir.dao.value;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class DatabaseDocumentVersionPojo {
|
||||
|
||||
private Integer databaseDocumentId;
|
||||
|
||||
private Long version;
|
||||
|
||||
private LocalDateTime createAt;
|
||||
}
|
@@ -78,11 +78,13 @@ CREATE TABLE `project`
|
||||
CREATE TABLE `project_sync_rule`
|
||||
(
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
project_id INT NOT NULL,
|
||||
ignore_table_name_regex_array JSON NOT NULL,
|
||||
ignore_column_name_regex_array JSON NOT NULL,
|
||||
update_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
create_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
project_id INT NOT NULL,
|
||||
ignore_table_name_regex_array JSON NOT NULL,
|
||||
ignore_column_name_regex_array JSON NOT NULL,
|
||||
is_auto_sync BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
auto_sync_cron VARCHAR(128) NOT NULL DEFAULT '',
|
||||
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 (project_id)
|
||||
) CHARSET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci;
|
||||
|
Reference in New Issue
Block a user