client supplies originalname, mimetype, size; server stores verbatim (files.service.ts:32-33)
There is no DTO — dto/upload-file.dto.ts does not exist in the module (only
controller/service/module/schema/repository). Server accepts anything Multer parses.
Signed-URL request:GET /files/:id/signed-url?expiresInSeconds=3600 → provider
getSignedUrl(fileId, expiresInSeconds) (storage-provider.ts:25) — R2 presigns
(r2.provider.ts:77-86); Appwrite currently ignores the TTL (appwrite-storage.provider.ts:69-74);
local returns a fake path (local-storage.provider.ts:47-51). Not wired into the service
yet.
Caption/metadata form: no file.update permission exists
(permissions.constants.ts:86-88) — skip until a module needs it.