Add missing FK on view tables (#14084)

## Context
View tables were missing some FK, we are also introducing delete cascade
on those tables when needed to leverage pg cascade deletion instead of
having to implement it.
Also renaming those classes with Entity suffix to follow repo
guidelines.
This commit is contained in:
Weiko
2025-08-26 18:59:20 +02:00
committed by GitHub
parent 6d4cae973f
commit f06786d603
59 changed files with 1171 additions and 452 deletions
@@ -3,10 +3,10 @@ import { type ViewFilterOperand as SharedViewFilterOperand } from 'twenty-shared
import { type DataSource, type QueryRunner } from 'typeorm';
import { v4 } from 'uuid';
import { ViewField } from 'src/engine/core-modules/view/entities/view-field.entity';
import { ViewFilter } from 'src/engine/core-modules/view/entities/view-filter.entity';
import { ViewGroup } from 'src/engine/core-modules/view/entities/view-group.entity';
import { View } from 'src/engine/core-modules/view/entities/view.entity';
import { ViewFieldEntity } from 'src/engine/core-modules/view/entities/view-field.entity';
import { ViewFilterEntity } from 'src/engine/core-modules/view/entities/view-filter.entity';
import { ViewGroupEntity } from 'src/engine/core-modules/view/entities/view-group.entity';
import { ViewEntity } from 'src/engine/core-modules/view/entities/view.entity';
import { ViewKey } from 'src/engine/core-modules/view/enums/view-key.enum';
import { ViewOpenRecordIn } from 'src/engine/core-modules/view/enums/view-open-record-in';
import { ViewType } from 'src/engine/core-modules/view/enums/view-type.enum';
@@ -30,7 +30,7 @@ export const prefillCoreViews = async (
dataSource: DataSource,
workspaceId: string,
objectMetadataItems: ObjectMetadataEntity[],
): Promise<View[]> => {
): Promise<ViewEntity[]> => {
const views = [
companiesAllView(objectMetadataItems, true),
peopleAllView(objectMetadataItems, true),
@@ -71,13 +71,13 @@ const createCoreViews = async (
queryRunner: QueryRunner,
workspaceId: string,
viewDefinitions: ViewDefinition[],
): Promise<View[]> => {
): Promise<ViewEntity[]> => {
const viewDefinitionsWithId = viewDefinitions.map((viewDefinition) => ({
...viewDefinition,
id: v4(),
}));
const coreViews: Partial<View>[] = viewDefinitionsWithId.map(
const coreViews: Partial<ViewEntity>[] = viewDefinitionsWithId.map(
({
id,
name,
@@ -111,30 +111,30 @@ const createCoreViews = async (
}),
);
const viewRepository = queryRunner.manager.getRepository(View);
const viewRepository = queryRunner.manager.getRepository(ViewEntity);
const createdViews = await viewRepository.save(coreViews);
for (const viewDefinition of viewDefinitionsWithId) {
if (viewDefinition.fields && viewDefinition.fields.length > 0) {
const coreViewFields: Partial<ViewField>[] = viewDefinition.fields.map(
(field) => ({
const coreViewFields: Partial<ViewFieldEntity>[] =
viewDefinition.fields.map((field) => ({
fieldMetadataId: field.fieldMetadataId,
position: field.position,
isVisible: field.isVisible,
size: field.size,
viewId: viewDefinition.id,
workspaceId,
}),
);
}));
const viewFieldRepository = queryRunner.manager.getRepository(ViewField);
const viewFieldRepository =
queryRunner.manager.getRepository(ViewFieldEntity);
await viewFieldRepository.save(coreViewFields);
}
if (viewDefinition.filters && viewDefinition.filters.length > 0) {
const coreViewFilters: Partial<ViewFilter>[] = viewDefinition.filters.map(
(filter) => ({
const coreViewFilters: Partial<ViewFilterEntity>[] =
viewDefinition.filters.map((filter) => ({
fieldMetadataId: filter.fieldMetadataId,
viewId: viewDefinition.id,
operand: convertViewFilterOperandToCoreOperand(
@@ -142,11 +142,10 @@ const createCoreViews = async (
),
value: filter.value,
workspaceId,
}),
);
}));
const viewFilterRepository =
queryRunner.manager.getRepository(ViewFilter);
queryRunner.manager.getRepository(ViewFilterEntity);
await viewFilterRepository.save(coreViewFilters);
}
@@ -156,18 +155,18 @@ const createCoreViews = async (
viewDefinition.groups &&
viewDefinition.groups.length > 0
) {
const coreViewGroups: Partial<ViewGroup>[] = viewDefinition.groups.map(
(group) => ({
const coreViewGroups: Partial<ViewGroupEntity>[] =
viewDefinition.groups.map((group) => ({
fieldMetadataId: group.fieldMetadataId,
isVisible: group.isVisible,
fieldValue: group.fieldValue,
position: group.position,
viewId: viewDefinition.id,
workspaceId,
}),
);
}));
const viewGroupRepository = queryRunner.manager.getRepository(ViewGroup);
const viewGroupRepository =
queryRunner.manager.getRepository(ViewGroupEntity);
await viewGroupRepository.save(coreViewGroups);
}