diff --git a/packages/backend/server/src/core/storage/wrappers/avatar.ts b/packages/backend/server/src/core/storage/wrappers/avatar.ts index 388c1f024..6a1c1f040 100644 --- a/packages/backend/server/src/core/storage/wrappers/avatar.ts +++ b/packages/backend/server/src/core/storage/wrappers/avatar.ts @@ -14,7 +14,7 @@ import { @Injectable() export class AvatarStorage { - private provider: StorageProvider; + private provider!: StorageProvider; get config() { return this.AFFiNEConfig.storages.avatar; @@ -24,10 +24,20 @@ export class AvatarStorage { private readonly AFFiNEConfig: Config, private readonly url: URLHelper, private readonly storageFactory: StorageProviderFactory - ) { + ) {} + + @OnEvent('config.init') + async onConfigInit() { this.provider = this.storageFactory.create(this.config.storage); } + @OnEvent('config.changed') + async onConfigChanged(event: Events['config.changed']) { + if (event.updates.storages?.avatar?.storage) { + this.provider = this.storageFactory.create(this.config.storage); + } + } + async put(key: string, blob: BlobInputType, metadata?: PutObjectMetadata) { await this.provider.put(key, blob, metadata); let link = this.config.publicPath + key; @@ -53,11 +63,4 @@ export class AvatarStorage { await this.delete(user.avatarUrl); } } - - @OnEvent('config.changed') - async onConfigChanged(event: Events['config.changed']) { - if (event.updates.storages?.avatar?.storage) { - this.provider = this.storageFactory.create(this.config.storage); - } - } } diff --git a/packages/backend/server/src/core/storage/wrappers/blob.ts b/packages/backend/server/src/core/storage/wrappers/blob.ts index dd5fea880..bb0e73c22 100644 --- a/packages/backend/server/src/core/storage/wrappers/blob.ts +++ b/packages/backend/server/src/core/storage/wrappers/blob.ts @@ -30,7 +30,7 @@ declare global { @Injectable() export class WorkspaceBlobStorage { private readonly logger = new Logger(WorkspaceBlobStorage.name); - private provider: StorageProvider; + private provider!: StorageProvider; get config() { return this.AFFiNEConfig.storages.blob; @@ -42,10 +42,20 @@ export class WorkspaceBlobStorage { private readonly storageFactory: StorageProviderFactory, private readonly db: PrismaClient, private readonly url: URLHelper - ) { + ) {} + + @OnEvent('config.init') + async onConfigInit() { this.provider = this.storageFactory.create(this.config.storage); } + @OnEvent('config.changed') + async onConfigChanged(event: Events['config.changed']) { + if (event.updates.storages?.blob?.storage) { + this.provider = this.storageFactory.create(this.config.storage); + } + } + async put(workspaceId: string, key: string, blob: Buffer) { const meta: PutObjectMetadata = autoMetadata(blob); @@ -229,11 +239,4 @@ export class WorkspaceBlobStorage { }: Events['workspace.blob.delete']) { await this.delete(workspaceId, key, true); } - - @OnEvent('config.changed') - async onConfigChanged(event: Events['config.changed']) { - if (event.updates.storages?.blob?.storage) { - this.provider = this.storageFactory.create(this.config.storage); - } - } } diff --git a/packages/backend/server/src/plugins/copilot/storage.ts b/packages/backend/server/src/plugins/copilot/storage.ts index 12b2fb613..90813809e 100644 --- a/packages/backend/server/src/plugins/copilot/storage.ts +++ b/packages/backend/server/src/plugins/copilot/storage.ts @@ -8,6 +8,7 @@ import { CallMetric, Config, type FileUpload, + OnEvent, readBuffer, type StorageProvider, StorageProviderFactory, @@ -17,17 +18,27 @@ import { QuotaService } from '../../core/quota'; @Injectable() export class CopilotStorage { - public readonly provider: StorageProvider; + public provider!: StorageProvider; constructor( private readonly config: Config, private readonly url: URLHelper, private readonly storageFactory: StorageProviderFactory, private readonly quota: QuotaService - ) { + ) {} + + @OnEvent('config.init') + async onConfigInit() { this.provider = this.storageFactory.create(this.config.copilot.storage); } + @OnEvent('config.changed') + async onConfigChanged(event: Events['config.changed']) { + if (event.updates?.copilot?.storage) { + this.provider = this.storageFactory.create(this.config.copilot.storage); + } + } + @CallMetric('ai', 'blob_put') async put( userId: string,