[GH-ISSUE #469] Parity: Game Center mutating endpoints (app versions, details, member localizations) #133

Closed
opened 2026-02-26 21:33:41 +03:00 by kerem · 3 comments
Owner

Originally created by @rudrankriyam on GitHub (Feb 10, 2026).
Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/469

Overview

Fill remaining Game Center write-path parity gaps for app versions, details, and leaderboard set member localizations.

This is the residual mutating scope after the existing Game Center read/list parity work.

Scope (OpenAPI resources)

  • POST /v1/gameCenterAppVersions
  • PATCH /v1/gameCenterAppVersions/{id}
  • POST /v1/gameCenterDetails
  • PATCH /v1/gameCenterDetails/{id}
  • POST /v1/gameCenterLeaderboardSetMemberLocalizations
  • PATCH /v1/gameCenterLeaderboardSetMemberLocalizations/{id}
  • DELETE /v1/gameCenterLeaderboardSetMemberLocalizations/{id}

Current state

Current CLI coverage in these areas is read-heavy:

  • list/get app versions and detail-related resources
  • list/get member localizations and related resources

Create/update/delete flows above are still missing.

Proposed CLI

App versions

  • asc game-center app-versions create ...
  • asc game-center app-versions update --id "GC_APP_VERSION_ID" ...

Game Center details

  • asc game-center details create ...
  • asc game-center details update --id "DETAIL_ID" ...

Leaderboard set member localizations

  • asc game-center leaderboard-sets member-localizations create ...
  • asc game-center leaderboard-sets member-localizations update --id "LOCALIZATION_ID" ...
  • asc game-center leaderboard-sets member-localizations delete --id "LOCALIZATION_ID" --confirm

Examples (final flags should match required OpenAPI attributes/relationships):

  • asc game-center app-versions create --app-store-version-id "APP_STORE_VERSION_ID"
  • asc game-center app-versions update --id "GC_APP_VERSION_ID" --enabled true
  • asc game-center details create --game-center-group-id "GROUP_ID"
  • asc game-center details update --id "DETAIL_ID" --challenge-enabled true
  • asc game-center leaderboard-sets member-localizations create --leaderboard-set-id "SET_ID" --leaderboard-id "LEADERBOARD_ID" --locale "en-US" --name "Top Score"
  • asc game-center leaderboard-sets member-localizations delete --id "LOCALIZATION_ID" --confirm

Flag patterns

Common: --id, relationship IDs, update attributes, --confirm (delete), --output, --pretty

Validation rules:

  • required IDs/attrs enforced
  • delete requires --confirm
  • update requires at least one mutable field

Detailed TODO

  • Add/extend request + attribute types for these write endpoints in internal/asc Game Center types.
  • Add client methods in:
    • internal/asc/client_game_center_app_versions.go (create/update)
    • internal/asc/client_game_center_details.go (create/update)
    • internal/asc/client_game_center_leaderboard_set_member_localizations.go (create/update/delete)
  • Add CLI subcommands in:
    • internal/cli/gamecenter/game_center_app_versions.go
    • internal/cli/gamecenter/game_center_details.go
    • internal/cli/gamecenter/game_center_leaderboard_sets.go
  • Ensure command registration/help text are updated.
  • Keep all commands non-interactive and automation-safe.

Acceptance criteria

  • All 7 endpoints above are reachable via CLI.
  • CRUD-like flow for member localizations is complete (create/update/delete).
  • App versions and details both support create + update.
  • --confirm required for delete.
  • make format, make lint, and make test pass.

Tests

  • HTTP client tests for each endpoint (method + path + payload assertion).
  • cmdtests for required flags, invalid combinations, and destructive confirm behavior.
  • cmdtests for success output (json + optional table/markdown where applicable).

Implementation notes

  • Reuse existing Game Center command conventions and naming patterns.
  • Keep patch payloads sparse (only fields explicitly set via flags).

References

  • docs/openapi/paths.txt
  • docs/openapi/latest.json
  • internal/asc/client_game_center_app_versions.go
  • internal/asc/client_game_center_details.go
  • internal/asc/client_game_center_leaderboard_set_member_localizations.go
  • internal/cli/gamecenter/
Originally created by @rudrankriyam on GitHub (Feb 10, 2026). Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/469 # Overview Fill remaining Game Center write-path parity gaps for app versions, details, and leaderboard set member localizations. This is the residual mutating scope after the existing Game Center read/list parity work. # Scope (OpenAPI resources) - `POST /v1/gameCenterAppVersions` - `PATCH /v1/gameCenterAppVersions/{id}` - `POST /v1/gameCenterDetails` - `PATCH /v1/gameCenterDetails/{id}` - `POST /v1/gameCenterLeaderboardSetMemberLocalizations` - `PATCH /v1/gameCenterLeaderboardSetMemberLocalizations/{id}` - `DELETE /v1/gameCenterLeaderboardSetMemberLocalizations/{id}` # Current state Current CLI coverage in these areas is read-heavy: - list/get app versions and detail-related resources - list/get member localizations and related resources Create/update/delete flows above are still missing. # Proposed CLI ## App versions - `asc game-center app-versions create ...` - `asc game-center app-versions update --id "GC_APP_VERSION_ID" ...` ## Game Center details - `asc game-center details create ...` - `asc game-center details update --id "DETAIL_ID" ...` ## Leaderboard set member localizations - `asc game-center leaderboard-sets member-localizations create ...` - `asc game-center leaderboard-sets member-localizations update --id "LOCALIZATION_ID" ...` - `asc game-center leaderboard-sets member-localizations delete --id "LOCALIZATION_ID" --confirm` Examples (final flags should match required OpenAPI attributes/relationships): - `asc game-center app-versions create --app-store-version-id "APP_STORE_VERSION_ID"` - `asc game-center app-versions update --id "GC_APP_VERSION_ID" --enabled true` - `asc game-center details create --game-center-group-id "GROUP_ID"` - `asc game-center details update --id "DETAIL_ID" --challenge-enabled true` - `asc game-center leaderboard-sets member-localizations create --leaderboard-set-id "SET_ID" --leaderboard-id "LEADERBOARD_ID" --locale "en-US" --name "Top Score"` - `asc game-center leaderboard-sets member-localizations delete --id "LOCALIZATION_ID" --confirm` # Flag patterns Common: `--id`, relationship IDs, update attributes, `--confirm` (delete), `--output`, `--pretty` Validation rules: - required IDs/attrs enforced - delete requires `--confirm` - update requires at least one mutable field # Detailed TODO - [ ] Add/extend request + attribute types for these write endpoints in `internal/asc` Game Center types. - [ ] Add client methods in: - [ ] `internal/asc/client_game_center_app_versions.go` (create/update) - [ ] `internal/asc/client_game_center_details.go` (create/update) - [ ] `internal/asc/client_game_center_leaderboard_set_member_localizations.go` (create/update/delete) - [ ] Add CLI subcommands in: - [ ] `internal/cli/gamecenter/game_center_app_versions.go` - [ ] `internal/cli/gamecenter/game_center_details.go` - [ ] `internal/cli/gamecenter/game_center_leaderboard_sets.go` - [ ] Ensure command registration/help text are updated. - [ ] Keep all commands non-interactive and automation-safe. # Acceptance criteria - [ ] All 7 endpoints above are reachable via CLI. - [ ] CRUD-like flow for member localizations is complete (create/update/delete). - [ ] App versions and details both support create + update. - [ ] `--confirm` required for delete. - [ ] `make format`, `make lint`, and `make test` pass. # Tests - [ ] HTTP client tests for each endpoint (method + path + payload assertion). - [ ] cmdtests for required flags, invalid combinations, and destructive confirm behavior. - [ ] cmdtests for success output (`json` + optional `table/markdown` where applicable). # Implementation notes - Reuse existing Game Center command conventions and naming patterns. - Keep patch payloads sparse (only fields explicitly set via flags). # References - `docs/openapi/paths.txt` - `docs/openapi/latest.json` - `internal/asc/client_game_center_app_versions.go` - `internal/asc/client_game_center_details.go` - `internal/asc/client_game_center_leaderboard_set_member_localizations.go` - `internal/cli/gamecenter/`
kerem closed this issue 2026-02-26 21:33:41 +03:00
Author
Owner

@rudrankriyam commented on GitHub (Feb 10, 2026):

@cursor Please implement this issue end-to-end.

What to build

Implement the remaining Game Center mutating endpoints below.

Endpoints to add

  • POST /v1/gameCenterAppVersions
  • PATCH /v1/gameCenterAppVersions/{id}
  • POST /v1/gameCenterDetails
  • PATCH /v1/gameCenterDetails/{id}
  • POST /v1/gameCenterLeaderboardSetMemberLocalizations
  • PATCH /v1/gameCenterLeaderboardSetMemberLocalizations/{id}
  • DELETE /v1/gameCenterLeaderboardSetMemberLocalizations/{id}

Implementation plan

  1. Types (internal/asc)
  • Add create/update request structs + attributes for:
    • game center app versions
    • game center details
    • leaderboard set member localizations
  • Keep update payloads sparse and relationship wiring explicit.
  1. Client methods
  • internal/asc/client_game_center_app_versions.go
    • CreateGameCenterAppVersion
    • UpdateGameCenterAppVersion
  • internal/asc/client_game_center_details.go
    • CreateGameCenterDetail
    • UpdateGameCenterDetail
  • internal/asc/client_game_center_leaderboard_set_member_localizations.go
    • CreateGameCenterLeaderboardSetMemberLocalization
    • UpdateGameCenterLeaderboardSetMemberLocalization
    • DeleteGameCenterLeaderboardSetMemberLocalization
  1. CLI commands (internal/cli/gamecenter)
  • Add create/update subcommands for:
    • game-center app-versions
    • game-center details
  • Add create/update/delete under:
    • game-center leaderboard-sets member-localizations
  • delete must require --confirm.
  • Use shared.ContextWithTimeout and existing output conventions.
  1. Command wiring
  • Ensure new commands are registered in their command groups and show in help examples.

New tests to write

A) Client HTTP tests (internal/asc/client_http_test.go and/or gamecenter-specific HTTP tests)

