399c998fd7
* feat(multiregion): replace user replication * chore(multiregion): optimise replication * maybe it's this * postgres is fun * once more * chore(multiregion): only replicate test user creation during multiregion tests * feat: improved replicate_query logic * fix: minor * fix: starting issue * feat: included user create and delete specs to multiregion * feat: removed console logs * fix: user defaults * fix: multiregion test helper * fix: update scenarios for users * refactor(multiregion): swap replicateQuery concept to asMultiregionOperation (#5301) feat(multiregion): introduced asMultregionOperator, refactor test to user builder classes * chore: renamings * fix: remove comments * feat: remove user replication * refactor: simplified spec usages * chore: comments * chore: branches and favs * chore: more tests * chore: more tests * fix linting * fix tests * feat: dropping replication * refactor: moved project delete to service * fix: comment * feat: updateStreamFactory and updateProjectFacotry * deleteProjectFactory + replicateFactory * deleteWorkspaceFactory * fix: selector * fix: tests * fix tests, finished createStreamFactory * feat: simplify changes * fix: remove comment * fix: minor strucutres * fix: moveProjectToRegion * fix: moved branch creation outside of multiregion scope * fix: branch creation * fix: tests * fix: ci tests * fix: removed log form test * fix: on specs, no random regionKeys * review fixes * fix: mr comments * feat: removed test --------- Co-authored-by: Charles Driesler <chuck@speckle.systems>
89 lines
3.2 KiB
TypeScript
89 lines
3.2 KiB
TypeScript
import { cliLogger as logger } from '@/observability/logging'
|
|
import {
|
|
getBatchedStreamCommentsFactory,
|
|
getCommentLinksFactory,
|
|
insertCommentLinksFactory,
|
|
insertCommentsFactory
|
|
} from '@/modules/comments/repositories/comments'
|
|
import {
|
|
getBatchedStreamBranchesFactory,
|
|
insertBranchesFactory
|
|
} from '@/modules/core/repositories/branches'
|
|
import {
|
|
getBatchedBranchCommitsFactory,
|
|
getBatchedStreamCommitsFactory,
|
|
insertBranchCommitsFactory,
|
|
insertCommitsFactory,
|
|
insertStreamCommitsFactory
|
|
} from '@/modules/core/repositories/commits'
|
|
import {
|
|
createStreamFactory,
|
|
getStreamFactory
|
|
} from '@/modules/core/repositories/streams'
|
|
import { getUserFactory } from '@/modules/core/repositories/users'
|
|
import { cloneStreamFactory } from '@/modules/core/services/streams/clone'
|
|
import type { CommandModule } from 'yargs'
|
|
import { asMultiregionalOperation, replicateFactory } from '@/modules/shared/command'
|
|
import { storeProjectRoleFactory } from '@/modules/core/repositories/projects'
|
|
import { db } from '@/db/knex'
|
|
|
|
const command: CommandModule<
|
|
unknown,
|
|
{ sourceStreamId: string; targetUserId: string }
|
|
> = {
|
|
command: 'clone <sourceStreamId> <targetUserId>',
|
|
describe: 'Clone a source stream to the account of the target user',
|
|
builder: {
|
|
sourceStreamId: {
|
|
describe: 'ID of the stream that will be cloned',
|
|
type: 'string'
|
|
},
|
|
targetUserId: {
|
|
describe: 'ID of the user who will be marked as the author of the cloned stream',
|
|
type: 'string'
|
|
}
|
|
},
|
|
handler: async (argv) => {
|
|
const { sourceStreamId, targetUserId } = argv
|
|
|
|
logger.info(
|
|
`Cloning stream ${sourceStreamId} into the account of user ${targetUserId}...`
|
|
)
|
|
const { id } = await asMultiregionalOperation(
|
|
({ emit, mainDb, allDbs }) => {
|
|
const cloneStream = cloneStreamFactory({
|
|
getStream: getStreamFactory({ db: mainDb }),
|
|
getUser: getUserFactory({ db: mainDb }),
|
|
newProjectDb: mainDb,
|
|
sourceProjectDb: mainDb,
|
|
createStream: replicateFactory(allDbs, createStreamFactory),
|
|
insertCommits: insertCommitsFactory({ db: mainDb }),
|
|
getBatchedStreamCommits: getBatchedStreamCommitsFactory({ db: mainDb }),
|
|
insertStreamCommits: insertStreamCommitsFactory({ db: mainDb }),
|
|
getBatchedStreamBranches: getBatchedStreamBranchesFactory({ db: mainDb }),
|
|
insertBranches: insertBranchesFactory({ db: mainDb }),
|
|
getBatchedBranchCommits: getBatchedBranchCommitsFactory({ db: mainDb }),
|
|
insertBranchCommits: insertBranchCommitsFactory({ db: mainDb }),
|
|
getBatchedStreamComments: getBatchedStreamCommentsFactory({ db: mainDb }),
|
|
insertComments: insertCommentsFactory({ db: mainDb }),
|
|
getCommentLinks: getCommentLinksFactory({ db: mainDb }),
|
|
insertCommentLinks: insertCommentLinksFactory({ db: mainDb }),
|
|
emitEvent: emit,
|
|
storeProjectRole: storeProjectRoleFactory({ db: mainDb })
|
|
})
|
|
|
|
return cloneStream(targetUserId, sourceStreamId)
|
|
},
|
|
{
|
|
name: 'Clone Stream',
|
|
dbs: [db], // Cloning does not support multiregion
|
|
logger
|
|
}
|
|
)
|
|
|
|
logger.info('Cloning successful! New stream ID: ' + id)
|
|
}
|
|
}
|
|
|
|
export = command
|