chore(server): watch storages config updates (#11367)

This commit is contained in:
forehalo
2025-04-01 12:52:45 +00:00
parent f374f2695f
commit eb219b2c48
3 changed files with 37 additions and 20 deletions
@@ -14,7 +14,7 @@ import {
@Injectable() @Injectable()
export class AvatarStorage { export class AvatarStorage {
private provider: StorageProvider; private provider!: StorageProvider;
get config() { get config() {
return this.AFFiNEConfig.storages.avatar; return this.AFFiNEConfig.storages.avatar;
@@ -24,10 +24,20 @@ export class AvatarStorage {
private readonly AFFiNEConfig: Config, private readonly AFFiNEConfig: Config,
private readonly url: URLHelper, private readonly url: URLHelper,
private readonly storageFactory: StorageProviderFactory private readonly storageFactory: StorageProviderFactory
) { ) {}
@OnEvent('config.init')
async onConfigInit() {
this.provider = this.storageFactory.create(this.config.storage); 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) { async put(key: string, blob: BlobInputType, metadata?: PutObjectMetadata) {
await this.provider.put(key, blob, metadata); await this.provider.put(key, blob, metadata);
let link = this.config.publicPath + key; let link = this.config.publicPath + key;
@@ -53,11 +63,4 @@ export class AvatarStorage {
await this.delete(user.avatarUrl); 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);
}
}
} }
@@ -30,7 +30,7 @@ declare global {
@Injectable() @Injectable()
export class WorkspaceBlobStorage { export class WorkspaceBlobStorage {
private readonly logger = new Logger(WorkspaceBlobStorage.name); private readonly logger = new Logger(WorkspaceBlobStorage.name);
private provider: StorageProvider; private provider!: StorageProvider;
get config() { get config() {
return this.AFFiNEConfig.storages.blob; return this.AFFiNEConfig.storages.blob;
@@ -42,10 +42,20 @@ export class WorkspaceBlobStorage {
private readonly storageFactory: StorageProviderFactory, private readonly storageFactory: StorageProviderFactory,
private readonly db: PrismaClient, private readonly db: PrismaClient,
private readonly url: URLHelper private readonly url: URLHelper
) { ) {}
@OnEvent('config.init')
async onConfigInit() {
this.provider = this.storageFactory.create(this.config.storage); 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) { async put(workspaceId: string, key: string, blob: Buffer) {
const meta: PutObjectMetadata = autoMetadata(blob); const meta: PutObjectMetadata = autoMetadata(blob);
@@ -229,11 +239,4 @@ export class WorkspaceBlobStorage {
}: Events['workspace.blob.delete']) { }: Events['workspace.blob.delete']) {
await this.delete(workspaceId, key, true); 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);
}
}
} }
@@ -8,6 +8,7 @@ import {
CallMetric, CallMetric,
Config, Config,
type FileUpload, type FileUpload,
OnEvent,
readBuffer, readBuffer,
type StorageProvider, type StorageProvider,
StorageProviderFactory, StorageProviderFactory,
@@ -17,17 +18,27 @@ import { QuotaService } from '../../core/quota';
@Injectable() @Injectable()
export class CopilotStorage { export class CopilotStorage {
public readonly provider: StorageProvider; public provider!: StorageProvider;
constructor( constructor(
private readonly config: Config, private readonly config: Config,
private readonly url: URLHelper, private readonly url: URLHelper,
private readonly storageFactory: StorageProviderFactory, private readonly storageFactory: StorageProviderFactory,
private readonly quota: QuotaService private readonly quota: QuotaService
) { ) {}
@OnEvent('config.init')
async onConfigInit() {
this.provider = this.storageFactory.create(this.config.copilot.storage); 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') @CallMetric('ai', 'blob_put')
async put( async put(
userId: string, userId: string,