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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions