Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
43c980f
moved table settings into separate common settings folder
Artuomka Nov 4, 2025
15d7fc4
Merge branch 'main' into backend_settings_rework
Artuomka Nov 5, 2025
34aedc7
personal table settings (continue)
Artuomka Nov 7, 2025
348fb03
Merge branch 'main' into backend_settings_rework
Artuomka Nov 7, 2025
ae88b3f
personal table settings (continue)
Artuomka Nov 7, 2025
f47fb40
refactor: update FindPersonalTableSettingsUseCase to return empty obj…
Artuomka Nov 7, 2025
c9124a7
refactor: improve personal table settings use cases and add utility f…
Artuomka Nov 10, 2025
8116e3a
fix table settings tests (in progress)
Artuomka Nov 14, 2025
72b8410
Refactor table settings tests to remove redundant parameters
Artuomka Nov 19, 2025
8f859d5
fix: add master password header to personal table settings requests
Artuomka Nov 19, 2025
1f8baf8
refactor: update GetTableRowsUseCase to use builtDAOsTableSettings an…
Artuomka Nov 20, 2025
25bee3a
fix: update expected row IDs in table row tests for consistency
Artuomka Nov 21, 2025
3458cac
Merge branch 'main' into backend_settings_rework
Artuomka Nov 21, 2025
5f6d49f
Merge branch 'main' into backend_settings_rework
Artuomka Nov 24, 2025
d698440
test: update test cases to use serial execution and fix assertions
Artuomka Nov 24, 2025
af48320
Merge branch 'main' into backend_settings_rework
Artuomka Nov 26, 2025
adaf323
Merge branch 'main' into backend_settings_rework
Artuomka Nov 27, 2025
5790488
Merge branch 'main' into backend_settings_rework
Artuomka Nov 28, 2025
084cb4a
Merge branch 'main' into backend_settings_rework
Artuomka Dec 5, 2025
69cb6f3
Refactor ClickHouse E2E tests to include personal table settings upda…
Artuomka Dec 5, 2025
0843a0a
Merge branch 'main' into backend_settings_rework
Artuomka Dec 17, 2025
1903482
fix: update import path for QueryOrderingEnum in table-settings.ds.bu…
Artuomka Dec 17, 2025
18974c3
Merge branch 'main' into backend_settings_rework
Artuomka Jan 5, 2026
3937265
refactor: reorganize imports and add new modules for S3 widget and pe…
Artuomka Jan 5, 2026
cb6185e
Merge branch 'main' into backend_settings_rework
Artuomka Jan 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 46 additions & 45 deletions backend/src/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,46 +1,47 @@
import { MiddlewareConsumer, Module, NestModule } from "@nestjs/common";
import { APP_GUARD, APP_INTERCEPTOR } from "@nestjs/core";
import { ScheduleModule } from "@nestjs/schedule";
import { ThrottlerGuard, ThrottlerModule } from "@nestjs/throttler";
import { AppController } from "./app.controller.js";
import { GlobalDatabaseContext } from "./common/application/global-database-context.js";
import { BaseType, UseCaseType } from "./common/data-injection.tokens.js";
import { AIModule } from "./entities/ai/ai.module.js";
import { ApiKeyModule } from "./entities/api-key/api-key.module.js";
import { CompanyFaviconModule } from "./entities/company-favicon/company-favicon.module.js";
import { CompanyInfoModule } from "./entities/company-info/company-info.module.js";
import { CompanyLogoModule } from "./entities/company-logo/company-logo.module.js";
import { CompanyTabTitleModule } from "./entities/company-tab-title/company-tab-title.module.js";
import { ConnectionModule } from "./entities/connection/connection.module.js";
import { ConnectionPropertiesModule } from "./entities/connection-properties/connection-properties.module.js";
import { ConversionModule } from "./entities/convention/conversion.module.js";
import { CronJobsModule } from "./entities/cron-jobs/cron-jobs.module.js";
import { CustomFieldModule } from "./entities/custom-field/custom-field.module.js";
import { DemoDataModule } from "./entities/demo-data/demo-deta.module.js";
import { EmailModule } from "./entities/email/email/email.module.js";
import { GroupModule } from "./entities/group/group.module.js";
import { LoggingModule } from "./entities/logging/logging.module.js";
import { PermissionModule } from "./entities/permission/permission.module.js";
import { S3WidgetModule } from "./entities/s3-widget/s3-widget.module.js";
import { SharedJobsModule } from "./entities/shared-jobs/shared-jobs.module.js";
import { TableModule } from "./entities/table/table.module.js";
import { TableTriggersModule } from "./entities/table-actions/table-action-rules-module/action-rules.module.js";
import { TableActionModule } from "./entities/table-actions/table-actions-module/table-action.module.js";
import { TableCategoriesModule } from "./entities/table-categories/table-categories.module.js";
import { TableFiltersModule } from "./entities/table-filters/table-filters.module.js";
import { TableLogsModule } from "./entities/table-logs/table-logs.module.js";
import { TableSettingsModule } from "./entities/table-settings/table-settings.module.js";
import { UserModule } from "./entities/user/user.module.js";
import { UserActionModule } from "./entities/user-actions/user-action.module.js";
import { UserSecretModule } from "./entities/user-secret/user-secret.module.js";
import { SignInAuditModule } from "./entities/user-sign-in-audit/sign-in-audit.module.js";
import { TableWidgetModule } from "./entities/widget/table-widget.module.js";
import { TimeoutInterceptor } from "./interceptors/index.js";
import { SaaSGatewayModule } from "./microservices/gateways/saas-gateway.ts/saas-gateway.module.js";
import { SaasModule } from "./microservices/saas-microservice/saas.module.js";
import { AppLoggerMiddleware } from "./middlewares/logging-middleware/app-logger-middlewate.js";
import { DatabaseModule } from "./shared/database/database.module.js";
import { GetHelloUseCase } from "./use-cases-app/get-hello.use.case.js";
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core';
import { ScheduleModule } from '@nestjs/schedule';
import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler';
import { AppController } from './app.controller.js';
import { GlobalDatabaseContext } from './common/application/global-database-context.js';
import { BaseType, UseCaseType } from './common/data-injection.tokens.js';
import { AIModule } from './entities/ai/ai.module.js';
import { ApiKeyModule } from './entities/api-key/api-key.module.js';
import { CompanyFaviconModule } from './entities/company-favicon/company-favicon.module.js';
import { CompanyInfoModule } from './entities/company-info/company-info.module.js';
import { CompanyLogoModule } from './entities/company-logo/company-logo.module.js';
import { CompanyTabTitleModule } from './entities/company-tab-title/company-tab-title.module.js';
import { ConnectionModule } from './entities/connection/connection.module.js';
import { ConnectionPropertiesModule } from './entities/connection-properties/connection-properties.module.js';
import { ConversionModule } from './entities/convention/conversion.module.js';
import { CronJobsModule } from './entities/cron-jobs/cron-jobs.module.js';
import { CustomFieldModule } from './entities/custom-field/custom-field.module.js';
import { DemoDataModule } from './entities/demo-data/demo-deta.module.js';
import { EmailModule } from './entities/email/email/email.module.js';
import { GroupModule } from './entities/group/group.module.js';
import { LoggingModule } from './entities/logging/logging.module.js';
import { PermissionModule } from './entities/permission/permission.module.js';
import { S3WidgetModule } from './entities/s3-widget/s3-widget.module.js';
import { SharedJobsModule } from './entities/shared-jobs/shared-jobs.module.js';
import { TableModule } from './entities/table/table.module.js';
import { TableTriggersModule } from './entities/table-actions/table-action-rules-module/action-rules.module.js';
import { TableActionModule } from './entities/table-actions/table-actions-module/table-action.module.js';
import { TableCategoriesModule } from './entities/table-categories/table-categories.module.js';
import { TableFiltersModule } from './entities/table-filters/table-filters.module.js';
import { TableLogsModule } from './entities/table-logs/table-logs.module.js';
import { TableSettingsModule } from './entities/table-settings/common-table-settings/table-settings.module.js';
import { UserModule } from './entities/user/user.module.js';
import { UserActionModule } from './entities/user-actions/user-action.module.js';
import { UserSecretModule } from './entities/user-secret/user-secret.module.js';
import { SignInAuditModule } from './entities/user-sign-in-audit/sign-in-audit.module.js';
import { TableWidgetModule } from './entities/widget/table-widget.module.js';
import { TimeoutInterceptor } from './interceptors/index.js';
import { SaaSGatewayModule } from './microservices/gateways/saas-gateway.ts/saas-gateway.module.js';
import { SaasModule } from './microservices/saas-microservice/saas.module.js';
import { AppLoggerMiddleware } from './middlewares/logging-middleware/app-logger-middlewate.js';
import { DatabaseModule } from './shared/database/database.module.js';
import { GetHelloUseCase } from './use-cases-app/get-hello.use.case.js';
import { PersonalTableSettingsModule } from './entities/table-settings/personal-table-settings/personal-table-settings.module.js';

