From f208767d7d8bd30d41a3990e66b537db74b72ae1 Mon Sep 17 00:00:00 2001 From: Artem Niehrieiev Date: Wed, 21 Jan 2026 09:35:52 +0000 Subject: [PATCH] Add new fields and enum for table settings: list_fields, list_per_page, ordering, and ordering_field --- .../table-settings.entity.ts | 126 +++++++++++------- ...5763-RestoreFieldsInCommonTableSettings.ts | 23 ++++ .../table-settings.ds.builder.ts | 84 ++++++------ 3 files changed, 145 insertions(+), 88 deletions(-) create mode 100644 backend/src/migrations/1768987695763-RestoreFieldsInCommonTableSettings.ts diff --git a/backend/src/entities/table-settings/common-table-settings/table-settings.entity.ts b/backend/src/entities/table-settings/common-table-settings/table-settings.entity.ts index f1f437864..660631fb1 100644 --- a/backend/src/entities/table-settings/common-table-settings/table-settings.entity.ts +++ b/backend/src/entities/table-settings/common-table-settings/table-settings.entity.ts @@ -4,77 +4,107 @@ import { ConnectionEntity } from '../../connection/connection.entity.js'; import { CustomFieldsEntity } from '../../custom-field/custom-fields.entity.js'; import { TableActionEntity } from '../../table-actions/table-actions-module/table-action.entity.js'; import { TableWidgetEntity } from '../../widget/table-widget.entity.js'; +import { QueryOrderingEnum } from '../../../enums/query-ordering.enum.js'; @Entity('tableSettings') @Unique(['connection_id', 'table_name']) export class TableSettingsEntity { - @PrimaryGeneratedColumn('uuid') - id: string; + @PrimaryGeneratedColumn('uuid') + id: string; - @Column({ default: null }) - table_name: string; + @Column({ default: null }) + table_name: string; - @Column({ default: null }) - display_name: string; + @Column({ default: null }) + display_name: string; - @Column('varchar', { array: true, default: {} }) - search_fields: string[]; + @Column('varchar', { array: true, default: {} }) + search_fields: string[]; - @Column('varchar', { array: true, default: {} }) - excluded_fields: string[]; + @Column('varchar', { array: true, default: {} }) + excluded_fields: string[]; - @Column('varchar', { array: true, default: {} }) - identification_fields: string[]; + @Column('varchar', { array: true, default: {} }) + list_fields: string[]; - @Column({ default: null }) - identity_column: string; + @Column('varchar', { array: true, default: {} }) + identification_fields: string[]; - @Column('varchar', { array: true, default: {} }) - readonly_fields: string[]; + @Column('int', { default: null }) + list_per_page: number; - @Column('varchar', { array: true, default: {} }) - sortable_by: string[]; + @Column('enum', { + nullable: true, + enum: QueryOrderingEnum, + default: null, + }) + ordering!: QueryOrderingEnum; - @Column('varchar', { array: true, default: {} }) - autocomplete_columns: string[]; + @Column('varchar', { default: null }) + ordering_field: string; - @Column('varchar', { array: true, default: null }) - columns_view: string[]; + @Column({ default: null }) + identity_column: string; - @Column({ default: true, type: 'boolean' }) - can_delete: boolean; + @Column('varchar', { array: true, default: {} }) + readonly_fields: string[]; - @Column({ default: true, type: 'boolean' }) - can_update: boolean; + @Column('varchar', { array: true, default: {} }) + sortable_by: string[]; - @Column({ default: true, type: 'boolean' }) - can_add: boolean; + @Column('varchar', { array: true, default: {} }) + autocomplete_columns: string[]; - @Column({ default: true, type: 'boolean' }) - allow_csv_export: boolean; + @Column('varchar', { array: true, default: null }) + columns_view: string[]; - @Column({ default: true, type: 'boolean' }) - allow_csv_import: boolean; + @Column({ default: true, type: 'boolean' }) + can_delete: boolean; - @Column('varchar', { array: true, default: null }) - sensitive_fields: string[]; + @Column({ default: true, type: 'boolean' }) + can_update: boolean; - @Column('varchar', { default: null }) - icon: string; + @Column({ default: true, type: 'boolean' }) + can_add: boolean; - @Transform(({ value: connection }) => connection.id) - @ManyToOne((_) => ConnectionEntity, (connection) => connection.settings, { - onDelete: 'CASCADE', - }) - @JoinColumn() - connection_id: Relation; + @Column({ default: true, type: 'boolean' }) + allow_csv_export: boolean; - @OneToMany((_) => CustomFieldsEntity, (fields) => fields.settings) - custom_fields: Relation[]; + @Column({ default: true, type: 'boolean' }) + allow_csv_import: boolean; - @OneToMany((_) => TableWidgetEntity, (table_widgets) => table_widgets.settings) - table_widgets: Relation[]; + @Column('varchar', { array: true, default: null }) + sensitive_fields: string[]; - @OneToMany((_) => TableActionEntity, (table_actions) => table_actions.settings) - table_actions: Relation[]; + @Column('varchar', { default: null }) + icon: string; + + @Transform(({ value: connection }) => connection.id) + @ManyToOne( + (_) => ConnectionEntity, + (connection) => connection.settings, + { + onDelete: 'CASCADE', + }, + ) + @JoinColumn() + connection_id: Relation; + + @OneToMany( + (_) => CustomFieldsEntity, + (fields) => fields.settings, + ) + custom_fields: Relation[]; + + @OneToMany( + (_) => TableWidgetEntity, + (table_widgets) => table_widgets.settings, + ) + table_widgets: Relation[]; + + @OneToMany( + (_) => TableActionEntity, + (table_actions) => table_actions.settings, + ) + table_actions: Relation[]; } diff --git a/backend/src/migrations/1768987695763-RestoreFieldsInCommonTableSettings.ts b/backend/src/migrations/1768987695763-RestoreFieldsInCommonTableSettings.ts new file mode 100644 index 000000000..eb196fa77 --- /dev/null +++ b/backend/src/migrations/1768987695763-RestoreFieldsInCommonTableSettings.ts @@ -0,0 +1,23 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class RestoreFieldsInCommonTableSettings1768987695763 implements MigrationInterface { + name = 'RestoreFieldsInCommonTableSettings1768987695763'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "tableSettings" ADD "list_fields" character varying array NOT NULL DEFAULT '{}'`, + ); + await queryRunner.query(`ALTER TABLE "tableSettings" ADD "list_per_page" integer`); + await queryRunner.query(`CREATE TYPE "public"."tableSettings_ordering_enum" AS ENUM('ASC', 'DESC')`); + await queryRunner.query(`ALTER TABLE "tableSettings" ADD "ordering" "public"."tableSettings_ordering_enum"`); + await queryRunner.query(`ALTER TABLE "tableSettings" ADD "ordering_field" character varying`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "tableSettings" DROP COLUMN "ordering_field"`); + await queryRunner.query(`ALTER TABLE "tableSettings" DROP COLUMN "ordering"`); + await queryRunner.query(`DROP TYPE "public"."tableSettings_ordering_enum"`); + await queryRunner.query(`ALTER TABLE "tableSettings" DROP COLUMN "list_per_page"`); + await queryRunner.query(`ALTER TABLE "tableSettings" DROP COLUMN "list_fields"`); + } +} diff --git a/shared-code/src/helpers/data-structures-builders/table-settings.ds.builder.ts b/shared-code/src/helpers/data-structures-builders/table-settings.ds.builder.ts index 876feb0b7..659a9be9a 100644 --- a/shared-code/src/helpers/data-structures-builders/table-settings.ds.builder.ts +++ b/shared-code/src/helpers/data-structures-builders/table-settings.ds.builder.ts @@ -2,51 +2,55 @@ import { TableSettingsDS } from '../../data-access-layer/shared/data-structures/ import { QueryOrderingEnum } from '../../shared/enums/query-ordering.enum.js'; type CommonTableSettingsInput = { - table_name: string; - display_name: string; - search_fields: string[]; - excluded_fields: string[]; - identification_fields: string[]; - identity_column: string; - readonly_fields: string[]; - sortable_by: string[]; - autocomplete_columns: string[]; - columns_view: string[]; - can_delete: boolean; - can_update: boolean; - can_add: boolean; - sensitive_fields: string[]; + table_name: string; + display_name: string; + search_fields: string[]; + excluded_fields: string[]; + identification_fields: string[]; + identity_column: string; + readonly_fields: string[]; + sortable_by: string[]; + autocomplete_columns: string[]; + columns_view: string[]; + can_delete: boolean; + can_update: boolean; + can_add: boolean; + sensitive_fields: string[]; + ordering: QueryOrderingEnum; + ordering_field: string; + list_per_page: number; + list_fields: string[]; }; type PersonalTableSettingsInput = { - ordering: QueryOrderingEnum; - ordering_field: string; - list_per_page: number; - list_fields: string[]; + ordering: QueryOrderingEnum; + ordering_field: string; + list_per_page: number; + list_fields: string[]; }; export function buildDAOsTableSettingsDs( - commonTableSettings: CommonTableSettingsInput | null, - personalTableSettings: PersonalTableSettingsInput | null, + commonTableSettings: CommonTableSettingsInput | null, + personalTableSettings: PersonalTableSettingsInput | null, ): TableSettingsDS { - return { - table_name: commonTableSettings?.table_name, - display_name: commonTableSettings?.display_name, - search_fields: commonTableSettings?.search_fields, - excluded_fields: commonTableSettings?.excluded_fields, - list_fields: personalTableSettings?.list_fields || [], - identification_fields: commonTableSettings?.identification_fields, - list_per_page: personalTableSettings?.list_per_page, - ordering: personalTableSettings?.ordering, - ordering_field: personalTableSettings?.ordering_field, - identity_column: commonTableSettings?.identity_column, - readonly_fields: commonTableSettings?.readonly_fields, - sortable_by: commonTableSettings?.sortable_by, - autocomplete_columns: commonTableSettings?.autocomplete_columns, - columns_view: commonTableSettings?.columns_view, - can_delete: commonTableSettings?.can_delete, - can_update: commonTableSettings?.can_update, - can_add: commonTableSettings?.can_add, - sensitive_fields: commonTableSettings?.sensitive_fields, - }; + return { + table_name: commonTableSettings?.table_name, + display_name: commonTableSettings?.display_name, + search_fields: commonTableSettings?.search_fields, + excluded_fields: commonTableSettings?.excluded_fields, + list_fields: personalTableSettings?.list_fields || commonTableSettings?.list_fields || [], + identification_fields: commonTableSettings?.identification_fields, + list_per_page: personalTableSettings?.list_per_page || commonTableSettings?.list_per_page, + ordering: personalTableSettings?.ordering || commonTableSettings?.ordering, + ordering_field: personalTableSettings?.ordering_field || commonTableSettings?.ordering_field, + identity_column: commonTableSettings?.identity_column, + readonly_fields: commonTableSettings?.readonly_fields, + sortable_by: commonTableSettings?.sortable_by, + autocomplete_columns: commonTableSettings?.autocomplete_columns, + columns_view: commonTableSettings?.columns_view, + can_delete: commonTableSettings?.can_delete, + can_update: commonTableSettings?.can_update, + can_add: commonTableSettings?.can_add, + sensitive_fields: commonTableSettings?.sensitive_fields, + }; }