Jack
|
23aae19898
|
feat: implement POST /api/v1/agents/<agent_id>/upload API (#15633)
## Summary
Implement the `POST /api/v1/agents/<agent_id>/upload` endpoint in Go,
allowing file uploads associated with agent canvases.
### Changes
- **Modified**: `internal/service/agent.go` — Added `CheckCanvasAccess`
method (owner + team-level permission semantics)
- **Modified**: `internal/handler/agent.go` — Added `UploadAgentFile`
handler with auth check, multipart file parsing, and delegation to
`FileService`. Added `fileUploader` interface for testability.
- **Modified**: `internal/router/router.go` — Registered `POST
/:agent_id/upload` route
- **Modified**: `cmd/server_main.go` — Wired `fileService` into
`AgentHandler`
- **New**: `internal/service/agent_test.go` — 4 service-level tests for
`CheckCanvasAccess` (owner, team member, private denial, not found)
- **New**: `internal/handler/agent_upload_test.go` — 3 handler-level
tests (success with fake file service, cross-user denial, empty file
rejection)
### Testing
All 7 tests pass with zero mocking of the DB layer (in-memory SQLite):
```
=== RUN TestCheckCanvasAccess_Owner --- PASS
=== RUN TestCheckCanvasAccess_NotOwner --- PASS
=== RUN TestCheckCanvasAccess_PrivateCanvas_Denied --- PASS
=== RUN TestCheckCanvasAccess_NotFound --- PASS
=== RUN TestUploadAgentFileHandler_Success --- PASS
=== RUN TestUploadAgentFileHandler_NoPermission --- PASS
=== RUN TestUploadAgentFileHandler_NoFiles --- PASS
```
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-04 17:21:47 +08:00 |
|