Add one test per endpoint (7 total), each asserting method + path + payload:

  • TestCreateGameCenterAppVersion
  • TestUpdateGameCenterAppVersion
  • TestCreateGameCenterDetail
  • TestUpdateGameCenterDetail
  • TestCreateGameCenterLeaderboardSetMemberLocalization
  • TestUpdateGameCenterLeaderboardSetMemberLocalization
  • TestDeleteGameCenterLeaderboardSetMemberLocalization

B) CLI cmdtests (new files)

  1. internal/cli/cmdtest/game_center_app_versions_mutations_test.go
  • create success
  • update success
  • missing required flags
  • update without fields -> usage error
  1. internal/cli/cmdtest/game_center_details_mutations_test.go
  • create success
  • update success
  • missing required flags
  • update without fields -> usage error
  1. internal/cli/cmdtest/game_center_member_localizations_mutations_test.go
  • create success
  • update success
  • delete success with --confirm
  • delete without --confirm -> usage error
  • missing required IDs/relationships -> usage error

How to test locally

Run exactly:

  • make format
  • make lint
  • make test

Targeted tests:

  • go test ./internal/asc -run 'GameCenter.*(Create|Update|Delete)'
  • go test ./internal/cli/cmdtest -run 'game_center_.*mutations'

Done criteria

  • All 7 mutating endpoints are exposed and tested.
  • Delete path is confirm-protected.
  • No regressions in existing Game Center read/list commands.
  • All checks pass (format, lint, test).
