Skip to content

Commit 5c26346

Browse files
Merge branch 'main' into custom-favicon
2 parents 2f40eea + eb740ad commit 5c26346

File tree

42 files changed

+1236
-61
lines changed

Some content is hidden

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

42 files changed

+1236
-61
lines changed

backend/src/app.module.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ 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';
3436

3537
@Module({
3638
imports: [
@@ -58,6 +60,8 @@ import { CompanyLogoModule } from './entities/company-logo/company-logo.module.j
5860
AIModule,
5961
EmailModule,
6062
CompanyLogoModule,
63+
CompanyFaviconModule,
64+
CompanyTabTitleModule,
6165
],
6266
controllers: [AppController],
6367
providers: [

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ 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';
4446

4547
export interface IGlobalDatabaseContext extends IDatabaseContext {
4648
userRepository: Repository<UserEntity> & IUserRepository;
@@ -73,4 +75,6 @@ export interface IGlobalDatabaseContext extends IDatabaseContext {
7375
aiUserThreadsRepository: Repository<AiUserThreadEntity> & IAiUserThreadsRepository;
7476
aiUserFilesRepository: Repository<AiUserFileEntity> & IAiUserFilesRepository;
7577
companyLogoRepository: Repository<CompanyLogoEntity>;
78+
companyFaviconRepository: Repository<CompanyFaviconEntity>;
79+
companyTabTitleRepository: Repository<CompanyTabTitleEntity>;
7680
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ 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';
8890

8991
@Injectable({ scope: Scope.REQUEST })
9092
export class GlobalDatabaseContext implements IGlobalDatabaseContext {
@@ -120,6 +122,8 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
120122
private _aiUserThreadsRepository: Repository<AiUserThreadEntity> & IAiUserThreadsRepository;
121123
private _aiUserFilesRepository: Repository<AiUserFileEntity> & IAiUserFilesRepository;
122124
private _companyLogoRepository: Repository<CompanyLogoEntity>;
125+
private _companyFaviconRepository: Repository<CompanyFaviconEntity>;
126+
private _companyTabTitleRepository: Repository<CompanyTabTitleEntity>;
123127

124128
public constructor(
125129
@Inject(BaseType.DATA_SOURCE)
@@ -203,6 +207,8 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
203207
.getRepository(AiUserFileEntity)
204208
.extend(aiUserFileRepositoryExtension);
205209
this._companyLogoRepository = this.appDataSource.getRepository(CompanyLogoEntity);
210+
this._companyFaviconRepository = this.appDataSource.getRepository(CompanyFaviconEntity);
211+
this._companyTabTitleRepository = this.appDataSource.getRepository(CompanyTabTitleEntity);
206212
}
207213

208214
public get userRepository(): Repository<UserEntity> & IUserRepository {
@@ -325,6 +331,14 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
325331
return this._companyLogoRepository;
326332
}
327333

334+
public get companyFaviconRepository(): Repository<CompanyFaviconEntity> {
335+
return this._companyFaviconRepository;
336+
}
337+
338+
public get companyTabTitleRepository(): Repository<CompanyTabTitleEntity> {
339+
return this._companyTabTitleRepository;
340+
}
341+
328342
public startTransaction(): Promise<void> {
329343
this._queryRunner = this.appDataSource.createQueryRunner();
330344
this._queryRunner.startTransaction();

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

Lines changed: 7 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',
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)