Skip to content

Commit c1c2485

Browse files
authored
Merge pull request #1134 from rocket-admin/backend_saved_filters
Backend saved filters
2 parents a1288f4 + bc951e7 commit c1c2485

23 files changed

Lines changed: 847 additions & 2 deletions

backend/src/app.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import { EmailModule } from './entities/email/email/email.module.js';
3333
import { CompanyLogoModule } from './entities/company-logo/company-logo.module.js';
3434
import { CompanyFaviconModule } from './entities/company-favicon/company-favicon.module.js';
3535
import { CompanyTabTitleModule } from './entities/company-tab-title/company-tab-title.module.js';
36+
import { TableFiltersModule } from './entities/table-filters/table-filters.module.js';
3637

3738
@Module({
3839
imports: [
@@ -62,6 +63,7 @@ import { CompanyTabTitleModule } from './entities/company-tab-title/company-tab-
6263
CompanyLogoModule,
6364
CompanyFaviconModule,
6465
CompanyTabTitleModule,
66+
TableFiltersModule,
6567
],
6668
controllers: [AppController],
6769
providers: [

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ import { AiUserFileEntity } from '../../entities/ai/ai-data-entities/ai-user-fil
4343
import { CompanyLogoEntity } from '../../entities/company-logo/company-logo.entity.js';
4444
import { CompanyFaviconEntity } from '../../entities/company-favicon/company-favicon.entity.js';
4545
import { CompanyTabTitleEntity } from '../../entities/company-tab-title/company-tab-title.entity.js';
46+
import { TableFiltersEntity } from '../../entities/table-filters/table-filters.entity.js';
47+
import { ITableFiltersCustomRepository } from '../../entities/table-filters/repository/table-filters-custom-repository.interface.js';
4648

4749
export interface IGlobalDatabaseContext extends IDatabaseContext {
4850
userRepository: Repository<UserEntity> & IUserRepository;
@@ -77,4 +79,5 @@ export interface IGlobalDatabaseContext extends IDatabaseContext {
7779
companyLogoRepository: Repository<CompanyLogoEntity>;
7880
companyFaviconRepository: Repository<CompanyFaviconEntity>;
7981
companyTabTitleRepository: Repository<CompanyTabTitleEntity>;
82+
tableFiltersRepository: Repository<TableFiltersEntity> & ITableFiltersCustomRepository;
8083
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ import { aiUserFileRepositoryExtension } from '../../entities/ai/ai-data-entitie
8787
import { CompanyLogoEntity } from '../../entities/company-logo/company-logo.entity.js';
8888
import { CompanyFaviconEntity } from '../../entities/company-favicon/company-favicon.entity.js';
8989
import { CompanyTabTitleEntity } from '../../entities/company-tab-title/company-tab-title.entity.js';
90+
import { TableFiltersEntity } from '../../entities/table-filters/table-filters.entity.js';
91+
import { ITableFiltersCustomRepository } from '../../entities/table-filters/repository/table-filters-custom-repository.interface.js';
92+
import { tableFiltersCustomRepositoryExtension } from '../../entities/table-filters/repository/table-filters-custom-repository-extension.js';
9093

9194
@Injectable({ scope: Scope.REQUEST })
9295
export class GlobalDatabaseContext implements IGlobalDatabaseContext {
@@ -124,6 +127,7 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
124127
private _companyLogoRepository: Repository<CompanyLogoEntity>;
125128
private _companyFaviconRepository: Repository<CompanyFaviconEntity>;
126129
private _companyTabTitleRepository: Repository<CompanyTabTitleEntity>;
130+
private _tableFiltersRepository: Repository<TableFiltersEntity> & ITableFiltersCustomRepository;
127131

128132
public constructor(
129133
@Inject(BaseType.DATA_SOURCE)
@@ -209,6 +213,9 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
209213
this._companyLogoRepository = this.appDataSource.getRepository(CompanyLogoEntity);
210214
this._companyFaviconRepository = this.appDataSource.getRepository(CompanyFaviconEntity);
211215
this._companyTabTitleRepository = this.appDataSource.getRepository(CompanyTabTitleEntity);
216+
this._tableFiltersRepository = this.appDataSource
217+
.getRepository(TableFiltersEntity)
218+
.extend(tableFiltersCustomRepositoryExtension);
212219
}
213220

214221
public get userRepository(): Repository<UserEntity> & IUserRepository {
@@ -339,6 +346,10 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
339346
return this._companyTabTitleRepository;
340347
}
341348

349+
public get tableFiltersRepository(): Repository<TableFiltersEntity> & ITableFiltersCustomRepository {
350+
return this._tableFiltersRepository;
351+
}
352+
342353
public startTransaction(): Promise<void> {
343354
this._queryRunner = this.appDataSource.createQueryRunner();
344355
this._queryRunner.startTransaction();

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,4 +185,8 @@ export enum UseCaseType {
185185
GET_ALL_USER_THREADS_WITH_AI_ASSISTANT = 'GET_ALL_USER_THREADS_WITH_AI_ASSISTANT',
186186
GET_ALL_THREAD_MESSAGES = 'GET_ALL_THREAD_MESSAGES',
187187
DELETE_THREAD_WITH_AI_ASSISTANT = 'DELETE_THREAD_WITH_AI_ASSISTANT',
188+
189+
CREATE_TABLE_FILTERS = 'CREATE_TABLE_FILTERS',
190+
FIND_TABLE_FILTERS = 'FIND_TABLE_FILTERS',
191+
DELETE_TABLE_FILTERS = 'DELETE_TABLE_FILTERS',
188192
}

backend/src/entities/connection/connection.entity.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { CompanyInfoEntity } from '../company-info/company-info.entity.js';
2525
import { ActionRulesEntity } from '../table-actions/table-action-rules-module/action-rules.entity.js';
2626
import { nanoid } from 'nanoid';
2727
import { Constants } from '../../helpers/constants/constants.js';
28+
import { TableFiltersEntity } from '../table-filters/table-filters.entity.js';
2829

2930
@Entity('connection')
3031
export class ConnectionEntity {
@@ -234,4 +235,7 @@ export class ConnectionEntity {
234235
@ManyToOne((_) => CompanyInfoEntity, (company) => company.connections)
235236
@JoinTable()
236237
company: Relation<CompanyInfoEntity>;
238+
239+
@OneToMany((_) => TableFiltersEntity, (table_filters) => table_filters.connection)
240+
table_filters: Relation<TableFiltersEntity>[];
237241
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export class CreateTableFiltersDto {
2+
table_name: string;
3+
connection_id: string;
4+
filters: Record<string, any>;
5+
masterPwd: string;
6+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export class FindTableFiltersDs {
2+
table_name: string;
3+
connection_id: string;
4+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { ApiProperty } from '@nestjs/swagger';
2+
3+
export class CreatedTableFiltersRO {
4+
@ApiProperty()
5+
id: string;
6+
7+
@ApiProperty()
8+
tableName: string;
9+
10+
@ApiProperty()
11+
connectionId: string;
12+
13+
@ApiProperty({ type: Object })
14+
filters: Record<string, any>;
15+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { TableFiltersEntity } from '../table-filters.entity.js';
2+
import { ITableFiltersCustomRepository } from './table-filters-custom-repository.interface.js';
3+
4+
export const tableFiltersCustomRepositoryExtension: ITableFiltersCustomRepository = {
5+
async findTableFiltersForTableInConnection(tableName: string, connectionId: string): Promise<TableFiltersEntity> {
6+
const qb = this.createQueryBuilder('table_filters')
7+
.leftJoin('table_filters.connection', 'connection')
8+
.where('table_filters.table_name = :tableName', { tableName: tableName })
9+
.andWhere('connection.id = :connectionId', { connectionId: connectionId });
10+
return await qb.getOne();
11+
},
12+
};
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { TableFiltersEntity } from '../table-filters.entity.js';
2+
3+
export interface ITableFiltersCustomRepository {
4+
findTableFiltersForTableInConnection(tableName: string, connectionId: string): Promise<TableFiltersEntity>;
5+
}

0 commit comments

Comments
 (0)