<!-- gh-comment-id:3877922539 --> @rudrankriyam commented on GitHub (Feb 10, 2026): @cursor Please implement this issue end-to-end. ## What to build Implement the remaining Game Center mutating endpoints below. ### Endpoints to add - `POST /v1/gameCenterAppVersions` - `PATCH /v1/gameCenterAppVersions/{id}` - `POST /v1/gameCenterDetails` - `PATCH /v1/gameCenterDetails/{id}` - `POST /v1/gameCenterLeaderboardSetMemberLocalizations` - `PATCH /v1/gameCenterLeaderboardSetMemberLocalizations/{id}` - `DELETE /v1/gameCenterLeaderboardSetMemberLocalizations/{id}` ## Implementation plan 1. **Types (`internal/asc`)** - Add create/update request structs + attributes for: - game center app versions - game center details - leaderboard set member localizations - Keep update payloads sparse and relationship wiring explicit. 2. **Client methods** - `internal/asc/client_game_center_app_versions.go` - `CreateGameCenterAppVersion` - `UpdateGameCenterAppVersion` - `internal/asc/client_game_center_details.go` - `CreateGameCenterDetail` - `UpdateGameCenterDetail` - `internal/asc/client_game_center_leaderboard_set_member_localizations.go` - `CreateGameCenterLeaderboardSetMemberLocalization` - `UpdateGameCenterLeaderboardSetMemberLocalization` - `DeleteGameCenterLeaderboardSetMemberLocalization` 3. **CLI commands (`internal/cli/gamecenter`)** - Add create/update subcommands for: - `game-center app-versions` - `game-center details` - Add create/update/delete under: - `game-center leaderboard-sets member-localizations` - `delete` must require `--confirm`. - Use `shared.ContextWithTimeout` and existing output conventions. 4. **Command wiring** - Ensure new commands are registered in their command groups and show in help examples. ## New tests to write ### A) Client HTTP tests (`internal/asc/client_http_test.go` and/or gamecenter-specific HTTP tests) Add one test per endpoint (7 total), each asserting method + path + payload: - `TestCreateGameCenterAppVersion` - `TestUpdateGameCenterAppVersion` - `TestCreateGameCenterDetail` - `TestUpdateGameCenterDetail` - `TestCreateGameCenterLeaderboardSetMemberLocalization` - `TestUpdateGameCenterLeaderboardSetMemberLocalization` - `TestDeleteGameCenterLeaderboardSetMemberLocalization` ### B) CLI cmdtests (new files) 1. `internal/cli/cmdtest/game_center_app_versions_mutations_test.go` - create success - update success - missing required flags - update without fields -> usage error 2. `internal/cli/cmdtest/game_center_details_mutations_test.go` - create success - update success - missing required flags - update without fields -> usage error 3. `internal/cli/cmdtest/game_center_member_localizations_mutations_test.go` - create success - update success - delete success with `--confirm` - delete without `--confirm` -> usage error - missing required IDs/relationships -> usage error ## How to test locally Run exactly: - `make format` - `make lint` - `make test` Targeted tests: - `go test ./internal/asc -run 'GameCenter.*(Create|Update|Delete)'` - `go test ./internal/cli/cmdtest -run 'game_center_.*mutations'` ## Done criteria - All 7 mutating endpoints are exposed and tested. - Delete path is confirm-protected. - No regressions in existing Game Center read/list commands. - All checks pass (`format`, `lint`, `test`).
Author
Owner

