Skip to content

Commit 321b503

Browse files
committed
Add sorter for distant tables
1 parent 4e533bf commit 321b503

File tree

5 files changed

+78
-15
lines changed

5 files changed

+78
-15
lines changed

packages/twenty-server/src/engine/metadata-modules/remote-server/remote-table/distant-table/distant-table.service.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
} from 'src/engine/metadata-modules/remote-server/remote-server.entity';
1111
import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/workspace-datasource.service';
1212
import { DistantTables } from 'src/engine/metadata-modules/remote-server/remote-table/distant-table/types/distant-table';
13-
import { STRIPE_DISTANT_TABLES } from 'src/engine/metadata-modules/remote-server/remote-table/distant-table/util/stripe-distant-tables.util';
13+
import { STRIPE_DISTANT_TABLES } from 'src/engine/metadata-modules/remote-server/remote-table/distant-table/utils/stripe-distant-tables.util';
1414
import { PostgresTableSchemaColumn } from 'src/engine/metadata-modules/remote-server/types/postgres-table-schema-column';
1515

1616
@Injectable()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { RemoteTableStatus } from 'src/engine/metadata-modules/remote-server/remote-table/dtos/remote-table.dto';
2+
import { distantTablesSorter } from 'src/engine/metadata-modules/remote-server/remote-table/distant-table/utils/sort-distant-tables.util';
3+
4+
const table1 = {
5+
status: RemoteTableStatus.SYNCED,
6+
name: 'table1',
7+
};
8+
9+
const table2 = {
10+
status: RemoteTableStatus.NOT_SYNCED,
11+
name: 'table2',
12+
};
13+
14+
describe('distantTablesSorter', () => {
15+
it('should return -1 when first param status is SYNCED and second param status is NOT_SYNCED', () => {
16+
const result = distantTablesSorter(table1, table2);
17+
18+
expect(result).toBe(-1);
19+
});
20+
21+
it('should return 1 when first param status is NOT_SYNCED and second param status is SYNCED', () => {
22+
const result = distantTablesSorter(table2, table1);
23+
24+
expect(result).toBe(1);
25+
});
26+
27+
it('should return -1 when same status and first param name is smaller than second param name', () => {
28+
const result = distantTablesSorter(
29+
{ ...table1, status: RemoteTableStatus.NOT_SYNCED },
30+
table2,
31+
);
32+
33+
expect(result).toBe(-1);
34+
});
35+
36+
it('should return 1 when same status and second param name is smaller than first param name', () => {
37+
const result = distantTablesSorter(table2, {
38+
...table1,
39+
status: RemoteTableStatus.NOT_SYNCED,
40+
});
41+
42+
expect(result).toBe(1);
43+
});
44+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { RemoteTableStatus } from 'src/engine/metadata-modules/remote-server/remote-table/dtos/remote-table.dto';
2+
3+
export const sortDistantTables = (table1, table2) => {
4+
if (
5+
table1.status === RemoteTableStatus.SYNCED &&
6+
table2.status === RemoteTableStatus.NOT_SYNCED
7+
) {
8+
return -1;
9+
}
10+
11+
if (
12+
table1.status === RemoteTableStatus.NOT_SYNCED &&
13+
table2.status === RemoteTableStatus.SYNCED
14+
) {
15+
return 1;
16+
}
17+
18+
return table1.name > table2.name ? 1 : -1;
19+
};

packages/twenty-server/src/engine/metadata-modules/remote-server/remote-table/remote-table.service.ts

+14-14
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import { PostgresTableSchemaColumn } from 'src/engine/metadata-modules/remote-se
3131
import { fetchTableColumns } from 'src/engine/metadata-modules/remote-server/remote-table/utils/fetch-table-columns.util';
3232
import { ForeignTableService } from 'src/engine/metadata-modules/remote-server/remote-table/foreign-table/foreign-table.service';
3333
import { RemoteTableSchemaUpdateService } from 'src/engine/metadata-modules/remote-server/remote-table/remote-table-schema-update/remote-table-schema-update.service';
34+
import { sortDistantTables } from 'src/engine/metadata-modules/remote-server/remote-table/distant-table/utils/sort-distant-tables.util';
3435

3536
export class RemoteTableService {
3637
private readonly logger = new Logger(RemoteTableService.name);
@@ -82,26 +83,25 @@ export class RemoteTableService {
8283
workspaceId,
8384
);
8485

85-
if (currentRemoteTables.length === 0 || !shouldFetchPendingSchemaUpdates) {
86-
const distantTablesWithStatus = Object.keys(distantTables).map(
87-
(tableName) => ({
86+
const shouldGetTablesWithPendingSchemaUpdates =
87+
currentRemoteTables.length > 0 && shouldFetchPendingSchemaUpdates;
88+
89+
const distantTablesWithStatus = shouldGetTablesWithPendingSchemaUpdates
90+
? await this.remoteTableSchemaUpdateService.getDistantTablesWithUpdates({
91+
remoteServerSchema: remoteServer.schema,
92+
workspaceId,
93+
remoteTables: currentRemoteTables,
94+
distantTables,
95+
})
96+
: Object.keys(distantTables).map((tableName) => ({
8897
name: tableName,
8998
schema: remoteServer.schema,
9099
status: currentRemoteTableDistantNames.includes(tableName)
91100
? RemoteTableStatus.SYNCED
92101
: RemoteTableStatus.NOT_SYNCED,
93-
}),
94-
);
102+
}));
95103

96-
return distantTablesWithStatus;
97-
}
98-
99-
return this.remoteTableSchemaUpdateService.getDistantTablesWithUpdates({
100-
remoteServerSchema: remoteServer.schema,
101-
workspaceId,
102-
remoteTables: currentRemoteTables,
103-
distantTables,
104-
});
104+
return distantTablesWithStatus.sort(sortDistantTables);
105105
}
106106

107107
public async findRemoteTablesByServerId({

0 commit comments

Comments
 (0)