feat(regions): trigger project move with job (#4010)
This commit is contained in:
@@ -2,24 +2,13 @@ import { db } from '@/db/knex'
|
||||
import { Resolvers } from '@/modules/core/graph/generated/graphql'
|
||||
import { getWorkspacePlanFactory } from '@/modules/gatekeeper/repositories/billing'
|
||||
import { canWorkspaceUseRegionsFactory } from '@/modules/gatekeeper/services/featureAuthorization'
|
||||
import { getDb, getProjectDbClient } from '@/modules/multiregion/utils/dbSelector'
|
||||
import { getDb } from '@/modules/multiregion/utils/dbSelector'
|
||||
import { getRegionsFactory } from '@/modules/multiregion/repositories'
|
||||
import { authorizeResolver } from '@/modules/shared'
|
||||
import {
|
||||
getDefaultRegionFactory,
|
||||
upsertRegionAssignmentFactory
|
||||
} from '@/modules/workspaces/repositories/regions'
|
||||
import {
|
||||
copyProjectAutomationsFactory,
|
||||
copyProjectCommentsFactory,
|
||||
copyProjectBlobs,
|
||||
copyProjectModelsFactory,
|
||||
copyProjectObjectsFactory,
|
||||
copyProjectsFactory,
|
||||
copyProjectVersionsFactory,
|
||||
copyProjectWebhooksFactory,
|
||||
copyWorkspaceFactory
|
||||
} from '@/modules/workspaces/repositories/projectRegions'
|
||||
import {
|
||||
getWorkspaceFactory,
|
||||
upsertWorkspaceFactory
|
||||
@@ -28,32 +17,10 @@ import {
|
||||
assignWorkspaceRegionFactory,
|
||||
getAvailableRegionsFactory
|
||||
} from '@/modules/workspaces/services/regions'
|
||||
import {
|
||||
updateProjectRegionFactory,
|
||||
validateProjectRegionCopyFactory
|
||||
} from '@/modules/workspaces/services/projectRegions'
|
||||
import { Roles } from '@speckle/shared'
|
||||
import { getProjectFactory } from '@/modules/core/repositories/projects'
|
||||
import { getStreamBranchCountFactory } from '@/modules/core/repositories/branches'
|
||||
import { getStreamCommitCountFactory } from '@/modules/core/repositories/commits'
|
||||
import { withTransaction } from '@/modules/shared/helpers/dbHelper'
|
||||
import { getStreamObjectCountFactory } from '@/modules/core/repositories/objects'
|
||||
import { getProjectAutomationsTotalCountFactory } from '@/modules/automate/repositories/automations'
|
||||
import { getFeatureFlags, isTestEnv } from '@/modules/shared/helpers/envHelper'
|
||||
import { WorkspacesNotYetImplementedError } from '@/modules/workspaces/errors/workspace'
|
||||
import { getStreamCommentCountFactory } from '@/modules/comments/repositories/comments'
|
||||
import { getStreamWebhooksFactory } from '@/modules/webhooks/repositories/webhooks'
|
||||
import {
|
||||
getProjectObjectStorage,
|
||||
getRegionObjectStorage
|
||||
} from '@/modules/multiregion/utils/blobStorageSelector'
|
||||
import { updateProjectRegionKeyFactory } from '@/modules/multiregion/services/projectRegion'
|
||||
import {
|
||||
deleteRegionKeyFromCacheFactory,
|
||||
upsertProjectRegionKeyFactory
|
||||
} from '@/modules/multiregion/repositories/projectRegion'
|
||||
import { getGenericRedis } from '@/modules/shared/redis/redis'
|
||||
import { getEventBus } from '@/modules/shared/services/eventBus'
|
||||
import { scheduleJob } from '@/modules/multiregion/services/queue'
|
||||
|
||||
const { FF_MOVE_PROJECT_REGION_ENABLED } = getFeatureFlags()
|
||||
|
||||
@@ -105,57 +72,13 @@ export default {
|
||||
context.resourceAccessRules
|
||||
)
|
||||
|
||||
const sourceDb = await getProjectDbClient({ projectId: args.projectId })
|
||||
const sourceObjectStorage = await getProjectObjectStorage({
|
||||
projectId: args.projectId
|
||||
return await scheduleJob({
|
||||
type: 'move-project-region',
|
||||
payload: {
|
||||
projectId: args.projectId,
|
||||
regionKey: args.regionKey
|
||||
}
|
||||
})
|
||||
const targetDb = await (await getDb({ regionKey: args.regionKey })).transaction()
|
||||
const targetObjectStorage = await getRegionObjectStorage({
|
||||
regionKey: args.regionKey
|
||||
})
|
||||
|
||||
const updateProjectRegion = updateProjectRegionFactory({
|
||||
getProject: getProjectFactory({ db: sourceDb }),
|
||||
getAvailableRegions: getAvailableRegionsFactory({
|
||||
getRegions: getRegionsFactory({ db }),
|
||||
canWorkspaceUseRegions: canWorkspaceUseRegionsFactory({
|
||||
getWorkspacePlan: getWorkspacePlanFactory({ db })
|
||||
})
|
||||
}),
|
||||
copyWorkspace: copyWorkspaceFactory({ sourceDb, targetDb }),
|
||||
copyProjects: copyProjectsFactory({ sourceDb, targetDb }),
|
||||
copyProjectModels: copyProjectModelsFactory({ sourceDb, targetDb }),
|
||||
copyProjectVersions: copyProjectVersionsFactory({ sourceDb, targetDb }),
|
||||
copyProjectObjects: copyProjectObjectsFactory({ sourceDb, targetDb }),
|
||||
copyProjectAutomations: copyProjectAutomationsFactory({ sourceDb, targetDb }),
|
||||
copyProjectComments: copyProjectCommentsFactory({ sourceDb, targetDb }),
|
||||
copyProjectWebhooks: copyProjectWebhooksFactory({ sourceDb, targetDb }),
|
||||
copyProjectBlobs: copyProjectBlobs({
|
||||
sourceDb,
|
||||
sourceObjectStorage,
|
||||
targetDb,
|
||||
targetObjectStorage
|
||||
}),
|
||||
validateProjectRegionCopy: validateProjectRegionCopyFactory({
|
||||
countProjectModels: getStreamBranchCountFactory({ db: sourceDb }),
|
||||
countProjectVersions: getStreamCommitCountFactory({ db: sourceDb }),
|
||||
countProjectObjects: getStreamObjectCountFactory({ db: sourceDb }),
|
||||
countProjectAutomations: getProjectAutomationsTotalCountFactory({
|
||||
db: sourceDb
|
||||
}),
|
||||
countProjectComments: getStreamCommentCountFactory({ db: sourceDb }),
|
||||
getProjectWebhooks: getStreamWebhooksFactory({ db: sourceDb })
|
||||
}),
|
||||
updateProjectRegionKey: updateProjectRegionKeyFactory({
|
||||
upsertProjectRegionKey: upsertProjectRegionKeyFactory({ db }),
|
||||
cacheDeleteRegionKey: deleteRegionKeyFromCacheFactory({
|
||||
redis: getGenericRedis()
|
||||
}),
|
||||
emitEvent: getEventBus().emit
|
||||
})
|
||||
})
|
||||
|
||||
return await withTransaction(updateProjectRegion(args), targetDb)
|
||||
}
|
||||
}
|
||||
} as Resolvers
|
||||
|
||||
Reference in New Issue
Block a user