Skip to content

Commit 941ab40

Browse files
authored
Merge pull request #1742 from rocket-admin/backend_table_schema
Backend table schema
2 parents 7179e2e + 288f04b commit 941ab40

76 files changed

Lines changed: 10567 additions & 31 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

backend/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
"langchain": "^1.2.34",
8080
"lru-cache": "^11.2.7",
8181
"nanoid": "5.1.7",
82+
"node-sql-parser": "^5.3.0",
8283
"nodemailer": "^8.0.4",
8384
"nunjucks": "^3.2.4",
8485
"openai": "^6.32.0",

backend/src/ai-core/tools/prompts.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,16 @@ export function convertDbTypeToReadableString(dataType: ConnectionTypesEnum): st
114114
case ConnectionTypesEnum.ibmdb2:
115115
case ConnectionTypesEnum.agent_ibmdb2:
116116
return 'IBM DB2';
117+
case ConnectionTypesEnum.clickhouse:
118+
case ConnectionTypesEnum.agent_clickhouse:
119+
return 'ClickHouse';
120+
case ConnectionTypesEnum.dynamodb:
121+
return 'DynamoDB';
122+
case ConnectionTypesEnum.cassandra:
123+
case ConnectionTypesEnum.agent_cassandra:
124+
return 'Cassandra';
125+
case ConnectionTypesEnum.elasticsearch:
126+
return 'Elasticsearch';
117127
default:
118128
return 'Unknown Database';
119129
}

backend/src/app.module.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { GlobalDatabaseContext } from './common/application/global-database-cont
88
import { BaseType, UseCaseType } from './common/data-injection.tokens.js';
99
import { AIModule } from './entities/ai/ai.module.js';
1010
import { ApiKeyModule } from './entities/api-key/api-key.module.js';
11+
import { CedarAuthorizationModule } from './entities/cedar-authorization/cedar-authorization.module.js';
1112
import { CompanyFaviconModule } from './entities/company-favicon/company-favicon.module.js';
1213
import { CompanyInfoModule } from './entities/company-info/company-info.module.js';
1314
import { CompanyLogoModule } from './entities/company-logo/company-logo.module.js';
@@ -30,17 +31,17 @@ import { TableActionModule } from './entities/table-actions/table-actions-module
3031
import { TableCategoriesModule } from './entities/table-categories/table-categories.module.js';
3132
import { TableFiltersModule } from './entities/table-filters/table-filters.module.js';
3233
import { TableLogsModule } from './entities/table-logs/table-logs.module.js';
34+
import { TableSchemaModule } from './entities/table-schema/table-schema.module.js';
3335
import { TableSettingsModule } from './entities/table-settings/common-table-settings/table-settings.module.js';
3436
import { PersonalTableSettingsModule } from './entities/table-settings/personal-table-settings/personal-table-settings.module.js';
3537
import { UserModule } from './entities/user/user.module.js';
3638
import { UserActionModule } from './entities/user-actions/user-action.module.js';
3739
import { UserSecretModule } from './entities/user-secret/user-secret.module.js';
3840
import { SignInAuditModule } from './entities/user-sign-in-audit/sign-in-audit.module.js';
3941
import { DashboardModule } from './entities/visualizations/dashboard/dashboards.module.js';
40-
import { PanelPositionModule } from './entities/visualizations/panel-position/panel-position.module.js';
4142
import { PanelModule } from './entities/visualizations/panel/panel.module.js';
43+
import { PanelPositionModule } from './entities/visualizations/panel-position/panel-position.module.js';
4244
import { TableWidgetModule } from './entities/widget/table-widget.module.js';
43-
import { CedarAuthorizationModule } from './entities/cedar-authorization/cedar-authorization.module.js';
4445
import { SaaSGatewayModule } from './microservices/gateways/saas-gateway.ts/saas-gateway.module.js';
4546
import { SaasModule } from './microservices/saas-microservice/saas.module.js';
4647
import { AppLoggerMiddleware } from './middlewares/logging-middleware/app-logger-middlewate.js';
@@ -94,6 +95,7 @@ import { GetHelloUseCase } from './use-cases-app/get-hello.use.case.js';
9495
SharedJobsModule,
9596
TableCategoriesModule,
9697
UserSecretModule,
98+
TableSchemaModule,
9799
SignInAuditModule,
98100
PersonalTableSettingsModule,
99101
S3WidgetModule,