@cursor[bot] commented on GitHub (Feb 10, 2026):

All work is complete. Here's a summary of what was implemented:

Types (internal/asc)

  • Added create/update request structs for GameCenterAppVersion, GameCenterDetail, and GameCenterLeaderboardSetMemberLocalization with proper attributes, relationships, and resource type wiring

Client methods (7 endpoints)

  • CreateGameCenterAppVersion - POST /v1/gameCenterAppVersions with appStoreVersion relationship
  • UpdateGameCenterAppVersion - PATCH /v1/gameCenterAppVersions/{id} with sparse enabled attribute
  • CreateGameCenterDetail - POST /v1/gameCenterDetails with app relationship
  • UpdateGameCenterDetail - PATCH /v1/gameCenterDetails/{id} with optional attributes and relationships (gameCenterGroup, defaultLeaderboard)
  • CreateGameCenterLeaderboardSetMemberLocalization - POST with gameCenterLeaderboardSet + gameCenterLeaderboard relationships
  • UpdateGameCenterLeaderboardSetMemberLocalization - PATCH with sparse name attribute
  • DeleteGameCenterLeaderboardSetMemberLocalization - DELETE (returns error only)

CLI commands

  • asc game-center app-versions create --app-store-version-id ...
  • asc game-center app-versions update --id ... --enabled true/false
  • asc game-center details create --app ...
  • asc game-center details update --id ... --challenge-enabled/--game-center-group-id/--default-leaderboard-id
  • asc game-center leaderboard-sets member-localizations create --leaderboard-set-id ... --leaderboard-id ... --locale ... --name ...
  • asc game-center leaderboard-sets member-localizations update --id ... --name ...
  • asc game-center leaderboard-sets member-localizations delete --id ... --confirm

