package gateway import ( "net/http" "git.yeij.top/AskaEth/Cyrene_v2/internal/contract/enums" ) // 本文件拥有只读的客户端元数据表面:GET /api/v1/meta/enums, // 它发布权威的 platform/mood/mode 表(Android // 协作 B4,design/07 §6)。客户端(Web、Android、IM bridge)读这些 // 表,而不是各自硬编码 id → 标签映射,因此来源徽标或 // 情绪标签不会逐客户端漂移。这些表本身位于 // internal/contract/enums;本 handler 只负责提供它们,因此只有 // 一个事实来源,而不是每个消费方一份副本。 // metaEnums 是 GET /api/v1/meta/enums 的载荷。`unknown` 携带 // 机器可读的回退策略(enums.UnknownFallback),使客户端从同一 // 响应中读到表以及对未列出取值的规则。 type metaEnums struct { Platforms []enums.Item `json:"platforms"` Moods []enums.Item `json:"moods"` Modes []enums.Item `json:"modes"` Unknown string `json:"unknown"` } // handleListEnums 提供共享的客户端枚举表。它是 Go 侧权威的 // 纯投影(无存储、无错误路径),不含任何 // 敏感内容,因此像 GET /api/v1/sessions 一样门控:任何已认证角色都可以 // 读取它。 // // 向表中新增取值对既有客户端是非破坏性变更,客户端 // 必须原样展示未列出的取值(见 enums.UnknownFallback),而不是 // 丢弃它或报错。 func (s *Server) handleListEnums(w http.ResponseWriter, _ *http.Request) { writeJSON(w, http.StatusOK, metaEnums{ Platforms: enums.Platforms(), Moods: enums.Moods(), Modes: enums.Modes(), Unknown: enums.UnknownFallback, }) }