backend/src/common/application/global-database-context.interface.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ import { ITableFiltersCustomRepository } from '../../entities/table-filters/repo
3838
import { TableFiltersEntity } from '../../entities/table-filters/table-filters.entity.js';
3939
import { TableInfoEntity } from '../../entities/table-info/table-info.entity.js';
4040
import { ITableLogsRepository } from '../../entities/table-logs/repository/table-logs-repository.interface.js';
41+
import { ITableSchemaChangeRepository } from '../../entities/table-schema/repository/table-schema-change.repository.interface.js';
42+
import { TableSchemaChangeEntity } from '../../entities/table-schema/table-schema-change.entity.js';
4143
import { ITableSettingsRepository } from '../../entities/table-settings/common-table-settings/repository/table-settings.repository.interface.js';
4244
import { TableSettingsEntity } from '../../entities/table-settings/common-table-settings/table-settings.entity.js';
4345
import { PersonalTableSettingsEntity } from '../../entities/table-settings/personal-table-settings/personal-table-settings.entity.js';
@@ -57,10 +59,10 @@ import { ISignInAuditRepository } from '../../entities/user-sign-in-audit/reposi
5759
import { SignInAuditEntity } from '../../entities/user-sign-in-audit/sign-in-audit.entity.js';
5860
import { DashboardEntity } from '../../entities/visualizations/dashboard/dashboard.entity.js';
5961
import { IDashboardRepository } from '../../entities/visualizations/dashboard/repository/dashboard.repository.interface.js';
62+
import { PanelEntity } from '../../entities/visualizations/panel/panel.entity.js';
63+
import { IPanelRepository } from '../../entities/visualizations/panel/repository/saved-db-query.repository.interface.js';
6064
import { PanelPositionEntity } from '../../entities/visualizations/panel-position/panel-position.entity.js';
6165
import { IPanelPositionRepository } from '../../entities/visualizations/panel-position/repository/panel-position.repository.interface.js';
62-
import { IPanelRepository } from '../../entities/visualizations/panel/repository/saved-db-query.repository.interface.js';
63-
import { PanelEntity } from '../../entities/visualizations/panel/panel.entity.js';
6466
import { ITableWidgetsRepository } from '../../entities/widget/repository/table-widgets-repository.interface.js';
6567
import { TableWidgetEntity } from '../../entities/widget/table-widget.entity.js';
6668
import { IDatabaseContext } from '../database-context.interface.js';
@@ -106,4 +108,5 @@ export interface IGlobalDatabaseContext extends IDatabaseContext {
106108
panelPositionRepository: Repository<PanelPositionEntity> & IPanelPositionRepository;
107109
userAiChatRepository: Repository<UserAiChatEntity> & IUserAiChatRepository;
108110
aiChatMessageRepository: Repository<AiChatMessageEntity> & IAiChatMessageRepository;
111+
tableSchemaChangeRepository: Repository<TableSchemaChangeEntity> & ITableSchemaChangeRepository;
109112
}

backend/src/common/application/global-database-context.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ import { TableInfoEntity } from '../../entities/table-info/table-info.entity.js'
6565
import { tableLogsCustomRepositoryExtension } from '../../entities/table-logs/repository/table-logs-custom-repository-extension.js';
6666
import { ITableLogsRepository } from '../../entities/table-logs/repository/table-logs-repository.interface.js';
6767
import { TableLogsEntity } from '../../entities/table-logs/table-logs.entity.js';
68+
import { customTableSchemaChangeRepositoryExtension } from '../../entities/table-schema/repository/custom-table-schema-change-repository-extension.js';
69+
import { ITableSchemaChangeRepository } from '../../entities/table-schema/repository/table-schema-change.repository.interface.js';
70+
import { TableSchemaChangeEntity } from '../../entities/table-schema/table-schema-change.entity.js';
6871
import { ITableSettingsRepository } from '../../entities/table-settings/common-table-settings/repository/table-settings.repository.interface.js';
6972
import { tableSettingsCustomRepositoryExtension } from '../../entities/table-settings/common-table-settings/repository/table-settings-custom-repository-extension.js';
7073
import { TableSettingsEntity } from '../../entities/table-settings/common-table-settings/table-settings.entity.js';
@@ -101,12 +104,12 @@ import { SignInAuditEntity } from '../../entities/user-sign-in-audit/sign-in-aud
101104
import { DashboardEntity } from '../../entities/visualizations/dashboard/dashboard.entity.js';
102105
import { IDashboardRepository } from '../../entities/visualizations/dashboard/repository/dashboard.repository.interface.js';
103106
import { dashboardCustomRepositoryExtension } from '../../entities/visualizations/dashboard/repository/dashboard-custom-repository-extension.js';
107+
import { PanelEntity } from '../../entities/visualizations/panel/panel.entity.js';
108+
import { IPanelRepository } from '../../entities/visualizations/panel/repository/saved-db-query.repository.interface.js';
109+
import { panelCustomRepositoryExtension } from '../../entities/visualizations/panel/repository/saved-db-query-custom-repository-extension.js';
104110
import { PanelPositionEntity } from '../../entities/visualizations/panel-position/panel-position.entity.js';
105111
import { IPanelPositionRepository } from '../../entities/visualizations/panel-position/repository/panel-position.repository.interface.js';
106112
import { panelPositionCustomRepositoryExtension } from '../../entities/visualizations/panel-position/repository/panel-position-custom-repository-extension.js';
107-
import { IPanelRepository } from '../../entities/visualizations/panel/repository/saved-db-query.repository.interface.js';
108-
import { panelCustomRepositoryExtension } from '../../entities/visualizations/panel/repository/saved-db-query-custom-repository-extension.js';
109-
import { PanelEntity } from '../../entities/visualizations/panel/panel.entity.js';
110113
import { tableWidgetsCustomRepositoryExtension } from '../../entities/widget/repository/table-widgets-custom-repsitory-extension.js';
111114
import { ITableWidgetsRepository } from '../../entities/widget/repository/table-widgets-repository.interface.js';
112115
import { TableWidgetEntity } from '../../entities/widget/table-widget.entity.js';
@@ -157,6 +160,7 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
157160
private _panelPositionRepository: Repository<PanelPositionEntity> & IPanelPositionRepository;
158161
private _userAiChatRepository: Repository<UserAiChatEntity> & IUserAiChatRepository;
159162
private _aiChatMessageRepository: Repository<AiChatMessageEntity> & IAiChatMessageRepository;
163+
private _tableSchemaChangeRepository: Repository<TableSchemaChangeEntity> & ITableSchemaChangeRepository;
160164