@Module({
imports: [
Expand Down Expand Up @@ -85,8 +86,8 @@ import { GetHelloUseCase } from "./use-cases-app/get-hello.use.case.js";
TableCategoriesModule,
UserSecretModule,
SignInAuditModule,
PersonalTableSettingsModule,
S3WidgetModule,
AIModule,
],
controllers: [AppController],
providers: [
Expand All @@ -110,6 +111,6 @@ import { GetHelloUseCase } from "./use-cases-app/get-hello.use.case.js";
})
export class ApplicationModule implements NestModule {
configure(consumer: MiddlewareConsumer): void {
consumer.apply(AppLoggerMiddleware).forRoutes("*");
consumer.apply(AppLoggerMiddleware).forRoutes('*');
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ import { ITableFiltersCustomRepository } from '../../entities/table-filters/repo
import { TableFiltersEntity } from '../../entities/table-filters/table-filters.entity.js';
import { TableInfoEntity } from '../../entities/table-info/table-info.entity.js';
import { ITableLogsRepository } from '../../entities/table-logs/repository/table-logs-repository.interface.js';
import { ITableSettingsRepository } from '../../entities/table-settings/repository/table-settings.repository.interface.js';
import { TableSettingsEntity } from '../../entities/table-settings/table-settings.entity.js';
import { ITableSettingsRepository } from '../../entities/table-settings/common-table-settings/repository/table-settings.repository.interface.js';
import { TableSettingsEntity } from '../../entities/table-settings/common-table-settings/table-settings.entity.js';
import { IUserAccessRepository } from '../../entities/user-access/repository/user-access.repository.interface.js';
import { IUserActionRepository } from '../../entities/user-actions/repository/user-action.repository.interface.js';
import { IUserRepository } from '../../entities/user/repository/user.repository.interface.js';
Expand All @@ -54,6 +54,8 @@ import { SecretAccessLogEntity } from '../../entities/secret-access-log/secret-a
import { ISecretAccessLogRepository } from '../../entities/secret-access-log/repository/secret-access-log-repository.interface.js';
import { SignInAuditEntity } from '../../entities/user-sign-in-audit/sign-in-audit.entity.js';
import { ISignInAuditRepository } from '../../entities/user-sign-in-audit/repository/sign-in-audit-repository.interface.js';
import { IPersonalTableSettingsRepository } from '../../entities/table-settings/personal-table-settings/repository/personal-table-settings.repository.interface.js';
import { PersonalTableSettingsEntity } from '../../entities/table-settings/personal-table-settings/personal-table-settings.entity.js';

export interface IGlobalDatabaseContext extends IDatabaseContext {
userRepository: Repository<UserEntity> & IUserRepository;
Expand Down Expand Up @@ -92,4 +94,5 @@ export interface IGlobalDatabaseContext extends IDatabaseContext {
userSecretRepository: Repository<UserSecretEntity> & IUserSecretRepository;
secretAccessLogRepository: Repository<SecretAccessLogEntity> & ISecretAccessLogRepository;
signInAuditRepository: Repository<SignInAuditEntity> & ISignInAuditRepository;
personalTableSettingsRepository: Repository<PersonalTableSettingsEntity> & IPersonalTableSettingsRepository;
}
21 changes: 17 additions & 4 deletions backend/src/common/application/global-database-context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ import { TableInfoEntity } from '../../entities/table-info/table-info.entity.js'
import { tableLogsCustomRepositoryExtension } from '../../entities/table-logs/repository/table-logs-custom-repository-extension.js';
import { ITableLogsRepository } from '../../entities/table-logs/repository/table-logs-repository.interface.js';
import { TableLogsEntity } from '../../entities/table-logs/table-logs.entity.js';
import { tableSettingsCustomRepositoryExtension } from '../../entities/table-settings/repository/table-settings-custom-repository-extension.js';
import { ITableSettingsRepository } from '../../entities/table-settings/repository/table-settings.repository.interface.js';
import { TableSettingsEntity } from '../../entities/table-settings/table-settings.entity.js';
import { tableSettingsCustomRepositoryExtension } from '../../entities/table-settings/common-table-settings/repository/table-settings-custom-repository-extension.js';
import { ITableSettingsRepository } from '../../entities/table-settings/common-table-settings/repository/table-settings.repository.interface.js';
import { TableSettingsEntity } from '../../entities/table-settings/common-table-settings/table-settings.entity.js';
import { userAccessCustomReposiotoryExtension } from '../../entities/user-access/repository/user-access-custom-repository-extension.js';
import { IUserAccessRepository } from '../../entities/user-access/repository/user-access.repository.interface.js';
import { userActionCustomRepositoryExtension } from '../../entities/user-actions/repository/user-action-custom-repository-extension.js';
Expand Down Expand Up @@ -99,6 +99,9 @@ import { secretAccessLogRepositoryExtension } from '../../entities/secret-access
import { SignInAuditEntity } from '../../entities/user-sign-in-audit/sign-in-audit.entity.js';
import { ISignInAuditRepository } from '../../entities/user-sign-in-audit/repository/sign-in-audit-repository.interface.js';
import { signInAuditCustomRepositoryExtension } from '../../entities/user-sign-in-audit/repository/sign-in-audit-custom-repository-extension.js';
import { PersonalTableSettingsEntity } from '../../entities/table-settings/personal-table-settings/personal-table-settings.entity.js';
import { IPersonalTableSettingsRepository } from '../../entities/table-settings/personal-table-settings/repository/personal-table-settings.repository.interface.js';
import { personalTableSettingsCustomRepositoryExtension } from '../../entities/table-settings/personal-table-settings/repository/personal-table-settings-custom-repository-extension.js';

@Injectable({ scope: Scope.REQUEST })
export class GlobalDatabaseContext implements IGlobalDatabaseContext {
Expand Down Expand Up @@ -140,6 +143,7 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
private _userSecretRepository: Repository<UserSecretEntity> & IUserSecretRepository;
private _secretAccessLogRepository: Repository<SecretAccessLogEntity> & ISecretAccessLogRepository;
private _signInAuditRepository: Repository<SignInAuditEntity> & ISignInAuditRepository;
private _personalTableSettingsRepository: Repository<PersonalTableSettingsEntity> & IPersonalTableSettingsRepository;

public constructor(
@Inject(BaseType.DATA_SOURCE)
Expand Down Expand Up @@ -237,6 +241,9 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
this._signInAuditRepository = this.appDataSource
.getRepository(SignInAuditEntity)
.extend(signInAuditCustomRepositoryExtension);
this._personalTableSettingsRepository = this.appDataSource
.getRepository(PersonalTableSettingsEntity)
.extend(personalTableSettingsCustomRepositoryExtension);
}

public get userRepository(): Repository<UserEntity> & IUserRepository {
Expand Down Expand Up @@ -283,7 +290,8 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
return this._userInvitationRepository;
}

public get connectionPropertiesRepository(): Repository<ConnectionPropertiesEntity> & IConnectionPropertiesRepository {
public get connectionPropertiesRepository(): Repository<ConnectionPropertiesEntity> &
IConnectionPropertiesRepository {
return this._connectionPropertiesRepository;
}

Expand Down Expand Up @@ -383,6 +391,11 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
return this._signInAuditRepository;
}

public get personalTableSettingsRepository(): Repository<PersonalTableSettingsEntity> &
IPersonalTableSettingsRepository {
return this._personalTableSettingsRepository;
}

public startTransaction(): Promise<void> {
this._queryRunner = this.appDataSource.createQueryRunner();
this._queryRunner.startTransaction();
Expand Down
Loading
Loading