Skip to content

Commit

Permalink
Add command to backfill new onboarding user vars (#6526)
Browse files Browse the repository at this point in the history
As per our guideline to maintain a smooth migration to the new minor
versions, this command is backfilling existing workspaces with the 3
userVars used to keep track of user onboarding:
```
  ONBOARDING_CONNECT_ACCOUNT_COMPLETE = 'ONBOARDING_CONNECT_ACCOUNT_COMPLETE',
  ONBOARDING_INVITE_TEAM_COMPLETE = 'ONBOARDING_INVITE_TEAM_COMPLETE',
  ONBOARDING_CREATE_PROFILE_COMPLETE = 'ONBOARDING_CREATE_PROFILE_COMPLETE',
```
  • Loading branch information
charlesBochet authored Aug 3, 2024
1 parent 7cd5427 commit 76185c2
Show file tree
Hide file tree
Showing 9 changed files with 116 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import { Logger } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';

import chalk from 'chalk';
import { Command, CommandRunner, Option } from 'nest-commander';
import { Repository } from 'typeorm';

import { UpdateFileFolderStructureCommand } from 'src/database/commands/upgrade-version/0-23/0-23-update-file-folder-structure.command';
import { OnboardingService } from 'src/engine/core-modules/onboarding/onboarding.service';
import {
Workspace,
WorkspaceActivationStatus,
} from 'src/engine/core-modules/workspace/workspace.entity';

interface BackfillNewOnboardingUserVarsCommandOptions {
workspaceId?: string;
}

@Command({
name: 'upgrade-0.23:backfill-new-onboarding-user-vars',
description: 'Backfill new onboarding user vars for existing workspaces',
})
export class BackfillNewOnboardingUserVarsCommand extends CommandRunner {
private readonly logger = new Logger(UpdateFileFolderStructureCommand.name);
constructor(
@InjectRepository(Workspace, 'core')
private readonly workspaceRepository: Repository<Workspace>,
private readonly onboardingService: OnboardingService,
) {
super();
}

@Option({
flags: '-w, --workspace-id [workspace_id]',
description: 'workspace id. Command runs on all workspaces if not provided',
required: false,
})
parseWorkspaceId(value: string): string {
return value;
}

async run(
_passedParam: string[],
options: BackfillNewOnboardingUserVarsCommandOptions,
): Promise<void> {
let workspaces;

if (options.workspaceId) {
workspaces = await this.workspaceRepository.find({
where: {
activationStatus: WorkspaceActivationStatus.ACTIVE,
id: options.workspaceId,
},
relations: ['users'],
});
} else {
workspaces = await this.workspaceRepository.find({
where: { activationStatus: WorkspaceActivationStatus.ACTIVE },
relations: ['users'],
});
}

if (!workspaces.length) {
this.logger.log(chalk.yellow('No workspace found'));

return;
}

this.logger.log(
chalk.green(`Running command on ${workspaces.length} workspaces`),
);

for (const workspace of workspaces) {
this.logger.log(
chalk.green(`Running command on workspace ${workspace.id}`),
);

await this.onboardingService.toggleOnboardingInviteTeamCompletion({
workspaceId: workspace.id,
value: true,
});

for (const user of workspace.users) {
await this.onboardingService.toggleOnboardingConnectAccountCompletion({
userId: user.id,
workspaceId: workspace.id,
value: true,
});

await this.onboardingService.toggleOnboardingCreateProfileCompletion({
userId: user.id,
workspaceId: workspace.id,
value: true,
});
}
}

this.logger.log(chalk.green(`Command completed!`));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ interface MigrateDomainNameFromTextToLinksCommandOptions {
}

@Command({
name: 'migrate-0.23:migrate-domain-standard-field-to-links',
name: 'upgrade-0.23:migrate-domain-standard-field-to-links',
description:
'Migrating field domainName of deprecated type TEXT to type LINKS',
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ interface MigrateLinkFieldsToLinksCommandOptions {
}

@Command({
name: 'migrate-0.23:migrate-link-fields-to-links',
name: 'upgrade-0.23:migrate-link-fields-to-links',
description: 'Migrating fields of deprecated type LINK to type LINKS',
})
export class MigrateLinkFieldsToLinksCommand extends CommandRunner {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ interface MigrateMessageChannelSyncStatusEnumCommandOptions {
}

@Command({
name: 'migrate-0.23:update-message-channel-sync-status-enum',
name: 'upgrade-0.23:update-message-channel-sync-status-enum',
description: 'Migrate messageChannel syncStatus enum',
})
export class MigrateMessageChannelSyncStatusEnumCommand extends CommandRunner {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ interface SetWorkspaceActivationStatusCommandOptions {
}

@Command({
name: 'migrate-0.23:set-workspace-activation-status',
name: 'upgrade-0.23:set-workspace-activation-status',
description: 'Set workspace activation status',
})
export class SetWorkspaceActivationStatusCommand extends CommandRunner {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ type CoreLogicFunction = (params: {
}) => Promise<void>;

@Command({
name: 'migrate-0.23:update-activities-type',
name: 'upgrade-0.23:update-activities-type',
description: 'Migrate Activity object to Note and Task objects',
})
export class UpdateActivitiesCommand extends CommandRunner {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Command, CommandRunner, Option } from 'nest-commander';

import { BackfillNewOnboardingUserVarsCommand } from 'src/database/commands/upgrade-version/0-23/0-23-backfill-new-onboarding-user-vars';
import { MigrateDomainNameFromTextToLinksCommand } from 'src/database/commands/upgrade-version/0-23/0-23-migrate-domain-to-links.command';
import { MigrateLinkFieldsToLinksCommand } from 'src/database/commands/upgrade-version/0-23/0-23-migrate-link-fields-to-links.command';
import { MigrateMessageChannelSyncStatusEnumCommand } from 'src/database/commands/upgrade-version/0-23/0-23-migrate-message-channel-sync-status-enum.command';
Expand All @@ -23,6 +24,7 @@ export class UpgradeTo0_23Command extends CommandRunner {
private readonly migrateMessageChannelSyncStatusEnumCommand: MigrateMessageChannelSyncStatusEnumCommand,
private readonly setWorkspaceActivationStatusCommand: SetWorkspaceActivationStatusCommand,
private readonly updateActivitiesCommand: UpdateActivitiesCommand,
private readonly backfillNewOnboardingUserVarsCommand: BackfillNewOnboardingUserVarsCommand,
) {
super();
}
Expand Down Expand Up @@ -53,5 +55,6 @@ export class UpgradeTo0_23Command extends CommandRunner {
options,
);
await this.updateActivitiesCommand.run(_passedParam, options);
await this.backfillNewOnboardingUserVarsCommand.run(_passedParam, options);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

import { BackfillNewOnboardingUserVarsCommand } from 'src/database/commands/upgrade-version/0-23/0-23-backfill-new-onboarding-user-vars';
import { MigrateDomainNameFromTextToLinksCommand } from 'src/database/commands/upgrade-version/0-23/0-23-migrate-domain-to-links.command';
import { MigrateLinkFieldsToLinksCommand } from 'src/database/commands/upgrade-version/0-23/0-23-migrate-link-fields-to-links.command';
import { MigrateMessageChannelSyncStatusEnumCommand } from 'src/database/commands/upgrade-version/0-23/0-23-migrate-message-channel-sync-status-enum.command';
Expand All @@ -10,6 +11,7 @@ import { UpdateFileFolderStructureCommand } from 'src/database/commands/upgrade-
import { UpgradeTo0_23Command } from 'src/database/commands/upgrade-version/0-23/0-23-upgrade-version.command';
import { TypeORMModule } from 'src/database/typeorm/typeorm.module';
import { BillingModule } from 'src/engine/core-modules/billing/billing.module';
import { OnboardingModule } from 'src/engine/core-modules/onboarding/onboarding.module';
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
import { FileStorageModule } from 'src/engine/integrations/file-storage/file-storage.module';
import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module';
Expand All @@ -25,6 +27,7 @@ import { ViewModule } from 'src/modules/view/view.module';
imports: [
TypeOrmModule.forFeature([Workspace], 'core'),
FileStorageModule,
OnboardingModule,
TypeORMModule,
DataSourceModule,
WorkspaceCacheVersionModule,
Expand All @@ -46,6 +49,7 @@ import { ViewModule } from 'src/modules/view/view.module';
MigrateMessageChannelSyncStatusEnumCommand,
SetWorkspaceActivationStatusCommand,
UpdateActivitiesCommand,
BackfillNewOnboardingUserVarsCommand,
UpgradeTo0_23Command,
],
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

import { DataSeedDemoWorkspaceModule } from 'src/database/commands/data-seed-demo-workspace/data-seed-demo-workspace.module';
import { BackfillNewOnboardingUserVarsCommand } from 'src/database/commands/upgrade-version/0-23/0-23-backfill-new-onboarding-user-vars';
import { MigrateDomainNameFromTextToLinksCommand } from 'src/database/commands/upgrade-version/0-23/0-23-migrate-domain-to-links.command';
import { MigrateLinkFieldsToLinksCommand } from 'src/database/commands/upgrade-version/0-23/0-23-migrate-link-fields-to-links.command';
import { MigrateMessageChannelSyncStatusEnumCommand } from 'src/database/commands/upgrade-version/0-23/0-23-migrate-message-channel-sync-status-enum.command';
Expand All @@ -12,6 +13,7 @@ import { TypeORMModule } from 'src/database/typeorm/typeorm.module';
import { BillingModule } from 'src/engine/core-modules/billing/billing.module';
import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity';
import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { OnboardingModule } from 'src/engine/core-modules/onboarding/onboarding.module';
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module';
import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module';
Expand All @@ -30,6 +32,7 @@ import { ViewModule } from 'src/modules/view/view.module';
imports: [
WorkspaceManagerModule,
DataSourceModule,
OnboardingModule,
TypeORMModule,
TypeOrmModule.forFeature(
[Workspace, BillingSubscription, FeatureFlagEntity],
Expand Down Expand Up @@ -57,6 +60,7 @@ import { ViewModule } from 'src/modules/view/view.module';
MigrateMessageChannelSyncStatusEnumCommand,
SetWorkspaceActivationStatusCommand,
UpdateActivitiesCommand,
BackfillNewOnboardingUserVarsCommand,
],
})
export class UpgradeVersionModule {}

0 comments on commit 76185c2

Please sign in to comment.