diff --git a/server/odc-server/src/main/java/com/oceanbase/odc/server/web/controller/v2/DBObjectIndexController.java b/server/odc-server/src/main/java/com/oceanbase/odc/server/web/controller/v2/DBObjectIndexController.java index f8bee1ac36..cc9be553e7 100644 --- a/server/odc-server/src/main/java/com/oceanbase/odc/server/web/controller/v2/DBObjectIndexController.java +++ b/server/odc-server/src/main/java/com/oceanbase/odc/server/web/controller/v2/DBObjectIndexController.java @@ -68,5 +68,12 @@ public SuccessResponse syncDatabaseObjects(@RequestBody SyncDBObjectReq return Responses.success(dbSchemaIndexService.syncDatabaseObjects(req)); } + @ApiOperation(value = "syncCurrentUserDatabaseObjectsWithProject", + notes = "Sync all database objects under the project that the current user is joining") + @RequestMapping(value = "/syncAllWithProject", method = RequestMethod.POST) + public SuccessResponse syncCurrentUserDatabaseObjectsWithProject() { + return Responses.success(dbSchemaIndexService.syncCurrentUserDatabaseObjectsWithProject()); + } + } diff --git a/server/odc-service/src/main/java/com/oceanbase/odc/metadb/connection/DatabaseRepository.java b/server/odc-service/src/main/java/com/oceanbase/odc/metadb/connection/DatabaseRepository.java index 3cb2f93412..86c3da1bc2 100644 --- a/server/odc-service/src/main/java/com/oceanbase/odc/metadb/connection/DatabaseRepository.java +++ b/server/odc-service/src/main/java/com/oceanbase/odc/metadb/connection/DatabaseRepository.java @@ -46,6 +46,9 @@ public interface DatabaseRepository extends JpaRepository, List findByProjectIdAndExisted(Long projectId, Boolean existed); + List findByProjectIdInAndExistedAndObjectSyncStatusNot(Collection projectIds, Boolean existed, + DBObjectSyncStatus dbObjectSyncStatus); + List findByIdIn(Collection ids); List findByNameIn(Collection name); diff --git a/server/odc-service/src/main/java/com/oceanbase/odc/service/connection/database/DatabaseService.java b/server/odc-service/src/main/java/com/oceanbase/odc/service/connection/database/DatabaseService.java index 81243206e2..3ccda1dd65 100644 --- a/server/odc-service/src/main/java/com/oceanbase/odc/service/connection/database/DatabaseService.java +++ b/server/odc-service/src/main/java/com/oceanbase/odc/service/connection/database/DatabaseService.java @@ -459,6 +459,17 @@ public Set listExistDatabasesByProjectId(@NonNull Long projectId) { .map(databaseMapper::entityToModel).collect(Collectors.toSet()); } + @SkipAuthorize("internal usage") + public Set listExistAndNotPendingDatabasesByProjectIdIn(@NonNull Collection projectIds) { + if (CollectionUtils.isEmpty(projectIds)) { + return Collections.emptySet(); + } + return databaseRepository + .findByProjectIdInAndExistedAndObjectSyncStatusNot(projectIds, true, DBObjectSyncStatus.PENDING) + .stream() + .map(databaseMapper::entityToModel).collect(Collectors.toSet()); + } + @SkipAuthorize("internal usage") public Set listDatabaseByNames(@NotEmpty Collection names) { return databaseRepository.findByNameIn(names).stream().map(databaseMapper::entityToModel) diff --git a/server/odc-service/src/main/java/com/oceanbase/odc/service/db/schema/DBSchemaIndexService.java b/server/odc-service/src/main/java/com/oceanbase/odc/service/db/schema/DBSchemaIndexService.java index 772f7a540c..712771a0e8 100644 --- a/server/odc-service/src/main/java/com/oceanbase/odc/service/db/schema/DBSchemaIndexService.java +++ b/server/odc-service/src/main/java/com/oceanbase/odc/service/db/schema/DBSchemaIndexService.java @@ -199,6 +199,18 @@ public QueryDBObjectResp listDatabaseObjects(@NonNull @Valid QueryDBObjectParams return resp; } + public Boolean syncCurrentUserDatabaseObjectsWithProject() { + this.databaseService.refreshExpiredPendingDBObjectStatus(); + long userId = authenticationFacade.currentUserId(); + Set joinedProjectIds = projectService.getMemberProjectIds(userId); + if (CollectionUtils.isEmpty(joinedProjectIds)) { + return true; + } + dbSchemaSyncTaskManager + .submitTaskByDatabases(databaseService.listExistAndNotPendingDatabasesByProjectIdIn(joinedProjectIds)); + return true; + } + public Boolean syncDatabaseObjects(@NonNull @Valid SyncDBObjectReq req) { this.databaseService.refreshExpiredPendingDBObjectStatus(); Set databases = new HashSet<>();