Tests

  • 7 HTTP client tests (method, path, payload assertions)
  • 3 cmdtest files covering required flag validation, missing update flags, invalid flag values, and --confirm enforcement for delete
  • make format, make lint, and make test all pass

View PR

Open in Cursor Open in Web

<!-- gh-comment-id:3877923267 --> @cursor[bot] commented on GitHub (Feb 10, 2026): All work is complete. Here's a summary of what was implemented: **Types (`internal/asc`)** - Added create/update request structs for `GameCenterAppVersion`, `GameCenterDetail`, and `GameCenterLeaderboardSetMemberLocalization` with proper attributes, relationships, and resource type wiring **Client methods (7 endpoints)** - `CreateGameCenterAppVersion` - POST `/v1/gameCenterAppVersions` with `appStoreVersion` relationship - `UpdateGameCenterAppVersion` - PATCH `/v1/gameCenterAppVersions/{id}` with sparse `enabled` attribute - `CreateGameCenterDetail` - POST `/v1/gameCenterDetails` with `app` relationship - `UpdateGameCenterDetail` - PATCH `/v1/gameCenterDetails/{id}` with optional attributes and relationships (`gameCenterGroup`, `defaultLeaderboard`) - `CreateGameCenterLeaderboardSetMemberLocalization` - POST with `gameCenterLeaderboardSet` + `gameCenterLeaderboard` relationships - `UpdateGameCenterLeaderboardSetMemberLocalization` - PATCH with sparse `name` attribute - `DeleteGameCenterLeaderboardSetMemberLocalization` - DELETE (returns error only) **CLI commands** - `asc game-center app-versions create --app-store-version-id ...` - `asc game-center app-versions update --id ... --enabled true/false` - `asc game-center details create --app ...` - `asc game-center details update --id ... --challenge-enabled/--game-center-group-id/--default-leaderboard-id` - `asc game-center leaderboard-sets member-localizations create --leaderboard-set-id ... --leaderboard-id ... --locale ... --name ...` - `asc game-center leaderboard-sets member-localizations update --id ... --name ...` - `asc game-center leaderboard-sets member-localizations delete --id ... --confirm` **Tests** - 7 HTTP client tests (method, path, payload assertions) - 3 cmdtest files covering required flag validation, missing update flags, invalid flag values, and `--confirm` enforcement for delete - `make format`, `make lint`, and `make test` all pass <p><a href="https://github.com/rudrankriyam/App-Store-Connect-CLI/pull/474"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/view-pr-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/view-pr-light.png"><img alt="View PR" width="86" height="28" src="https://cursor.com/assets/images/view-pr-light.png"></picture></a></p> <p><a href="https://cursor.com/background-agent?bcId=bc-391fb153-7272-4a0e-8923-5799de69bf33"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/agents?id=bc-391fb153-7272-4a0e-8923-5799de69bf33"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a></p>
Author
Owner

@rudrankriyam commented on GitHub (Feb 10, 2026):

Implemented and merged in #474.
Game Center mutation parity is now covered (app versions, details, member localizations), including audit hardening and test coverage.
Closing as complete.

<!-- gh-comment-id:3878644764 --> @rudrankriyam commented on GitHub (Feb 10, 2026): Implemented and merged in #474. Game Center mutation parity is now covered (app versions, details, member localizations), including audit hardening and test coverage. Closing as complete.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/App-Store-Connect-CLI#133
No description provided.