/// Abstraction over the external file storage backend (Nextcloud via WebDAV, /// or S3-compatible object storage). Implementations only need to move raw /// bytes; visibility/ownership metadata lives in the `File` Prisma model. export interface StorageProvider { upload(kcId: string, filename: string, data: Buffer): Promise; download(storageKey: string): Promise; delete(storageKey: string): Promise; } export const STORAGE_PROVIDER = Symbol('STORAGE_PROVIDER');