ITADN

v1beta3 getTeamsOfWorkspace still $refs the snake_case v1beta1 TeamPage

#1143Opensimihablo 创建于 23 天前
S
simihablocommented
## Summary `GET /api/workspaces/{workspaceId}/teams` in the **v1beta3** workspace API still `$ref`s the **v1beta1** `TeamPage`, so the operation's response is documented in snake_case even though the v1beta2 team construct - the one meshery-cloud actually serves - is camelCase. `schemas/constructs/v1beta3/workspace/api.yml`: ```yaml operationId: getTeamsOfWorkspace ... $ref: "../../v1beta1/team/api.yml#/components/schemas/TeamPage" ``` `schemas/constructs/v1beta1/team/api.yml` `TeamPage` publishes `page_size` / `total_count`, and its `Team` publishes `created_at` / `updated_at` / `deleted_at`. `schemas/constructs/v1beta2/team/api.yml` publishes `pageSize` / `totalCount` / `createdAt` / `updatedAt` / `deletedAt`. This is visible in the generated TypeScript, where one file carries both spellings: `constructs/v1beta3/workspace/Workspace.d.ts` types `operations.getTeamsOfWorkspace` 200 with `page_size` / `total_count` / `created_at` / `updated_at` / `deleted_at`, while `constructs/v1beta2/team/Team.d.ts` types `components.schemas.TeamPage` with `pageSize` / `totalCount` and `Team` with `createdAt` / `updatedAt` / `deletedAt`. ## Why it matters meshery-cloud now aliases its team model straight to the canonical v1beta2 construct - `server/models/model_aliases_org.go`: ```go // Team is the canonical schemas contract for a team (meshery/schemas v1beta2). type Team = team.Team ``` and the Phase 4 wire-format flip (`fix(wire-format): flip Credential/Organization/Team/MesheryFilter/sibling JSON tags to canonical camelCase (Phase 4 tail)`) removed the snake_case aliases from the server. So a consumer that generates its client from this operation gets field names the server stopped emitting, and the mismatch is silent: the fields simply read `undefined`. We hit exactly that downstream. Sistent's `Team` type carried `teamId` and `team_name`, and the bulk-delete button read both off a team record; neither has existed on the wire since the flip, so both pushed `undefined` into the delete payload. Fixed in layer5io/sistent#1780 by deriving the local type from the canonical v1beta2 construct. ## Suggested resolution Point `getTeamsOfWorkspace` (and any sibling v1beta3 workspace operations still reaching into `v1beta1/team`) at `../../v1beta2/team/api.yml#/components/schemas/TeamPage`, and regenerate. Filed from the sistent schema-consumer audit (layer5io/sistent#1780).
2 条评论