Skip to content

Expose Media multipart upload routes through Gateway #79

Description

@ULookup

Target Version

3.0-dev。Media 分片上传协议、服务实现与 Functional 测试均位于该开发线;证据复核于提交 a75fc8721b99e5c0b4421d0c58b5618bbe71ff31

Evidence

  • proto/media/media_service.proto:157-160 定义 InitMultipartUploadApplyPartUploadCompleteMultipartUploadAbortMultipartUpload
  • media/source/media_server.h 已实现对应 RPC handler。
  • tests/func/media_test.go:160-319 的 FN-MD-04 至 FN-MD-10 调用 /service/media/init_multipartapply_part_uploadcomplete_multipartabort_multipart
  • tests/func/scenarios_test.go:334 的 SC-05 依赖完整 multipart 流程。
  • gateway/source/gateway_server.h:404-419 只注册 ApplyUpload、CompleteUpload、ApplyDownload、GetFileInfo 和 SpeechRecognition,没有四个 multipart HTTP 路由。
  • docs/api/openapi-media.yaml 同样没有这些 multipart paths。
  • 因此外部认证客户端通过 Gateway 调用这些路径会得到 404,现有 Functional/Scenario 契约不可达。

Problem or Goal

让外部认证客户端能够通过 Gateway 使用 Media 已实现的完整分片上传协议,并使 Gateway 路由、Protobuf、Functional 测试与 OpenAPI 保持一致。

Scope

  • 为四个 multipart RPC 注册经过 JWT 鉴权的 Gateway HTTP 路由。
  • 保持 Gateway 派生的认证与 trace metadata 向 Media 转发。
  • 为四个 path 补齐 OpenAPI 请求、响应、错误和幂等说明。
  • 使用现有 FN-MD-04 至 FN-MD-10 与 SC-05 验证完整流程、错误路径和 abort 幂等。
  • 增加 route/proto/OpenAPI 一致性 contract,防止已公开 RPC 再次缺失入口。

Non-goals

Acceptance Criteria

  • 四个 multipart paths 均由 Gateway 注册并要求有效 JWT。
  • Gateway 对四个 RPC 使用正确 Protobuf 类型、service discovery 名称、timeout 和服务端派生 metadata。
  • 未认证、无效 token 和缺失后端返回现有统一错误 envelope,而不是绕过鉴权或返回非契约响应。
  • FN-MD-04 至 FN-MD-10 全部通过。
  • SC-05 完整 multipart 上传、合并、下载和 abort 流程通过。
  • docs/api/openapi-media.yaml 与实际 path、payload 和错误语义一致。
  • 自动 contract 能检测 Media 外部 RPC 与 Gateway/OpenAPI 路由差异。

Test-first Plan

先运行:

cd tests && go test -tags=func ./func/... -run 'TestFN_MD_(InitMultipart|ApplyPartUpload|CompleteMultipart|AbortMultipart)' -v -count=1

预期 RED 是 Gateway 对 multipart path 返回 404。保持现有测试不变,先添加最小 Gateway routes 达到 GREEN,再运行完整 Media Functional、SC-05、BVT 和 route contract。

Risk and Security

multipart path 必须复用 Gateway JWT 边界,不得信任请求体中的 user/owner。Media 继续约束 file size、part number、upload ID、MIME、quota 与服务端 object key。错误和日志不得暴露 presigned URL、存储凭据或对象内部路径。

Architecture Impact

No。Gateway、Media、MinIO 和 MySQL 的服务边界及状态所有权不变,仅补齐现有协议的外部入口。

Core-flow Impact

Yes。客户端到 Gateway 再到 Media 的 multipart HTTP→brpc 路径从不可达变为可达;Media 内部排序、幂等和持久化语义不变。

Required Skill Updates

  • .agents/skills/chatnow-orienting/references/core-flows.md
  • docs/api/openapi-media.yaml
  • 如 repository map 列举 Gateway 外部路由,则同步更新 .agents/skills/chatnow-orienting/references/repository-map.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions