Setup relations for remote objects (#5149)
New strategy: - add settings field on FieldMetadata. Contains a boolean isIdField and for numbers, a precision - if idField, the graphql scalar returned will be a GraphQL id. This will allow the app to work even for ids that are not uuid - remove globals dateScalar and numberScalar modes. These were not used - set limit as Integer - check manually in query runner mutations that we send a valid id Todo left: - remove WorkspaceBuildSchemaOptions since this is not used anymore. Will do in another PR --------- Co-authored-by: Thomas Trompette <thomast@twenty.com> Co-authored-by: Weiko <corentin@twenty.com>
This commit is contained in:
@ -1,5 +1,7 @@
|
||||
import { Repository } from 'typeorm/repository/Repository';
|
||||
|
||||
import { FieldMetadataSettings } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface';
|
||||
|
||||
import { decryptText } from 'src/engine/core-modules/auth/auth.util';
|
||||
import {
|
||||
FeatureFlagEntity,
|
||||
@ -42,11 +44,32 @@ export const mapUdtNameToFieldType = (udtName: string): FieldMetadataType => {
|
||||
case 'timestamp':
|
||||
case 'timestamptz':
|
||||
return FieldMetadataType.DATE_TIME;
|
||||
case 'integer':
|
||||
case 'int2':
|
||||
case 'int4':
|
||||
case 'int8':
|
||||
return FieldMetadataType.NUMBER;
|
||||
default:
|
||||
return FieldMetadataType.TEXT;
|
||||
}
|
||||
};
|
||||
|
||||
export const mapUdtNameToSettings = (
|
||||
udtName: string,
|
||||
): FieldMetadataSettings<FieldMetadataType> | undefined => {
|
||||
switch (udtName) {
|
||||
case 'integer':
|
||||
case 'int2':
|
||||
case 'int4':
|
||||
case 'int8':
|
||||
return {
|
||||
precision: 0,
|
||||
} satisfies FieldMetadataSettings<FieldMetadataType.NUMBER>;
|
||||
default:
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
export const isPostgreSQLIntegrationEnabled = async (
|
||||
featureFlagRepository: Repository<FeatureFlagEntity>,
|
||||
workspaceId: string,
|
||||
|
||||
@ -12,6 +12,7 @@ import { RemoteTableStatus } from 'src/engine/metadata-modules/remote-server/rem
|
||||
import {
|
||||
isPostgreSQLIntegrationEnabled,
|
||||
mapUdtNameToFieldType,
|
||||
mapUdtNameToSettings,
|
||||
} from 'src/engine/metadata-modules/remote-server/remote-table/remote-postgres-table/utils/remote-postgres-table.util';
|
||||
import { RemoteTableInput } from 'src/engine/metadata-modules/remote-server/remote-table/dtos/remote-table-input';
|
||||
import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service';
|
||||
@ -429,7 +430,11 @@ export class RemoteTableService {
|
||||
workspaceId: workspaceId,
|
||||
icon: 'IconPlug',
|
||||
isRemote: true,
|
||||
remoteTablePrimaryKeyColumnType: remoteTableIdColumn.udtName,
|
||||
primaryKeyColumnType: remoteTableIdColumn.udtName,
|
||||
// TODO: function should work for other types than Postgres
|
||||
primaryKeyFieldMetadataSettings: mapUdtNameToSettings(
|
||||
remoteTableIdColumn.udtName,
|
||||
),
|
||||
} satisfies CreateObjectInput);
|
||||
|
||||
for (const column of remoteTableColumns) {
|
||||
@ -444,6 +449,8 @@ export class RemoteTableService {
|
||||
isRemoteCreation: true,
|
||||
isNullable: true,
|
||||
icon: 'IconPlug',
|
||||
// TODO: function should work for other types than Postgres
|
||||
settings: mapUdtNameToSettings(column.udtName),
|
||||
} satisfies CreateFieldInput);
|
||||
|
||||
if (column.columnName === 'id') {
|
||||
|
||||
Reference in New Issue
Block a user