Skip to content

Commit fb6a9b8

Browse files
Merge branch 'main' into custom-favicon
2 parents 4028d52 + 39faa8f commit fb6a9b8

File tree

60 files changed

+2088
-73
lines changed

Some content is hidden

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

60 files changed

+2088
-73
lines changed

backend/src/app.module.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ import { ApiKeyModule } from './entities/api-key/api-key.module.js';
3131
import { AIModule } from './entities/ai/ai.module.js';
3232
import { EmailModule } from './entities/email/email/email.module.js';
3333
import { CompanyLogoModule } from './entities/company-logo/company-logo.module.js';
34+
import { CompanyFaviconModule } from './entities/company-favicon/company-favicon.module.js';
35+
import { CompanyTabTitleModule } from './entities/company-tab-title/company-tab-title.module.js';
36+
import { TableFiltersModule } from './entities/table-filters/table-filters.module.js';
3437

3538
@Module({
3639
imports: [
@@ -58,6 +61,9 @@ import { CompanyLogoModule } from './entities/company-logo/company-logo.module.j
5861
AIModule,
5962
EmailModule,
6063
CompanyLogoModule,
64+
CompanyFaviconModule,
65+
CompanyTabTitleModule,
66+
TableFiltersModule,
6167
],
6268
controllers: [AppController],
6369
providers: [

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ import { AiUserThreadEntity } from '../../entities/ai/ai-data-entities/ai-user-t
4141
import { IAiUserFilesRepository } from '../../entities/ai/ai-data-entities/ai-user-files/ai-user-files-repository.interface.js';
4242
import { AiUserFileEntity } from '../../entities/ai/ai-data-entities/ai-user-files/ai-user-files.entity.js';
4343
import { CompanyLogoEntity } from '../../entities/company-logo/company-logo.entity.js';
44+
import { CompanyFaviconEntity } from '../../entities/company-favicon/company-favicon.entity.js';
45+
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';
4448

4549
export interface IGlobalDatabaseContext extends IDatabaseContext {
4650
userRepository: Repository<UserEntity> & IUserRepository;
@@ -73,4 +77,7 @@ export interface IGlobalDatabaseContext extends IDatabaseContext {
7377
aiUserThreadsRepository: Repository<AiUserThreadEntity> & IAiUserThreadsRepository;
7478
aiUserFilesRepository: Repository<AiUserFileEntity> & IAiUserFilesRepository;
7579
companyLogoRepository: Repository<CompanyLogoEntity>;
80+
companyFaviconRepository: Repository<CompanyFaviconEntity>;
81+
companyTabTitleRepository: Repository<CompanyTabTitleEntity>;
82+
tableFiltersRepository: Repository<TableFiltersEntity> & ITableFiltersCustomRepository;
7683
}

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ import { AiUserFileEntity } from '../../entities/ai/ai-data-entities/ai-user-fil
8585
import { aiUserThreadRepositoryExtension } from '../../entities/ai/ai-data-entities/ai-user-threads/ai-user-threads-repository.extension.js';
8686
import { aiUserFileRepositoryExtension } from '../../entities/ai/ai-data-entities/ai-user-files/ai-user-file-repository.extension.js';
8787
import { CompanyLogoEntity } from '../../entities/company-logo/company-logo.entity.js';
88+
import { CompanyFaviconEntity } from '../../entities/company-favicon/company-favicon.entity.js';
89+
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';
8893

8994
@Injectable({ scope: Scope.REQUEST })
9095
export class GlobalDatabaseContext implements IGlobalDatabaseContext {
@@ -120,6 +125,9 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
120125
private _aiUserThreadsRepository: Repository<AiUserThreadEntity> & IAiUserThreadsRepository;
121126
private _aiUserFilesRepository: Repository<AiUserFileEntity> & IAiUserFilesRepository;
122127
private _companyLogoRepository: Repository<CompanyLogoEntity>;
128+
private _companyFaviconRepository: Repository<CompanyFaviconEntity>;
129+
private _companyTabTitleRepository: Repository<CompanyTabTitleEntity>;
130+
private _tableFiltersRepository: Repository<TableFiltersEntity> & ITableFiltersCustomRepository;
123131

124132
public constructor(
125133
@Inject(BaseType.DATA_SOURCE)
@@ -203,6 +211,11 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
203211
.getRepository(AiUserFileEntity)
204212
.extend(aiUserFileRepositoryExtension);
205213
this._companyLogoRepository = this.appDataSource.getRepository(CompanyLogoEntity);
214+
this._companyFaviconRepository = this.appDataSource.getRepository(CompanyFaviconEntity);
215+
this._companyTabTitleRepository = this.appDataSource.getRepository(CompanyTabTitleEntity);
216+
this._tableFiltersRepository = this.appDataSource
217+
.getRepository(TableFiltersEntity)
218+
.extend(tableFiltersCustomRepositoryExtension);
206219
}
207220

208221
public get userRepository(): Repository<UserEntity> & IUserRepository {
@@ -325,6 +338,18 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
325338
return this._companyLogoRepository;
326339
}
327340

341+
public get companyFaviconRepository(): Repository<CompanyFaviconEntity> {
342+
return this._companyFaviconRepository;
343+
}
344+
345+
public get companyTabTitleRepository(): Repository<CompanyTabTitleEntity> {
346+
return this._companyTabTitleRepository;
347+
}
348+
349+
public get tableFiltersRepository(): Repository<TableFiltersEntity> & ITableFiltersCustomRepository {
350+
return this._tableFiltersRepository;
351+
}
352+
328353
public startTransaction(): Promise<void> {
329354
this._queryRunner = this.appDataSource.createQueryRunner();
330355
this._queryRunner.startTransaction();

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,13 @@ export enum UseCaseType {
153153
UPLOAD_COMPANY_LOGO = 'UPLOAD_COMPANY_LOGO',
154154
FIND_COMPANY_LOGO = 'FIND_COMPANY_LOGO',
155155
DELETE_COMPANY_LOGO = 'DELETE_COMPANY_LOGO',
156+
UPLOAD_COMPANY_FAVICON = 'UPLOAD_COMPANY_FAVICON',
157+
FIND_COMPANY_FAVICON = 'FIND_COMPANY_FAVICON',
158+
DELETE_COMPANY_FAVICON = 'DELETE_COMPANY_FAVICON',
159+
ADD_COMPANY_TAB_TITLE = 'ADD_COMPANY_TAB_TITLE',
160+
FIND_COMPANY_TAB_TITLE = 'FIND_COMPANY_TAB_TITLE',
161+
DELETE_COMPANY_TAB_TITLE = 'DELETE_COMPANY_TAB_TITLE',
162+
GET_COMPANY_WHITE_LABEL_PROPERTIES = 'GET_COMPANY_WHITE_LABEL_PROPERTIES',
156163

157164
FIND_ACTION_RULES = 'FIND_ACTION_RULES',
158165
FIND_ACTION_RULE = 'FIND_ACTION_RULE',
@@ -178,4 +185,8 @@ export enum UseCaseType {
178185
GET_ALL_USER_THREADS_WITH_AI_ASSISTANT = 'GET_ALL_USER_THREADS_WITH_AI_ASSISTANT',
179186
GET_ALL_THREAD_MESSAGES = 'GET_ALL_THREAD_MESSAGES',
180187
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',
181192
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn, Relation } from 'typeorm';
2+
import { CompanyInfoEntity } from '../company-info/company-info.entity.js';
3+
4+
@Entity('company_favicon')
5+
export class CompanyFaviconEntity {
6+
@PrimaryGeneratedColumn('uuid')
7+
id: string;
8+
9+
@Column({ type: 'bytea', nullable: true })
10+
image: Buffer;
11+
12+
@Column({ type: 'varchar', length: 24, nullable: false, default: 'image/png' })
13+
mimeType: string;
14+
15+
@Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
16+
createdAt: Date;
17+
18+
@OneToOne((_) => CompanyInfoEntity, (company) => company.favicon, {
19+
onDelete: 'CASCADE',
20+
})
21+
@JoinColumn()
22+
company: Relation<CompanyInfoEntity>;
23+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { Module } from '@nestjs/common';
2+
import { TypeOrmModule } from '@nestjs/typeorm';
3+
import { CompanyInfoEntity } from '../company-info/company-info.entity.js';
4+
import { CompanyFaviconEntity } from './company-favicon.entity.js';
5+
6+
@Module({
7+
imports: [TypeOrmModule.forFeature([CompanyInfoEntity, CompanyFaviconEntity])],
8+
providers: [],
9+
exports: [],
10+
})
11+
export class CompanyFaviconModule {}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export class AddCompanyTabTitleDs {
2+
companyId: string;
3+
tab_title: string;
4+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { ApiProperty } from '@nestjs/swagger';
2+
import { IsNotEmpty, IsString, MaxLength, MinLength } from 'class-validator';
3+
4+
export class AddCompanyTabTitleDto {
5+
@ApiProperty({ required: true })
6+
@IsString()
7+
@IsNotEmpty()
8+
@MinLength(1)
9+
@MaxLength(255)
10+
tab_title: string;
11+
}

backend/src/entities/company-info/application/data-structures/found-company-info.ds.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ApiProperty } from '@nestjs/swagger';
22
import { FoundSipleConnectionInfoDS } from '../../../connection/application/data-structures/found-connections.ds.js';
3-
import { FoundCompanyLogoInfo } from '../dto/found-company-logo.ro.js';
3+
import { FoundCompanyImageInfo } from '../dto/found-company-logo.ro.js';
44
import { FoundInvitationInCompanyDs } from './found-invitation-in-company.ds.js';
55

66
export class FoundCompanyAddressDs {
@@ -74,8 +74,14 @@ export class FoundUserCompanyInfoDs {
7474
@ApiProperty({ required: false })
7575
custom_domain: string | null;
7676

77-
@ApiProperty({ required: false, type: FoundCompanyLogoInfo })
78-
logo: FoundCompanyLogoInfo;
77+
@ApiProperty({ required: false, type: FoundCompanyImageInfo })
78+
logo: FoundCompanyImageInfo;
79+
80+
@ApiProperty({ required: false, type: FoundCompanyImageInfo })
81+
favicon: FoundCompanyImageInfo;
82+
83+
@ApiProperty({ required: false })
84+
tab_title: string;
7985
}
8086

8187
export class FoundUserFullCompanyInfoDs extends FoundUserCompanyInfoDs {
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export class FoundCompanyTabTitleRO {
2+
tab_title: string;
3+
}

0 commit comments

Comments
 (0)