feat(BA-6556): AppConfig REST v2 API (raw fragments and merged read/update)#12377
Draft
jopemachine wants to merge 1 commit into
Draft
feat(BA-6556): AppConfig REST v2 API (raw fragments and merged read/update)#12377jopemachine wants to merge 1 commit into
jopemachine wants to merge 1 commit into
Conversation
8647d4b to
818444b
Compare
39bb559 to
7d4e0cc
Compare
This was referenced Jun 24, 2026
818444b to
13b4d40
Compare
7d4e0cc to
8168065
Compare
13b4d40 to
67fe4c6
Compare
8168065 to
304ddcd
Compare
67fe4c6 to
de63b73
Compare
caf0913 to
f208ae6
Compare
bb05c39 to
547d235
Compare
f208ae6 to
e20123e
Compare
547d235 to
8c6c5a9
Compare
e20123e to
2e6fdbe
Compare
8c6c5a9 to
74a7d2e
Compare
2e6fdbe to
39e5265
Compare
74a7d2e to
15ce5fb
Compare
39e5265 to
98932dc
Compare
15ce5fb to
1d15924
Compare
98932dc to
fa7cabe
Compare
13e7c44 to
1e71fac
Compare
fa7cabe to
b273700
Compare
1e71fac to
27061c1
Compare
b273700 to
56586f7
Compare
6d5b0cc to
18135f0
Compare
abbbc6d to
a082d62
Compare
18135f0 to
24c5952
Compare
a082d62 to
7b3771c
Compare
704bd3f to
05aeedf
Compare
fe6d37a to
89c884b
Compare
05aeedf to
961eeff
Compare
89c884b to
fa8c651
Compare
961eeff to
5c94da3
Compare
fa8c651 to
85f9c6b
Compare
5c94da3 to
5499abb
Compare
85f9c6b to
b2f00a9
Compare
5499abb to
82bc893
Compare
b2f00a9 to
d2e3a45
Compare
82bc893 to
14e30cf
Compare
d2e3a45 to
e46f918
Compare
14e30cf to
ab5c6fd
Compare
e46f918 to
e4b88ed
Compare
ab5c6fd to
b0fed49
Compare
e4b88ed to
0067659
Compare
b0fed49 to
3a9f1a1
Compare
0067659 to
eba2d47
Compare
3a9f1a1 to
43f39c1
Compare
eba2d47 to
65561d7
Compare
DI wiring (Repositories/Services/Processors/factory), the public/anonymous resolve (resolve_public + list_public_fragments), and the REST v2 surface: admin fragment CRUD + admin_search (superadmin), scoped-search keyed by domain/user scope (auth), merged resolve (auth, with the temporary user_id==caller guard), and anonymous public read. Scoped-search uses the domain/user scope targets from BA-6554 (audit_log pattern): the request carries a scope of domain ids and/or user ids, OR-combined — no config_name or RBAC validator (per the BA-6614 decision). Squash of the BA-6556 development history, re-based onto the updated BA-6555. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
43f39c1 to
b05d6c4
Compare
65561d7 to
4b5fb3a
Compare
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.
Summary
Adds the AppConfig REST v2 API (BA-6556, BEP-1052 / epic BA-5781), mirroring the layered
app_config_allow_list/app_config_definitionstacks. This is the API surface over the fragment write/search service (BA-6554) and the merged-AppConfig read service (BA-6555).Endpoints
/v2/app-config-fragments//v2/app-config-fragments/{fragment_id}/v2/app-config-fragments/{fragment_id}/v2/app-config-fragments/{fragment_id}/v2/app-config-fragments/search/v2/app-config-fragments/scoped-search(domain, user)/v2/app-config/resolve/v2/app-config/public/{config_name}Layers
AppConfigFragmentRepositories+AppConfigService/AppConfigFragmentService+ processors intoRepositories/Services/Processors/ factory.VisibleConfigTarget+AppConfigVisibleScoperesolve to public + the principal's domain + the principal's own user fragment (reusing theby_*_visibilityconditions), unconditional like resolve.AppConfigService.resolve_public+list_public_fragmentsmerge only public-scope fragments for an anonymous (pre-login) caller.AppConfigAdapter, v2 DTOs (app_config,app_config_fragment), route registries + tree wiring,AppConfigResolveNotAllowed(403).Notes
resolve/scoped-searchadditionally reject a request whoseuser_idis not the authenticated caller, a temporary stand-in until the validator lands.domainis not yet guarded.📚 Stacked PRs
Part of the AppConfigFragment / AppConfig stack under BEP-1052 (epic BA-5781). Merge in order:
feat(BA-6552): app_config_fragments DB model and Alembic migrationfeat(BA-6553): repository layerrefactor(BA-6619): consolidate AppConfigScopeType into common.datarefactor(BA-6620): ExistsQuerier + AppConfigAllowList.existsfeat(BA-6554): AppConfigFragment service layerfeat(BA-6628): conditional-bulk repository primitivesfeat(BA-6626): app_config_fragment bulk repository layerfeat(BA-6618): AppConfigFragment bulk CRUD service layerfeat(BA-6555): app_config service layerfeat(BA-6556): AppConfig REST v2 API← you are here