Rework relations (#3431)

* Rework relations

* Fix tests
This commit is contained in:
Charles Bochet
2024-01-15 12:07:23 +01:00
committed by GitHub
parent 8c96acc2a3
commit 16a24c5f0c
60 changed files with 392 additions and 463 deletions

View File

@ -9,6 +9,7 @@ import { WorkspaceHealthOptions } from 'src/workspace/workspace-health/interface
import { ObjectMetadataEntity } from 'src/metadata/object-metadata/object-metadata.entity';
import { validName } from 'src/workspace/workspace-health/utils/valid-name.util';
import { TypeORMService } from 'src/database/typeorm/typeorm.service';
import { computeObjectTargetTable } from 'src/workspace/utils/compute-object-target-table.util';
@Injectable()
export class ObjectMetadataHealthService {
@ -54,14 +55,17 @@ export class ObjectMetadataHealthService {
// Check if the table exist in database
const tableExist = await mainDataSource.query(
`SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_schema = '${schemaName}' AND table_name = '${objectMetadata.targetTableName}')`,
`SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_schema = '${schemaName}'
AND table_name = '${computeObjectTargetTable(objectMetadata)}')`,
);
if (!tableExist) {
issues.push({
type: WorkspaceHealthIssueType.MISSING_TABLE,
objectMetadata,
message: `Table ${objectMetadata.targetTableName} not found in schema ${schemaName}`,
message: `Table ${computeObjectTargetTable(
objectMetadata,
)} not found in schema ${schemaName}`,
});
return issues;
@ -80,30 +84,13 @@ export class ObjectMetadataHealthService {
): WorkspaceHealthIssue[] {
const issues: WorkspaceHealthIssue[] = [];
if (
objectMetadata.isCustom &&
!objectMetadata.targetTableName.startsWith('_')
) {
issues.push({
type: WorkspaceHealthIssueType.TABLE_NAME_SHOULD_BE_CUSTOM,
objectMetadata,
message: `Table ${objectMetadata.targetTableName} is marked as custom but doesn't start with "_"`,
});
}
if (!objectMetadata.targetTableName) {
issues.push({
type: WorkspaceHealthIssueType.TABLE_TARGET_TABLE_NAME_NOT_VALID,
objectMetadata,
message: `Table ${objectMetadata.targetTableName} doesn't have a valid target table name`,
});
}
if (!objectMetadata.dataSourceId) {
issues.push({
type: WorkspaceHealthIssueType.TABLE_DATA_SOURCE_ID_NOT_VALID,
objectMetadata,
message: `Table ${objectMetadata.targetTableName} doesn't have a data source`,
message: `Table ${computeObjectTargetTable(
objectMetadata,
)} doesn't have a data source`,
});
}
@ -118,7 +105,9 @@ export class ObjectMetadataHealthService {
issues.push({
type: WorkspaceHealthIssueType.TABLE_NAME_NOT_VALID,
objectMetadata,
message: `Table ${objectMetadata.targetTableName} doesn't have a valid name or label`,
message: `Table ${computeObjectTargetTable(
objectMetadata,
)} doesn't have a valid name or label`,
});
}

View File

@ -12,6 +12,7 @@ import { ObjectMetadataService } from 'src/metadata/object-metadata/object-metad
import { WorkspaceDataSourceService } from 'src/workspace/workspace-datasource/workspace-datasource.service';
import { ObjectMetadataHealthService } from 'src/workspace/workspace-health/services/object-metadata-health.service';
import { FieldMetadataHealthService } from 'src/workspace/workspace-health/services/field-metadata-health.service';
import { computeObjectTargetTable } from 'src/workspace/utils/compute-object-target-table.util';
@Injectable()
export class WorkspaceHealthService {
@ -68,7 +69,7 @@ export class WorkspaceHealthService {
// Check fields metadata health
const fieldIssues = await this.fieldMetadataHealthService.healthCheck(
schemaName,
objectMetadata.targetTableName,
computeObjectTargetTable(objectMetadata),
objectMetadata.fields,
options,
);