161165
public constructor(
162166
@Inject(BaseType.DATA_SOURCE)
@@ -264,6 +268,9 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
264268
this._aiChatMessageRepository = this.appDataSource
265269
.getRepository(AiChatMessageEntity)
266270
.extend(aiChatMessageRepositoryExtension);
271+
this._tableSchemaChangeRepository = this.appDataSource
272+
.getRepository(TableSchemaChangeEntity)
273+
.extend(customTableSchemaChangeRepositoryExtension);
267274
}
268275

269276
public get userRepository(): Repository<UserEntity> & IUserRepository {
@@ -428,6 +435,10 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
428435
return this._aiChatMessageRepository;
429436
}
430437

438+
public get tableSchemaChangeRepository(): Repository<TableSchemaChangeEntity> & ITableSchemaChangeRepository {
439+
return this._tableSchemaChangeRepository;
440+
}
441+
431442
public startTransaction(): Promise<void> {
432443
this._queryRunner = this.appDataSource.createQueryRunner();
433444
this._queryRunner.startTransaction();

backend/src/common/data-injection.tokens.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,4 +214,15 @@ export enum UseCaseType {
214214

215215
IS_CONFIGURED = 'IS_CONFIGURED',
216216
CREATE_INITIAL_USER = 'CREATE_INITIAL_USER',
217+
218+
GENERATE_SCHEMA_CHANGE = 'GENERATE_SCHEMA_CHANGE',
219+
APPROVE_SCHEMA_CHANGE = 'APPROVE_SCHEMA_CHANGE',
220+
REJECT_SCHEMA_CHANGE = 'REJECT_SCHEMA_CHANGE',
221+
ROLLBACK_SCHEMA_CHANGE = 'ROLLBACK_SCHEMA_CHANGE',
222+
LIST_SCHEMA_CHANGES = 'LIST_SCHEMA_CHANGES',
223+
GET_SCHEMA_CHANGE = 'GET_SCHEMA_CHANGE',
224+
APPROVE_BATCH_SCHEMA_CHANGE = 'APPROVE_BATCH_SCHEMA_CHANGE',
225+
REJECT_BATCH_SCHEMA_CHANGE = 'REJECT_BATCH_SCHEMA_CHANGE',
226+
ROLLBACK_BATCH_SCHEMA_CHANGE = 'ROLLBACK_BATCH_SCHEMA_CHANGE',
227+
GET_BATCH_SCHEMA_CHANGE = 'GET_BATCH_SCHEMA_CHANGE',
217228
}

backend/src/decorators/slug-uuid.decorator.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ export type SlugUuidParameter =
1515
| 'companyId'
1616
| 'threadId'
1717
| 'filterId'
18-
| 'chatId';
18+
| 'chatId'
19+
| 'changeId'
20+
| 'batchId';
1921
export const SlugUuid = createParamDecorator(
2022
(parameterName: SlugUuidParameter = 'slug', ctx: ExecutionContext): string => {
2123
const request: IRequestWithCognitoInfo = ctx.switchToHttp().getRequest();
@@ -32,6 +34,8 @@ export const SlugUuid = createParamDecorator(
3234
'threadId',
3335
'filterId',
3436
'chatId',
37+
'changeId',
38+
'batchId',
3539
];
3640
if (!availableSlagParameters.includes(parameterName)) {
3741
throw new BadRequestException(Messages.UUID_INVALID);

0 commit comments

Comments
 (0)