Skip to content

v1beta3 getTeamsOfWorkspace still $refs the snake_case v1beta1 TeamPage #1143

Description

@simihablo

Summary

GET /api/workspaces/{workspaceId}/teams in the v1beta3 workspace API still $refs 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:

      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:

// 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).

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions