Files
twenty_crm/packages/twenty-server/src/modules/view/services/view.service.ts
Charles Bochet 6c34ef9a14 Simplify ORM (#6373)
This PR refactors the ORM-Manager to simplify and unify the datasource
creation. I'm deprecating all usages if InjectWorkspaceDatasource and
InjectWorkspaceRepository as we can't be sure they are up-to-date
2024-07-23 14:13:16 +02:00

99 lines
2.5 KiB
TypeScript

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';
@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,
'viewField',
);
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,
'viewField',
);
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}`,
);
}
}
}