feat(BA-5830): AppConfigFragment + AppConfig REST v2#11286
Draft
jopemachine wants to merge 8 commits intoBA-5829from
Draft
feat(BA-5830): AppConfigFragment + AppConfig REST v2#11286jopemachine wants to merge 8 commits intoBA-5829from
jopemachine wants to merge 8 commits intoBA-5829from
Conversation
jopemachine
added a commit
that referenced
this pull request
Apr 24, 2026
jopemachine
added a commit
that referenced
this pull request
Apr 24, 2026
This was referenced Apr 24, 2026
feat(BA-5814): AppConfigPolicy foundation (data / repository / service / adapter, bulk-aware)
#11266
Draft
jopemachine
added a commit
that referenced
this pull request
Apr 24, 2026
…onfigs, publicAppConfigFragments)
Exposes the merged-view operations that BEP-1052 §5 / §3 require and
which were only reachable from the repository layer until now:
- `myAppConfigs(filter, orderBy, ...)` — caller's own merged AppConfig
list (auth required). Adapter pins `(USER, current_user)` internally.
- `adminAppConfigs(filter, orderBy, ...)` — cross-user admin search.
Optional `filter.userId` pins to a single user; otherwise paginates
across every user.
- `publicAppConfigFragments(filter, orderBy, ...)` — raw `PUBLIC`-scope
fragments, no-auth.
Service / Processor / Adapter wiring:
- `services/app_config_fragment/actions/{get_user_app_config,
search_user_app_configs, admin_search_app_configs}.py` — 3 new
actions + matching results.
- `AppConfigFragmentService.get_user_app_config` /
`search_user_app_configs` / `admin_search_app_configs` delegate to
the existing repository merged-view methods.
- `AppConfigFragmentProcessors` wraps each in an `ActionProcessor`.
- `AppConfigFragmentAdapter.my_app_config` /
`admin_get_user_app_config` / `my_search_app_configs` /
`admin_search_app_configs` expose the v2 Pydantic DTOs.
v2 DTO (`common/dto/manager/v2/app_config/`): replaces the stray
legacy Upsert/Delete DTOs (unreferenced after the BA-5822 cleanup)
with `AppConfigNode` + `GetUserAppConfigPayload` /
`SearchAppConfigsPayload` + `SearchMyAppConfigsInput` /
`SearchAppConfigsInput` / `GetUserAppConfigInput` +
`AppConfigFilter` / `AppConfigOrder` / `AppConfigOrderField`.
GQL types (`api/gql/app_config/`): `AppConfigGQL` (Pydantic-backed
Node containing a `fragments: [AppConfigFragmentGQL!]!` list plus
the deep-merged `config`), `AppConfigFilterGQL` / `AppConfigOrderByGQL`
/ `AppConfigOrderFieldGQL`. Three root resolvers registered in
`schema.py`.
REST surface lands in BA-5830 (#11286) alongside the existing
fragment REST routes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
jopemachine
added a commit
that referenced
this pull request
Apr 24, 2026
jopemachine
added a commit
that referenced
this pull request
Apr 24, 2026
jopemachine
added a commit
that referenced
this pull request
Apr 25, 2026
…onfigs, publicAppConfigFragments)
Exposes the merged-view operations that BEP-1052 §5 / §3 require and
which were only reachable from the repository layer until now:
- `myAppConfigs(filter, orderBy, ...)` — caller's own merged AppConfig
list (auth required). Adapter pins `(USER, current_user)` internally.
- `adminAppConfigs(filter, orderBy, ...)` — cross-user admin search.
Optional `filter.userId` pins to a single user; otherwise paginates
across every user.
- `publicAppConfigFragments(filter, orderBy, ...)` — raw `PUBLIC`-scope
fragments, no-auth.
Service / Processor / Adapter wiring:
- `services/app_config_fragment/actions/{get_user_app_config,
search_user_app_configs, admin_search_app_configs}.py` — 3 new
actions + matching results.
- `AppConfigFragmentService.get_user_app_config` /
`search_user_app_configs` / `admin_search_app_configs` delegate to
the existing repository merged-view methods.
- `AppConfigFragmentProcessors` wraps each in an `ActionProcessor`.
- `AppConfigFragmentAdapter.my_app_config` /
`admin_get_user_app_config` / `my_search_app_configs` /
`admin_search_app_configs` expose the v2 Pydantic DTOs.
v2 DTO (`common/dto/manager/v2/app_config/`): replaces the stray
legacy Upsert/Delete DTOs (unreferenced after the BA-5822 cleanup)
with `AppConfigNode` + `GetUserAppConfigPayload` /
`SearchAppConfigsPayload` + `SearchMyAppConfigsInput` /
`SearchAppConfigsInput` / `GetUserAppConfigInput` +
`AppConfigFilter` / `AppConfigOrder` / `AppConfigOrderField`.
GQL types (`api/gql/app_config/`): `AppConfigGQL` (Pydantic-backed
Node containing a `fragments: [AppConfigFragmentGQL!]!` list plus
the deep-merged `config`), `AppConfigFilterGQL` / `AppConfigOrderByGQL`
/ `AppConfigOrderFieldGQL`. Three root resolvers registered in
`schema.py`.
REST surface lands in BA-5830 (#11286) alongside the existing
fragment REST routes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
jopemachine
added a commit
that referenced
this pull request
Apr 25, 2026
jopemachine
added a commit
that referenced
this pull request
Apr 25, 2026
jopemachine
added a commit
that referenced
this pull request
Apr 25, 2026
jopemachine
added a commit
that referenced
this pull request
Apr 25, 2026
This was referenced Apr 25, 2026
jopemachine
added a commit
that referenced
this pull request
Apr 25, 2026
jopemachine
added a commit
that referenced
this pull request
Apr 25, 2026
jopemachine
added a commit
that referenced
this pull request
Apr 25, 2026
3 tasks
REST endpoints for the Fragment domain and the merged AppConfig view (BEP-1052 §2 / §5). Service / adapter foundation lands in BA-5827 (Fragment bulk) and BA-5829 (merged-view actions); this PR only wires the REST entry points on top. REST v2 (`/v2/app-config-fragments`): - `GET /{scope_type}/{scope_id}/{name}` — auth_required. - `POST /{scope_type}/{scope_id}/search` — scope-bound search. - `POST /search` — superadmin cross-scope search. - `POST /bulk-create` / `bulk-update` / `bulk-purge` — superadmin only. - `POST /my/bulk-create` / `my/bulk-update` — self-service USER scope. REST v2 (`/v2/app-configs`, merged view): - `GET /my/{name}` / `POST /my/search` — auth_required. - `GET /{user_id}/{name}` / `POST /search` — superadmin only. Adds the path-param classes for the new URL segments and wires the handlers into `rest/v2/tree.py`. Resolves BA-5830. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
After BA-5829 split the merged-view methods (`my_bulk_create` / `my_bulk_update`) into their own `AppConfigAdapter`, the Fragment REST handler still referenced them on `AppConfigFragmentAdapter` (404 at type-check time). The fragment routes own these URLs (the SDK already posts to `/v2/app-config-fragments/my/bulk-*`), so inject the `AppConfigAdapter` alongside the Fragment one and dispatch the my-bulk calls there. Also flips `V2AppConfigHandler` to take `AppConfigAdapter` instead of the now-stale Fragment adapter.
Carry the BA-5836 / BA-5829 rename (`bulk_create_my` → `my_bulk_create`, `bulk_update_my` → `my_bulk_update`) through the REST v2 surface, the GQL schema, and the dumped GraphQL schema artefacts. Strip the remaining `BEP-1052 §X` references from the REST v2 handlers / registries, the legacy AppConfig drop migration, and the GraphQL schema dump comments. Only the news fragments retain the BEP wording (intentional). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The `-X theirs` rebase onto BA-5829 reset the schema dump back to the older `BulkCreateMy*` / `bulkCreateMy*` field / type / mutation names. Re-apply the rename to the dump artefacts so the api-updated check sees a clean diff against the regenerated schema. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: octodog <mu001@lablup.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📚 Stacked PRs
This PR is part of a 10-PR stack delivering BEP-1052. Merge in order:
chore(BA-5822): drop legacy AppConfig layerfeat(BA-5814): AppConfigPolicy foundationfeat(BA-5815): AppConfigPolicy GraphQLfeat(BA-5844): AppConfigPolicy REST v2feat(BA-5827): AppConfigFragment foundationfeat(BA-5836): AppConfigFragment service verticalfeat(BA-5829): AppConfigFragment + AppConfig GraphQLfeat(BA-5830): AppConfigFragment + AppConfig REST v2← you are herefeat(BA-5832): AppConfig v2 SDK + CLIfeat(BA-5837): ValkeyCache for AppConfigFragment merged-view readsCI on intermediate PRs may show test churn since each one only lands a slice of the new layer. The full picture is guaranteed to build at the tip (#11298).
Summary
REST v2 endpoints for the Fragment domain and the merged AppConfig view (BEP-1052 §2 / §5). Service / adapter / DTO foundation lives in #11282 (Fragment bulk) and #11285 (merged-view actions); this PR is REST-only.
REST v2 (
/v2/app-config-fragments):GET /{scope_type}/{scope_id}/{name}— auth_requiredPOST /{scope_type}/{scope_id}/search— scope-bound searchPOST /search— superadmin cross-scope searchPOST /bulk-create/bulk-update/bulk-purge— superadmin onlyPOST /my/bulk-create/my/bulk-update— self-serviceUSERscopeREST v2 (
/v2/app-configs, merged view):GET /my/{name}/POST /my/search— auth_requiredGET /{user_id}/{name}/POST /search— superadmin onlyAdds the path-param classes for the new URL segments and wires the handlers into
rest/v2/tree.py.Resolves BA-5830.
📚 Documentation preview 📚: https://sorna--11286.org.readthedocs.build/en/11286/
📚 Documentation preview 📚: https://sorna-ko--11286.org.readthedocs.build/ko/11286/