Closes #5069 back-end part And: - do not display schemaPendingUpdates status on remote server lists as this call will become too costly if there are dozens of servers - (refacto) create foreignTableService After this is merged we will be able to delete remoteTable's availableTables column
72 lines
1.7 KiB
TypeScript
72 lines
1.7 KiB
TypeScript
import {
|
|
Column,
|
|
CreateDateColumn,
|
|
Entity,
|
|
Generated,
|
|
OneToMany,
|
|
PrimaryGeneratedColumn,
|
|
Relation,
|
|
UpdateDateColumn,
|
|
} from 'typeorm';
|
|
|
|
import { RemoteTableEntity } from 'src/engine/metadata-modules/remote-server/remote-table/remote-table.entity';
|
|
import { UserMappingOptions } from 'src/engine/metadata-modules/remote-server/types/user-mapping-options';
|
|
|
|
export enum RemoteServerType {
|
|
POSTGRES_FDW = 'postgres_fdw',
|
|
STRIPE_FDW = 'stripe_fdw',
|
|
}
|
|
|
|
type PostgresForeignDataWrapperOptions = {
|
|
host: string;
|
|
port: number;
|
|
dbname: string;
|
|
};
|
|
|
|
type StripeForeignDataWrapperOptions = {
|
|
api_key: string;
|
|
};
|
|
|
|
export type ForeignDataWrapperOptions<T extends RemoteServerType> =
|
|
T extends RemoteServerType.POSTGRES_FDW
|
|
? PostgresForeignDataWrapperOptions
|
|
: T extends RemoteServerType.STRIPE_FDW
|
|
? StripeForeignDataWrapperOptions
|
|
: never;
|
|
|
|
@Entity('remoteServer')
|
|
export class RemoteServerEntity<T extends RemoteServerType> {
|
|
@PrimaryGeneratedColumn('uuid')
|
|
id: string;
|
|
|
|
@Column()
|
|
@Generated('uuid')
|
|
foreignDataWrapperId: string;
|
|
|
|
@Column({ type: 'text', nullable: true })
|
|
foreignDataWrapperType: T;
|
|
|
|
@Column({ nullable: true, type: 'jsonb' })
|
|
foreignDataWrapperOptions: ForeignDataWrapperOptions<T>;
|
|
|
|
@Column({ nullable: true, type: 'jsonb' })
|
|
userMappingOptions: UserMappingOptions;
|
|
|
|
@Column({ type: 'text', nullable: true })
|
|
schema: string;
|
|
|
|
@Column({ nullable: false, type: 'uuid' })
|
|
workspaceId: string;
|
|
|
|
@OneToMany(() => RemoteTableEntity, (table) => table.server, {
|
|
cascade: true,
|
|
})
|
|
syncedTables: Relation<RemoteTableEntity[]>;
|
|
|
|
@CreateDateColumn({ type: 'timestamptz' })
|
|
createdAt: Date;
|
|
|
|
@UpdateDateColumn({ type: 'timestamptz' })
|
|
updatedAt: Date;
|
|
}
|