Description
Create a new skill that generates file storage integration for Nerva APIs. This provides a unified interface for storing and retrieving files across multiple cloud storage providers.
Why
File storage is a cross-cutting concern that most APIs need. A dedicated skill generates a storage abstraction layer that works with S3, Cloudflare R2, and Google Cloud Storage — letting users switch providers without changing application code.
Acceptance Criteria
Description
Create a new skill that generates file storage integration for Nerva APIs. This provides a unified interface for storing and retrieving files across multiple cloud storage providers.
Why
File storage is a cross-cutting concern that most APIs need. A dedicated skill generates a storage abstraction layer that works with S3, Cloudflare R2, and Google Cloud Storage — letting users switch providers without changing application code.
Acceptance Criteria
```typescript
interface StorageProvider {
upload(key: string, data: Buffer | ReadableStream, metadata?: Record<string, string>): Promise;
download(key: string): Promise;
delete(key: string): Promise;
getSignedUrl(key: string, expiresIn: number): Promise;
list(prefix: string): Promise<StorageObject[]>;
}
```