Migrate fields of deprecated type LINK to type LINKS (#6332)
Closes #5909. Adding a command to migrate fields of type Link to fields of type Links, including their data.
This commit is contained in:
@ -0,0 +1,99 @@
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
|
||||
import { isDefined } from 'class-validator';
|
||||
import isEmpty from 'lodash.isempty';
|
||||
|
||||
import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager';
|
||||
import { ViewFieldWorkspaceEntity } from 'src/modules/view/standard-objects/view-field.workspace-entity';
|
||||
|
||||
@Injectable()
|
||||
export class ViewService {
|
||||
private readonly logger = new Logger(ViewService.name);
|
||||
constructor(
|
||||
private readonly twentyORMGlobalManager: TwentyORMGlobalManager,
|
||||
) {}
|
||||
|
||||
async addFieldToViews({
|
||||
workspaceId,
|
||||
fieldId,
|
||||
viewsIds,
|
||||
positions,
|
||||
}: {
|
||||
workspaceId: string;
|
||||
fieldId: string;
|
||||
viewsIds: string[];
|
||||
positions?: {
|
||||
[key: string]: number;
|
||||
}[];
|
||||
}) {
|
||||
const viewFieldRepository =
|
||||
await this.twentyORMGlobalManager.getRepositoryForWorkspace(
|
||||
workspaceId,
|
||||
ViewFieldWorkspaceEntity,
|
||||
);
|
||||
|
||||
for (const viewId of viewsIds) {
|
||||
const position = positions?.[viewId];
|
||||
const newFieldInThisView = await viewFieldRepository.findBy({
|
||||
fieldMetadataId: fieldId,
|
||||
viewId: viewId as string,
|
||||
isVisible: true,
|
||||
});
|
||||
|
||||
if (!isEmpty(newFieldInThisView)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
this.logger.log(
|
||||
`Adding new field ${fieldId} to view ${viewId} for workspace ${workspaceId}...`,
|
||||
);
|
||||
const newViewField = viewFieldRepository.create({
|
||||
viewId: viewId,
|
||||
fieldMetadataId: fieldId,
|
||||
isVisible: true,
|
||||
...(isDefined(position) && { position: position }),
|
||||
});
|
||||
|
||||
await viewFieldRepository.save(newViewField);
|
||||
this.logger.log(
|
||||
`New field successfully added to view ${viewId} for workspace ${workspaceId}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async removeFieldFromViews({
|
||||
workspaceId,
|
||||
fieldId,
|
||||
}: {
|
||||
workspaceId: string;
|
||||
fieldId: string;
|
||||
}) {
|
||||
const viewFieldRepository =
|
||||
await this.twentyORMGlobalManager.getRepositoryForWorkspace(
|
||||
workspaceId,
|
||||
ViewFieldWorkspaceEntity,
|
||||
);
|
||||
const viewsWithField = await viewFieldRepository.find({
|
||||
where: {
|
||||
fieldMetadataId: fieldId,
|
||||
isVisible: true,
|
||||
},
|
||||
});
|
||||
|
||||
for (const viewWithField of viewsWithField) {
|
||||
const viewId = viewWithField.viewId;
|
||||
|
||||
this.logger.log(
|
||||
`Removing field ${fieldId} from view ${viewId} for workspace ${workspaceId}...`,
|
||||
);
|
||||
await viewFieldRepository.delete({
|
||||
viewId: viewWithField.viewId as string,
|
||||
fieldMetadataId: fieldId,
|
||||
});
|
||||
|
||||
this.logger.log(
|
||||
`Field ${fieldId} successfully removed from view ${viewId} for workspace ${workspaceId}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
10
packages/twenty-server/src/modules/view/view.module.ts
Normal file
10
packages/twenty-server/src/modules/view/view.module.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
|
||||
import { ViewService } from 'src/modules/view/services/view.service';
|
||||
|
||||
@Module({
|
||||
imports: [],
|
||||
providers: [ViewService],
|
||||
exports: [ViewService],
|
||||
})
|
||||
export class ViewModule {}
|
||||
Reference in New Issue
Block a user