refactor: Migrate CRUD services to use Common API (#16869)

This PR migrates the workflow CRUD services to use the Common API
(CommonQueryRunners) instead of directly accessing TwentyORM.

## Changes

- Created CommonApiContextBuilderService to build context for Common API
- Migrated CreateRecordService to use CommonCreateOneQueryRunnerService
- Migrated UpdateRecordService to use CommonUpdateOneQueryRunnerService
- Migrated DeleteRecordService to use CommonDeleteOneQueryRunnerService
- Migrated FindRecordsService to use CommonFindManyQueryRunnerService
- Migrated UpsertRecordService to use Common API with upsert flag
- Removed unused get-selected-columns-from-restricted-fields.util.ts
- Updated module dependencies

## Benefits

- Consistent permission checking via Common API
- Query hooks (before/after execution)
- Automatic input transformation
- Same behavior as REST/GraphQL APIs
- Reduced code duplication
This commit is contained in:
Félix Malfait
2025-12-31 10:24:50 +01:00
committed by GitHub
parent 009e7e05f2
commit f8fa709abf
39 changed files with 567 additions and 821 deletions
@@ -105,6 +105,7 @@ export class ChatExecutionService {
const toolCatalog = await this.toolRegistry.buildToolIndex(
workspace.id,
roleId,
{ userId, userWorkspaceId },
);
const skillCatalog = this.skillsService.getAllSkills();
@@ -3,7 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm';
import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm';
import { isDefined } from 'twenty-shared/utils';
import { FindOneOptions, Repository } from 'typeorm';
import { type FindOneOptions, type Repository } from 'typeorm';
import { ApplicationService } from 'src/engine/core-modules/application/application.service';
import { type CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input';
@@ -17,7 +17,7 @@ import {
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { fromCreateFieldInputToFlatFieldMetadatasToCreate } from 'src/engine/metadata-modules/flat-field-metadata/utils/from-create-field-input-to-flat-field-metadatas-to-create.util';
import { fromDeleteFieldInputToFlatFieldMetadatasToDelete } from 'src/engine/metadata-modules/flat-field-metadata/utils/from-delete-field-input-to-flat-field-metadatas-to-delete.util';
import { fromUpdateFieldInputToFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/from-update-field-input-to-flat-field-metadata.util';
@@ -7,7 +7,7 @@ import {
ManyToOne,
OneToMany,
PrimaryGeneratedColumn,
Relation,
type Relation,
Unique,
UpdateDateColumn,
} from 'typeorm';
@@ -5,7 +5,7 @@ import {
ManyToOne,
OneToMany,
PrimaryGeneratedColumn,
Relation,
type Relation,
Unique,
UpdateDateColumn,
} from 'typeorm';
@@ -7,7 +7,7 @@ import {
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Relation,
type Relation,
Unique,
UpdateDateColumn,
} from 'typeorm';
@@ -6,7 +6,7 @@ import {
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Relation,
type Relation,
Unique,
UpdateDateColumn,
} from 'typeorm';
@@ -10,7 +10,7 @@ import {
ManyToOne,
OneToMany,
PrimaryGeneratedColumn,
Relation,
type Relation,
UpdateDateColumn,
} from 'typeorm';
@@ -9,7 +9,7 @@ import {
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Relation,
type Relation,
UpdateDateColumn,
} from 'typeorm';
@@ -17,8 +17,8 @@ import { SyncableEntity } from 'src/engine/workspace-manager/workspace-sync/type
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { PageLayoutTabEntity } from 'src/engine/metadata-modules/page-layout-tab/entities/page-layout-tab.entity';
import { WidgetType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-type.enum';
import { AllPageLayoutWidgetConfiguration } from 'src/engine/metadata-modules/page-layout-widget/types/all-page-layout-widget-configuration.type';
import { GridPosition } from 'src/engine/metadata-modules/page-layout-widget/types/grid-position.type';
import { type AllPageLayoutWidgetConfiguration } from 'src/engine/metadata-modules/page-layout-widget/types/all-page-layout-widget-configuration.type';
import { type GridPosition } from 'src/engine/metadata-modules/page-layout-widget/types/grid-position.type';
@Entity({ name: 'pageLayoutWidget', schema: 'core' })
@ObjectType('PageLayoutWidget')
@@ -10,7 +10,7 @@ import {
ManyToOne,
OneToMany,
PrimaryGeneratedColumn,
Relation,
type Relation,
UpdateDateColumn,
} from 'typeorm';
@@ -7,7 +7,7 @@ import {
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Relation,
type Relation,
Unique,
UpdateDateColumn,
} from 'typeorm';
@@ -4,7 +4,7 @@ import {
Entity,
OneToMany,
PrimaryGeneratedColumn,
Relation,
type Relation,
Unique,
UpdateDateColumn,
} from 'typeorm';
@@ -6,7 +6,7 @@ import {
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Relation,
type Relation,
Unique,
UpdateDateColumn,
} from 'typeorm';
@@ -7,7 +7,7 @@ import {
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Relation,
type Relation,
UpdateDateColumn,
} from 'typeorm';
@@ -8,7 +8,7 @@ import {
ManyToOne,
OneToMany,
PrimaryGeneratedColumn,
Relation,
type Relation,
UpdateDateColumn,
} from 'typeorm';
@@ -8,14 +8,14 @@ import {
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Relation,
type Relation,
UpdateDateColumn,
} from 'typeorm';
import { SyncableEntity } from 'src/engine/workspace-manager/workspace-sync/types/syncable-entity.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ViewFilterGroupEntity } from 'src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity';
import { ViewFilterValue } from 'src/engine/metadata-modules/view-filter/types/view-filter-value.type';
import { type ViewFilterValue } from 'src/engine/metadata-modules/view-filter/types/view-filter-value.type';
import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity';
@Entity({ name: 'viewFilter', schema: 'core' })
@@ -7,7 +7,7 @@ import {
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Relation,
type Relation,
UpdateDateColumn,
} from 'typeorm';
@@ -7,7 +7,7 @@ import {
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Relation,
type Relation,
UpdateDateColumn,
} from 'typeorm';
@@ -9,7 +9,7 @@ import {
ManyToOne,
OneToMany,
PrimaryGeneratedColumn,
Relation,
type Relation,
UpdateDateColumn,
} from 'typeorm';