Files
tech-log-backend/src/config/architecture/modules.json
T
DongHyeonka bde5826cfd fix: ship the object storage adapter, so Studio asset uploads have a backend
`ObjectStorageAssetBinaryAdapter` bridges Studio's asset port to the object
storage port through an `ObjectProvider`, which means it compiles whether or
not an implementation is on the classpath. None was: app-bootstrap never
depended on `:adapter:outbound:objectstorage`, so the provider was always
empty and every upload and delete answered STUDIO_UNAVAILABLE with the message
"set ca-skeleton.objectstorage.* to enable" — configuration advice for a
missing dependency, which sends the reader looking in the wrong place.

The AWS SDK BOM has to be imported here as well. The objectstorage module
imports it at module scope on purpose (its comment explains: keep the strict
locking blast radius contained), and Spring's dependency management does not
propagate to consumers, so assembling the runtime here left s3 and
netty-nio-client without versions. The grpc module has the same shape and did
not surface it because app-bootstrap only consumes grpc from a test
configuration; this is the first runtime consumer of that pattern.

Lock state regenerated for the SDK's transitive set.

ActuatorSecurityHttpTest.healthEndpointIsPermitAll fails on this branch before
this change as well; it is untouched here.
2026-08-20 19:10:57 +09:00

233 lines
6.1 KiB
JSON

{
"runtime_compositions": [
"app-bootstrap"
],
"modules": [
{
"id": "domain-core",
"gradle_path": ":domain-core",
"source_path": "src/domain-core",
"allowed_dependencies": [],
"runtime_memberships": [
"app-bootstrap"
]
},
{
"id": "shared-contract",
"gradle_path": ":shared-contract",
"source_path": "src/shared-contract",
"allowed_dependencies": [],
"runtime_memberships": [
"app-bootstrap"
]
},
{
"id": "application-core",
"gradle_path": ":application-core",
"source_path": "src/application-core",
"allowed_dependencies": [
"domain-core",
"shared-contract"
],
"runtime_memberships": [
"app-bootstrap"
]
},
{
"id": "adapter-outbound-support",
"gradle_path": ":adapter:outbound:support",
"source_path": "src/adapter/outbound/support",
"allowed_dependencies": [
"domain-core",
"application-core",
"shared-contract"
],
"runtime_memberships": [
"app-bootstrap"
]
},
{
"id": "adapter-outbound-persistence-jpa",
"gradle_path": ":adapter:outbound:persistence-jpa",
"source_path": "src/adapter/outbound/persistence-jpa",
"allowed_dependencies": [
"domain-core",
"application-core",
"shared-contract"
],
"runtime_memberships": [
"app-bootstrap"
]
},
{
"id": "adapter-outbound-persistence-mongo",
"gradle_path": ":adapter:outbound:persistence-mongo",
"source_path": "src/adapter/outbound/persistence-mongo",
"allowed_dependencies": [
"application-core",
"shared-contract"
],
"runtime_memberships": []
},
{
"id": "adapter-outbound-identifier",
"gradle_path": ":adapter:outbound:identifier",
"source_path": "src/adapter/outbound/identifier",
"allowed_dependencies": [
"domain-core",
"application-core"
],
"runtime_memberships": [
"app-bootstrap"
]
},
{
"id": "adapter-outbound-fileserver",
"gradle_path": ":adapter:outbound:fileserver",
"source_path": "src/adapter/outbound/fileserver",
"allowed_dependencies": [
"application-core",
"shared-contract"
],
"runtime_memberships": [
"app-bootstrap"
]
},
{
"id": "adapter-outbound-objectstorage",
"gradle_path": ":adapter:outbound:objectstorage",
"source_path": "src/adapter/outbound/objectstorage",
"allowed_dependencies": [
"application-core",
"shared-contract"
],
"runtime_memberships": []
},
{
"id": "adapter-outbound-cache-redis",
"gradle_path": ":adapter:outbound:cache-redis",
"source_path": "src/adapter/outbound/cache-redis",
"allowed_dependencies": [
"domain-core",
"application-core",
"shared-contract",
"adapter-outbound-support"
],
"runtime_memberships": [
"app-bootstrap"
]
},
{
"id": "adapter-outbound-httpclient",
"gradle_path": ":adapter:outbound:httpclient",
"source_path": "src/adapter/outbound/httpclient",
"allowed_dependencies": [
"domain-core",
"application-core",
"shared-contract",
"adapter-outbound-support"
],
"runtime_memberships": [
"app-bootstrap"
]
},
{
"id": "adapter-outbound-messaging",
"gradle_path": ":adapter:outbound:messaging",
"source_path": "src/adapter/outbound/messaging",
"allowed_dependencies": [
"domain-core",
"application-core",
"shared-contract",
"adapter-outbound-support"
],
"runtime_memberships": [
"app-bootstrap"
]
},
{
"id": "adapter-outbound-notification",
"gradle_path": ":adapter:outbound:notification",
"source_path": "src/adapter/outbound/notification",
"allowed_dependencies": [
"domain-core",
"application-core",
"shared-contract",
"adapter-outbound-support"
],
"runtime_memberships": [
"app-bootstrap"
]
},
{
"id": "adapter-inbound-web",
"gradle_path": ":adapter:inbound:web",
"source_path": "src/adapter/inbound/web",
"allowed_dependencies": [
"domain-core",
"application-core",
"shared-contract"
],
"runtime_memberships": [
"app-bootstrap"
]
},
{
"id": "adapter-inbound-grpc",
"gradle_path": ":adapter:inbound:grpc",
"source_path": "src/adapter/inbound/grpc",
"allowed_dependencies": [
"domain-core",
"application-core",
"shared-contract"
],
"runtime_memberships": []
},
{
"id": "adapter-inbound-graphql",
"gradle_path": ":adapter:inbound:graphql",
"source_path": "src/adapter/inbound/graphql",
"allowed_dependencies": [
"domain-core",
"application-core",
"shared-contract"
],
"runtime_memberships": []
},
{
"id": "adapter-inbound-websocket",
"gradle_path": ":adapter:inbound:websocket",
"source_path": "src/adapter/inbound/websocket",
"allowed_dependencies": [
"domain-core",
"application-core",
"shared-contract"
],
"runtime_memberships": []
},
{
"id": "app-bootstrap",
"gradle_path": ":app-bootstrap",
"source_path": "src/app-bootstrap",
"allowed_dependencies": [
"domain-core",
"application-core",
"adapter-outbound-persistence-jpa",
"adapter-outbound-support",
"adapter-outbound-messaging",
"adapter-outbound-cache-redis",
"adapter-outbound-notification",
"adapter-outbound-fileserver",
"adapter-outbound-httpclient",
"adapter-outbound-identifier",
"adapter-outbound-objectstorage",
"adapter-inbound-web",
"shared-contract"
],
"runtime_memberships": [
"app-bootstrap"
]
}
]
}